§
    ‚ŠtjIõ  ã                   ó  — d Z ddlmZ ddlmZ ddlmZ ddlZddlmZ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 ddlmZmZ ddlmZ ddlmZmZmZmZm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*  e¦   «         rddl+m,Z,  e j-        e.¦  «        Z/dej        dej        fd„Z0dej        dej        fd„Z1ee G d„ de¦  «        ¦   «         ¦   «         Z2dedefd„Z3dedefd„Z4d „ Z5d!„ Z6 ed"¬#¦  «        e G d$„ d%e¦  «        ¦   «         ¦   «         Z7 ed&¬#¦  «        e G d'„ d(e¦  «        ¦   «         ¦   «         Z8 G d)„ d*e	j9        ¦  «        Z: G d+„ d,e	j9        ¦  «        Z;	 	 dRd.e	j9        d/ej        d0ej        d1ej        d2ej        dz  d3e<dz  d4e<d5ee         fd6„Z= G d7„ d8e	j9        ¦  «        Z> G d9„ d:e	j9        ¦  «        Z? G d;„ d<e¦  «        Z@e G d=„ d>e¦  «        ¦   «         ZA G d?„ d@e	j9        ¦  «        ZB G dA„ dBeA¦  «        ZC G dC„ dDeA¦  «        ZD G dE„ dFeA¦  «        ZE G dG„ dHeA¦  «        ZFe G dI„ dJeA¦  «        ¦   «         ZG G dK„ dLe	j9        ¦  «        ZH G dM„ dNe	j9        ¦  «        ZI G dO„ dPeA¦  «        ZJg dQ¢ZKdS )SzPyTorch OWL-ViT model.é    )ÚCallable)Ú	dataclass)ÚAnyN)ÚTensorÚnné   )Úinitialization)ÚACT2FN)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚis_vision_availableÚloggingÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚOwlViTConfigÚOwlViTTextConfigÚOwlViTVisionConfig)Úcenter_to_corners_formatÚlogitsÚreturnc                 óŽ   — t           j                             | t          j        t          | ¦  «        | j        ¬¦  «        ¦  «        S )N©Údevice)r   Ú
functionalÚcross_entropyÚtorchÚarangeÚlenr$   )r    s    úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/owlvit/modeling_owlvit.pyÚcontrastive_lossr+   6   s3   € ÝŒ=×&Ò& v­u¬|½CÀ¹K¼KÐPVÔP]Ð/^Ñ/^Ô/^Ñ_Ô_Ð_ó    Ú
similarityc                 óX   — t          | ¦  «        }t          | j        ¦  «        }||z   dz  S )Ng       @)r+   ÚT)r-   Úcaption_lossÚ
image_losss      r*   Úimage_text_contrastive_lossr2   ;   s.   € Ý# JÑ/Ô/€LÝ! *¤,Ñ/Ô/€JØ˜:Ñ%¨Ñ,Ð,r,   c                   óÞ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
ej        dz  ed<   dZej        dz  ed<   dZeed<   dZeed	<   d
ee         fd„ZdS )ÚOwlViTOutputa×  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `return_loss` is `True`):
        Contrastive loss for image-text similarity.
    logits_per_image (`torch.FloatTensor` of shape `(image_batch_size, text_batch_size)`):
        The scaled dot product scores between `image_embeds` and `text_embeds`. This represents the image-text
        similarity scores.
    logits_per_text (`torch.FloatTensor` of shape `(text_batch_size, image_batch_size)`):
        The scaled dot product scores between `text_embeds` and `image_embeds`. This represents the text-image
        similarity scores.
    text_embeds (`torch.FloatTensor` of shape `(batch_size * num_max_text_queries, output_dim`):
        The text embeddings obtained by applying the projection layer to the pooled output of [`OwlViTTextModel`].
    image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
        The image embeddings obtained by applying the projection layer to the pooled output of
        [`OwlViTVisionModel`].
    text_model_output (tuple[`BaseModelOutputWithPooling`]):
        The output of the [`OwlViTTextModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`OwlViTVisionModel`].
    NÚlossÚlogits_per_imageÚlogits_per_textÚtext_embedsÚimage_embedsÚtext_model_outputÚvision_model_outputr!   c                 ó^   ‡ — t          ˆ fd„‰                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ót   •K  — | ]2}|d vr‰|         n!t          ‰|¦  «                             ¦   «         V — Œ3dS ©)r:   r;   N©ÚgetattrÚto_tuple©Ú.0ÚkÚselfs     €r*   ú	<genexpr>z(OwlViTOutput.to_tuple.<locals>.<genexpr>a   óc   øè è € ð 
ð 
àð Ð LÐLÐLˆD�ŒGˆGÕRYÐZ^Ð`aÑRbÔRb×RkÒRkÑRmÔRmð
ð 
ð 
ð 
ð 
ð 
r,   ©ÚtupleÚkeys©rE   s   `r*   rA   zOwlViTOutput.to_tuple`   óC   ø€ Ýð 
ð 
ð 
ð 
à—Y’Y‘[”[ð
ñ 
ô 
ñ 
ô 
ð 	
r,   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r5   r'   ÚFloatTensorÚ__annotations__r6   r7   r8   r9   r:   r   r;   rI   r   rA   © r,   r*   r4   r4   A   sÞ   € € € € € € ðð ð( &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø15Ð�eÔ'¨$Ñ.Ð5Ð5Ñ5Ø04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ø,0€K�Ô" TÑ)Ð0Ð0Ñ0Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø48ÐÐ1Ð8Ð8Ñ8Ø6:ÐÐ3Ð:Ð:Ñ:ð
˜% œ*ð 
ð 
ð 
ð 
ð 
ð 
r,   r4   Útc                 óþ   — |                       ¦   «         r5| j        t          j        t          j        fv r| n|                      ¦   «         S | j        t          j        t          j        fv r| n|                      ¦   «         S ©N)	Úis_floating_pointÚdtyper'   Úfloat32Úfloat64ÚfloatÚint32Úint64Úint)rT   s    r*   Ú_upcastr_   h   se   € à×ÒÑÔð GØ”G¥¤­u¬}Ð=Ð=Ð=ˆqˆqÀ1Ç7Â7Á9Ä9ÐLà”G¥¤­U¬[Ð9Ð9Ð9ˆqˆq¸q¿uºu¹w¼wÐFr,   Úboxesc                 ó†   — t          | ¦  «        } | dd…df         | dd…df         z
  | dd…df         | dd…df         z
  z  S )a´  
    Computes the area of a set of bounding boxes, which are specified by its (x1, y1, x2, y2) coordinates.

    Args:
        boxes (`torch.FloatTensor` of shape `(number_of_boxes, 4)`):
            Boxes for which the area will be computed. They are expected to be in (x1, y1, x2, y2) format with `0 <= x1
            < x2` and `0 <= y1 < y2`.

    Returns:
        `torch.FloatTensor`: a tensor containing the area for each box.
    Né   r   r   r   )r_   )r`   s    r*   Úbox_arearc   q   sT   € õ �E‰NŒN€EØ�!�!�!�Q�$ŒK˜%    1 œ+Ñ%¨%°°°°1°¬+¸¸a¸a¸aÀ¸d¼Ñ*CÑDÐDr,   c                 óœ  — t          | ¦  «        }t          |¦  «        }t          j        | d d …d d d…f         |d d …d d…f         ¦  «        }t          j        | d d …d dd …f         |d d …dd …f         ¦  «        }||z
                       d¬¦  «        }|d d …d d …df         |d d …d d …df         z  }|d d …d f         |z   |z
  }||z  }	|	|fS )Nrb   r   ©Úminr   )rc   r'   Úmaxrf   Úclamp)
Úboxes1Úboxes2Úarea1Úarea2Úleft_topÚright_bottomÚwidth_heightÚinterÚunionÚious
             r*   Úbox_iours   ‚   sý   € Ý�VÑÔ€EÝ�VÑÔ€EåŒy˜    4¨¨!¨ Ô,¨f°Q°Q°Q¸¸¸°U¬mÑ<Ô<€HÝ”9˜V A A A t¨Q¨R¨R KÔ0°&¸¸¸¸A¸B¸B¸´-Ñ@Ô@€Là  8Ñ+×2Ò2°qÐ2Ñ9Ô9€LØ˜˜˜˜A˜A˜A˜q˜Ô! L°°°°A°A°A°q°Ô$9Ñ9€Eà�!�!�!�T�'ŒN˜UÑ" UÑ*€Eà
�%‰-€CØ�ˆ:Ðr,   c                 ón  — | dd…dd…f         | dd…dd…f         k                          ¦   «         st          d| › �¦  «        ‚|dd…dd…f         |dd…dd…f         k                          ¦   «         st          d|› �¦  «        ‚t          | |¦  «        \  }}t          j        | dd…ddd…f         |dd…dd…f         ¦  «        }t          j        | dd…ddd…f         |dd…dd…f         ¦  «        }||z
                       d¬¦  «        }|dd…dd…df         |dd…dd…df         z  }|||z
  |z  z
  S )zâ
    Generalized IoU from https://giou.stanford.edu/. The boxes should be in [x0, y0, x1, y1] (corner) format.

    Returns:
        `torch.FloatTensor`: a [N, M] pairwise matrix, where N = len(boxes1) and M = len(boxes2)
    Nrb   z<boxes1 must be in [x0, y0, x1, y1] (corner) format, but got z<boxes2 must be in [x0, y0, x1, y1] (corner) format, but got r   re   r   )ÚallÚ
ValueErrorrs   r'   rf   rg   rh   )ri   rj   rr   rq   Útop_leftÚbottom_rightro   Úareas           r*   Úgeneralized_box_iourz   “   s‚  € ð �1�1�1�a�b�b�5ŒM˜V A A A r¨ r Eœ]Ò*×/Ò/Ñ1Ô1ð bÝÐ`ÐX^Ð`Ð`ÑaÔaÐaØ�1�1�1�a�b�b�5ŒM˜V A A A r¨ r Eœ]Ò*×/Ò/Ñ1Ô1ð bÝÐ`ÐX^Ð`Ð`ÑaÔaÐaÝ˜ Ñ(Ô(�J€CˆåŒy˜    4¨¨!¨ Ô,¨f°Q°Q°Q¸¸¸°U¬mÑ<Ô<€HÝ”9˜V A A A t¨Q¨R¨R KÔ0°&¸¸¸¸A¸B¸B¸´-Ñ@Ô@€Là  8Ñ+×2Ò2°qÐ2Ñ9Ô9€LØ˜˜˜˜1˜1˜1˜a˜Ô  <°°°°1°1°1°a°Ô#8Ñ8€Dà�$˜‘, $Ñ&Ñ&Ð&r,   z6
    Output type of [`OwlViTForObjectDetection`].
    )Úcustom_introc                   ó  — e Zd ZU dZdZej        dz  ed<   dZe	dz  ed<   dZ
ej        dz  ed<   dZej        dz  ed<   dZej        dz  ed<   dZej        dz  ed<   dZej        dz  ed	<   dZeed
<   dZeed<   dee         fd„ZdS )ÚOwlViTObjectDetectionOutputaá  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` are provided)):
        Total loss as a linear combination of a negative log-likelihood (cross-entropy) for class prediction and a
        bounding box loss. The latter is defined as a linear combination of the L1 loss and the generalized
        scale-invariant IoU loss.
    loss_dict (`Dict`, *optional*):
        A dictionary containing the individual losses. Useful for logging.
    logits (`torch.FloatTensor` of shape `(batch_size, num_patches, num_queries)`):
        Classification logits (including no-object) for all queries.
    pred_boxes (`torch.FloatTensor` of shape `(batch_size, num_patches, 4)`):
        Normalized boxes coordinates for all queries, represented as (center_x, center_y, width, height). These
        values are normalized in [0, 1], relative to the size of each individual image in the batch (disregarding
        possible padding). You can use [`~OwlViTImageProcessor.post_process_object_detection`] to retrieve the
        unnormalized bounding boxes.
    text_embeds (`torch.FloatTensor` of shape `(batch_size, num_max_text_queries, output_dim`):
        The text embeddings obtained by applying the projection layer to the pooled output of [`OwlViTTextModel`].
    image_embeds (`torch.FloatTensor` of shape `(batch_size, patch_size, patch_size, output_dim`):
        Pooled output of [`OwlViTVisionModel`]. OWL-ViT represents images as a set of image patches and computes
        image embeddings for each patch.
    class_embeds (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_size)`):
        Class embeddings of all image patches. OWL-ViT represents images as a set of image patches where the total
        number of patches is (image_size / patch_size)**2.
    text_model_output (tuple[`BaseModelOutputWithPooling`]):
        The output of the [`OwlViTTextModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`OwlViTVisionModel`].
    Nr5   Ú	loss_dictr    Ú
pred_boxesr8   r9   Úclass_embedsr:   r;   r!   c                 ó^   ‡ — t          ˆ fd„‰                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ót   •K  — | ]2}|d vr‰|         n!t          ‰|¦  «                             ¦   «         V — Œ3dS r>   r?   rB   s     €r*   rF   z7OwlViTObjectDetectionOutput.to_tuple.<locals>.<genexpr>Ù   rG   r,   rH   rK   s   `r*   rA   z$OwlViTObjectDetectionOutput.to_tupleØ   rL   r,   )rM   rN   rO   rP   r5   r'   rQ   rR   r~   Údictr    r   r8   r9   r€   r:   r   r;   rI   r   rA   rS   r,   r*   r}   r}   «   s	  € € € € € € ðð ð8 &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø!€Iˆt�d‰{Ð!Ð!Ñ!Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø+/€J�Ô! DÑ(Ð/Ð/Ñ/Ø,0€K�Ô" TÑ)Ð0Ð0Ñ0Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø48ÐÐ1Ð8Ð8Ñ8Ø6:ÐÐ3Ð:Ð:Ñ:ð
˜% œ*ð 
ð 
ð 
ð 
ð 
ð 
r,   r}   zM
    Output type of [`OwlViTForObjectDetection.image_guided_detection`].
    c                   óü   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
ej        dz  ed<   dZej        dz  ed<   dZej        dz  ed<   dZeed	<   dZeed
<   dee         fd„ZdS )Ú&OwlViTImageGuidedObjectDetectionOutputa  
    logits (`torch.FloatTensor` of shape `(batch_size, num_patches, num_queries)`):
        Classification logits (including no-object) for all queries.
    image_embeds (`torch.FloatTensor` of shape `(batch_size, patch_size, patch_size, output_dim`):
        Pooled output of [`OwlViTVisionModel`]. OWL-ViT represents images as a set of image patches and computes
        image embeddings for each patch.
    query_image_embeds (`torch.FloatTensor` of shape `(batch_size, patch_size, patch_size, output_dim`):
        Pooled output of [`OwlViTVisionModel`]. OWL-ViT represents images as a set of image patches and computes
        image embeddings for each patch.
    target_pred_boxes (`torch.FloatTensor` of shape `(batch_size, num_patches, 4)`):
        Normalized boxes coordinates for all queries, represented as (center_x, center_y, width, height). These
        values are normalized in [0, 1], relative to the size of each individual target image in the batch
        (disregarding possible padding). You can use [`~OwlViTImageProcessor.post_process_object_detection`] to
        retrieve the unnormalized bounding boxes.
    query_pred_boxes (`torch.FloatTensor` of shape `(batch_size, num_patches, 4)`):
        Normalized boxes coordinates for all queries, represented as (center_x, center_y, width, height). These
        values are normalized in [0, 1], relative to the size of each individual query image in the batch
        (disregarding possible padding). You can use [`~OwlViTImageProcessor.post_process_object_detection`] to
        retrieve the unnormalized bounding boxes.
    class_embeds (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_size)`):
        Class embeddings of all image patches. OWL-ViT represents images as a set of image patches where the total
        number of patches is (image_size / patch_size)**2.
    text_model_output (tuple[`BaseModelOutputWithPooling`]):
        The output of the [`OwlViTTextModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`OwlViTVisionModel`].
    Nr    r9   Úquery_image_embedsÚtarget_pred_boxesÚquery_pred_boxesr€   r:   r;   r!   c                 ó^   ‡ — t          ˆ fd„‰                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ót   •K  — | ]2}|d vr‰|         n!t          ‰|¦  «                             ¦   «         V — Œ3dS r>   r?   rB   s     €r*   rF   zBOwlViTImageGuidedObjectDetectionOutput.to_tuple.<locals>.<genexpr>  rG   r,   rH   rK   s   `r*   rA   z/OwlViTImageGuidedObjectDetectionOutput.to_tuple  rL   r,   )rM   rN   rO   rP   r    r'   rQ   rR   r9   r†   r‡   rˆ   r€   r:   r   r;   rI   r   rA   rS   r,   r*   r…   r…   ß   sø   € € € € € € ðð ð8 (,€FˆEÔ Ñ$Ð+Ð+Ñ+Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø37Ð˜Ô)¨DÑ0Ð7Ð7Ñ7Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø15Ð�eÔ'¨$Ñ.Ð5Ð5Ñ5Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø48ÐÐ1Ð8Ð8Ñ8Ø6:ÐÐ3Ð:Ð:Ñ:ð
˜% œ*ð 
ð 
ð 
ð 
ð 
ð 
r,   r…   c                   óz   ‡ — e Zd Zdefˆ fd„Zdej        dededej        fd„Zdd	ej	        d
e
dej        fd„Zˆ xZS )ÚOwlViTVisionEmbeddingsÚconfigc                 ób  •— t          ¦   «                              ¦   «          |j        | _        || _        |j        | _        t          j        t          j	        |j        ¦  «        ¦  «        | _
        t          j        |j        | j        |j        |j        d¬¦  «        | _        |j        |j        z  dz  | _        | j        dz   | _        t          j        | j        | j        ¦  «        | _        |                      dt          j        | j        ¦  «                             d¦  «        d¬¦  «         d S )NF)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚbiasrb   r   Úposition_ids©r   éÿÿÿÿ©Ú
persistent)ÚsuperÚ__init__Ú
patch_sizer�   Úhidden_sizeÚ	embed_dimr   Ú	Parameterr'   ÚrandnÚclass_embeddingÚConv2dÚnum_channelsÚpatch_embeddingÚ
image_sizeÚnum_patchesÚnum_positionsÚ	EmbeddingÚposition_embeddingÚregister_bufferr(   Úexpand©rE   r�   Ú	__class__s     €r*   rš   zOwlViTVisionEmbeddings.__init__  s  ø€ Ý‰Œ×ÒÑÔÐØ Ô+ˆŒØˆŒØÔ+ˆŒÝ!œ|­E¬K¸Ô8JÑ,KÔ,KÑLÔLˆÔå!œyØÔ+ØœØÔ)ØÔ$Øð 
ñ  
ô  
ˆÔð #Ô-°Ô1BÑBÀqÑHˆÔØ!Ô-°Ñ1ˆÔÝ"$¤,¨tÔ/AÀ4Ä>Ñ"RÔ"RˆÔØ×Ò˜^­U¬\¸$Ô:LÑ-MÔ-M×-TÒ-TÐU\Ñ-]Ô-]ÐjoÐÑpÔpÐpÐpÐpr,   Ú
embeddingsÚheightÚwidthr!   c                 óÚ  — |j         d         dz
  }| j        j                             d¦  «        }|j         d         dz
  }t          j                             ¦   «         s&||k    r ||k    r|                      | j        ¦  «        S |dd…dd…f         }|dd…dd…f         }|j         d         }	|| j        z  }
|| j        z  }t          |dz  ¦  «        }| 
                    d|||	¦  «        }|                     dddd¦  «        }t          j                             ||
|fdd	¬
¦  «        }|                     dddd¦  «                             dd|	¦  «        }t	          j        ||fd¬¦  «        S )a   
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
        images. This method is also adapted to support torch.jit tracing.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        r   r   Nr–   g      à?r   rb   ÚbicubicF)ÚsizeÚmodeÚalign_corners©Údim)Úshaper¨   ÚweightÚ	unsqueezer'   ÚjitÚ
is_tracingr”   r›   r   ÚreshapeÚpermuter   r%   ÚinterpolateÚviewÚcat)rE   r­   r®   r¯   r¥   r¨   r¦   Úclass_pos_embedÚpatch_pos_embedr¶   Ú
new_heightÚ	new_widthÚsqrt_num_positionss                r*   Úinterpolate_pos_encodingz/OwlViTVisionEmbeddings.interpolate_pos_encoding(  s‘  € ð !Ô& qÔ)¨AÑ-ˆØ!Ô4Ô;×EÒEÀaÑHÔHÐØ*Ô0°Ô3°aÑ7ˆõ Œy×#Ò#Ñ%Ô%ð 	>¨+¸Ò*FÐ*FÈ6ÐUZÊ?È?Ø×*Ò*¨4Ô+<Ñ=Ô=Ð=à,¨Q¨Q¨Q°°°¨UÔ3ˆØ,¨Q¨Q¨Q°°°¨UÔ3ˆàÔ˜rÔ"ˆà˜tœÑ.ˆ
Ø˜Tœ_Ñ,ˆ	å& }°cÑ'9Ñ:Ô:ÐØ)×1Ò1°!Ð5GÐI[Ð]`ÑaÔaˆØ)×1Ò1°!°Q¸¸1Ñ=Ô=ˆÝœ-×3Ò3ØØ˜iÐ(ØØð	 4ñ 
ô 
ˆð *×1Ò1°!°Q¸¸1Ñ=Ô=×BÒBÀ1ÀbÈ#ÑNÔNˆÝŒy˜/¨?Ð;ÀÐCÑCÔCÐCr,   FÚpixel_valuesrÆ   c                 óv  — |j         \  }}}}|                      |¦  «        }|                     d¦  «                             dd¦  «        }| j                             |dd¦  «        }t          j        ||gd¬¦  «        }	|r|	|                      |	||¦  «        z   }	n|	|  	                    | j
        ¦  «        z   }	|	S )Nrb   r   r–   rµ   )r·   r£   ÚflattenÚ	transposer    rª   r'   rÀ   rÆ   r¨   r”   )
rE   rÇ   rÆ   Ú
batch_sizeÚ_r®   r¯   Úpatch_embedsr€   r­   s
             r*   ÚforwardzOwlViTVisionEmbeddings.forwardN  sÆ   € Ø'3Ô'9Ñ$ˆ
�A�v˜uØ×+Ò+¨LÑ9Ô9ˆØ#×+Ò+¨AÑ.Ô.×8Ò8¸¸AÑ>Ô>ˆØÔ+×2Ò2°:¸qÀ"ÑEÔEˆÝ”Y ¨lÐ;ÀÐCÑCÔCˆ
Ø#ð 	QØ# d×&CÒ&CÀJÐPVÐX]Ñ&^Ô&^Ñ^ˆJˆJà# d×&=Ò&=¸dÔ>OÑ&PÔ&PÑPˆJØÐr,   ©F)rM   rN   rO   r   rš   r'   r   r^   rÆ   rQ   ÚboolrÎ   Ú__classcell__©r¬   s   @r*   rŒ   rŒ     sÂ   ø€ € € € € ðqÐ1ð qð qð qð qð qð qð*$D°5´<ð $DÈð $DÐUXð $DÐ]bÔ]ið $Dð $Dð $Dð $DðL
ð 
 EÔ$5ð 
ÐQUð 
ÐbgÔbnð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r,   rŒ   c            	       ó~   ‡ — e Zd Zdefˆ fd„Z	 	 	 d	dej        dz  dej        dz  dej        dz  dej        fd„Z	ˆ xZ
S )
ÚOwlViTTextEmbeddingsr�   c                 ó\  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¦  «        | _        |  	                    dt          j        |j        ¦  «                             d¦  «        d¬¦  «         d S )Nr”   r•   Fr—   )r™   rš   r   r§   Ú
vocab_sizerœ   Útoken_embeddingÚmax_position_embeddingsr¨   r©   r'   r(   rª   r«   s     €r*   rš   zOwlViTTextEmbeddings.__init__\  sš   ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?QÑRÔRˆÔÝ"$¤,¨vÔ/MÈvÔOaÑ"bÔ"bˆÔð 	×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r,   NÚ	input_idsr”   Úinputs_embedsr!   c                 óÊ   — |�|j         d         n|j         d         }|€| j        d d …d |…f         }|€|                      |¦  «        }|                      |¦  «        }||z   }|S )Nr–   éþÿÿÿ)r·   r”   r×   r¨   )rE   rÙ   r”   rÚ   Ú
seq_lengthÚposition_embeddingsr­   s          r*   rÎ   zOwlViTTextEmbeddings.forwardf  s€   € ð -6Ð,A�Y”_ RÔ(Ð(À}ÔGZÐ[]ÔG^ˆ
àÐØÔ,¨Q¨Q¨Q°°°¨^Ô<ˆLàÐ Ø ×0Ò0°Ñ;Ô;ˆMà"×5Ò5°lÑCÔCÐØ"Ð%8Ñ8ˆ
àÐr,   ©NNN)rM   rN   rO   r   rš   r'   Ú
LongTensorrQ   r   rÎ   rÑ   rÒ   s   @r*   rÔ   rÔ   [  s©   ø€ € € € € ð
Ð/ð 
ð 
ð 
ð 
ð 
ð 
ð .2Ø04Ø26ð	ð àÔ# dÑ*ðð Ô&¨Ñ-ðð Ô(¨4Ñ/ð	ð
 
Œðð ð ð ð ð ð ð r,   rÔ   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Nr–   ç      à¿rb   r   rµ   )ÚpÚtrainingr   )
r²   r'   ÚmatmulrÊ   r   r%   Úsoftmaxrè   rí   Ú
contiguous)
râ   rã   rä   rå   ræ   rç   rè   ré   Úattn_weightsÚattn_outputs
             r*   Úeager_attention_forwardró   {  sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r,   c                   óŽ   ‡ — e Zd ZdZˆ fd„Z	 d	dej        dej        dz  dee         de	ej        ej        dz  f         fd„Z
ˆ xZS )
ÚOwlViTAttentionz=Multi-headed attention from 'Attention Is All You Need' paperc                 ó‚  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        | j        | j        z  | _        | j        | j        z  | j        k    r t          d| j        › d| j        › d�¦  «        ‚| j        dz  | _	        |j
        | _        d| _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        t          j        | j        | j        ¦  «        | _        d S )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).rë   F)r™   rš   r�   rœ   r�   Únum_attention_headsÚ	num_headsÚhead_dimrv   ÚscaleÚattention_dropoutrè   Ú	is_causalr   ÚLinearÚk_projÚv_projÚq_projÚout_projr«   s     €r*   rš   zOwlViTAttention.__init__š  s  ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØÔ3ˆŒØœ¨$¬.Ñ8ˆŒØŒ=˜4œ>Ñ)¨T¬^Ò;Ð;Ýð'ÈdÌnð 'ð 'Ø”Nð'ð 'ð 'ñô ð ð ”] DÑ(ˆŒ
ØÔ/ˆŒØˆŒå”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝ”i ¤°´Ñ?Ô?ˆŒÝœ	 $¤.°$´.ÑAÔAˆŒˆˆr,   NÚhidden_statesræ   ré   r!   c                 ój  — |j         d d…         }g |¢d‘| j        ‘R } |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        }t          j        | j	        j
        t          ¦  «        }	 |	| ||||f| j        | j        sdn| j        dœ|¤Ž\  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|                      |
¦  «        }
|
|fS )Nr–   r   rb   rá   )rç   rè   )r·   rù   r   r¿   rÊ   rþ   rÿ   r   Úget_interfacer�   Ú_attn_implementationró   rú   rí   rè   r¼   rð   r  )rE   r  ræ   ré   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacerò   rñ   s               r*   rÎ   zOwlViTAttention.forward®  sl  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà6�t—{’{ =Ñ1Ô1Ô6¸ÐE×OÒOÐPQÐSTÑUÔUˆØ4�T—[’[ Ñ/Ô/Ô4°lÐC×MÒMÈaÐQRÑSÔSˆ
Ø6�t—{’{ =Ñ1Ô1Ô6¸ÐE×OÒOÐPQÐSTÑUÔUˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð ”JØ#œ}Ð>�C�C°$´,ð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜LÐ(Ð(r,   rV   )rM   rN   rO   rP   rš   r'   r   r   r   rI   rÎ   rÑ   rÒ   s   @r*   rõ   rõ   —  s©   ø€ € € € € ØGÐGðBð Bð Bð Bð Bð. /3ð)ð )à”|ð)ð œ tÑ+ð)ð Ð+Ô,ð	)ð
 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ð)ð )ð )ð )ð )ð )ð )ð )r,   rõ   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )Ú	OwlViTMLPc                 ó  •— t          ¦   «                              ¦   «          || _        t          |j                 | _        t          j        |j        |j	        ¦  «        | _
        t          j        |j	        |j        ¦  «        | _        d S rV   )r™   rš   r�   r
   Ú
hidden_actÚactivation_fnr   rý   rœ   Úintermediate_sizeÚfc1Úfc2r«   s     €r*   rš   zOwlViTMLP.__init__Ò  sf   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ# FÔ$5Ô6ˆÔÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒˆˆr,   r  r!   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rV   )r  r  r  )rE   r  s     r*   rÎ   zOwlViTMLP.forwardÙ  s=   € ØŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš Ñ/Ô/ˆØÐr,   )rM   rN   rO   rš   r'   r   rÎ   rÑ   rÒ   s   @r*   r  r  Ñ  sc   ø€ € € € € ðKð Kð Kð Kð Kð U¤\ð °e´lð ð ð ð ð ð ð ð r,   r  c                   ól   ‡ — e Zd Zdeez  fˆ fd„Zdej        dej        dee	         dej
        fd„Zˆ xZS )ÚOwlViTEncoderLayerr�   c                 óD  •— t          ¦   «                              ¦   «          |j        | _        t	          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _	        t          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _        d S ©N©Úeps)r™   rš   rœ   r�   rõ   Ú	self_attnr   Ú	LayerNormÚlayer_norm_epsÚlayer_norm1r  ÚmlpÚlayer_norm2r«   s     €r*   rš   zOwlViTEncoderLayer.__init__â  s   ø€ Ý‰Œ×ÒÑÔÐØÔ+ˆŒÝ(¨Ñ0Ô0ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÝ˜VÑ$Ô$ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÐÐr,   r  ræ   ré   r!   c                 óÆ   — |}|                       |¦  «        } | j        d||dœ|¤Ž\  }}||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S )N)r  ræ   rS   )r  r  r   r  )rE   r  ræ   ré   ÚresidualrÌ   s         r*   rÎ   zOwlViTEncoderLayer.forwardê  s“   € ð !ˆà×(Ò(¨Ñ7Ô7ˆØ)˜4œ>ð 
Ø'Ø)ð
ð 
ð ð
ð 
Ñˆ�qð
 ! =Ñ0ˆà ˆØ×(Ò(¨Ñ7Ô7ˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆàÐr,   )rM   rN   rO   r   r   rš   r'   r   r   r   rQ   rÎ   rÑ   rÒ   s   @r*   r  r  á  s™   ø€ € € € € ðSÐ1Ð4DÑDð Sð Sð Sð Sð Sð Sðà”|ðð œðð Ð+Ô,ð	ð
 
Ô	ðð ð ð ð ð ð ð r,   r  c                   ó�   ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
dZdgZeedœZ ej        ¦   «         dej        fˆ fd„¦   «         Zˆ xZS )	ÚOwlViTPreTrainedModelr�   Úowlvit)ÚimageÚtextTr  )r  Ú
attentionsrâ   c                 óö  •— t          ¦   «                              |¦  «         | j        j        }t	          |t
          ¦  «        r™t          j        |j        j	        d|dz  ¬¦  «         t          j        |j
        j	        d|dz  ¬¦  «         t          j        |j        t          j        |j        j        d         ¦  «                             d¦  «        ¦  «         d	S t	          |t"          ¦  «        rÒt          j        |j        d|j        dz  |z  ¬¦  «         t          j        |j        j	        |j        j        |z  ¬¦  «         t          j        |j
        j	        |j        j        |z  ¬¦  «         t          j        |j        t          j        |j        j        d         ¦  «                             d¦  «        ¦  «         d	S t	          |t,          ¦  «        r¯|j        dz  d|j        j        z  dz  z  |z  }|j        dz  |z  }t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         d	S t	          |t8          ¦  «        r||j        j        dz  d|j        j        z  dz  z  |z  }d|j        j        z  dz  |z  }t          j        |j        j	        |¬¦  «         t          j        |j        j	        |¬¦  «         d	S t	          |t@          ¦  «        r|t          j        |j!        j	        |j"        dz  |z  ¬¦  «         t          j        |j#        j	        |j$        dz  |z  ¬¦  «         t          j%        |j&        | j        j'        ¦  «         d	S t	          |tP          ¦  «        r:t          j        |j)        | *                    |j+        |j,        ¦  «        ¦  «         d	S d	S )
zInitialize the weightsrá   g{®Gáz”?)ÚmeanÚstdr–   r•   rë   )r+  rb   N)-r™   Ú_init_weightsr�   Úinitializer_factorÚ
isinstancerÔ   ÚinitÚnormal_r×   r¸   r¨   Úcopy_r”   r'   r(   r·   rª   rŒ   r    r�   r£   Úinitializer_rangerõ   Únum_hidden_layersr   rþ   rÿ   r  r  rœ   r  r  ÚOwlViTModelÚtext_projectionÚtext_embed_dimÚvisual_projectionÚvision_embed_dimÚ	constant_Úlogit_scaleÚlogit_scale_init_valueÚOwlViTForObjectDetectionÚbox_biasÚcompute_box_biasÚnum_patches_heightÚnum_patches_width)rE   râ   ÚfactorÚin_proj_stdÚout_proj_stdÚfc_stdr¬   s         €r*   r,  z#OwlViTPreTrainedModel._init_weights  s¾  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ø”Ô/ˆÝ�fÕ2Ñ3Ô3ð  	vÝŒL˜Ô/Ô6¸SÀfÈtÁmÐTÑTÔTÐTÝŒL˜Ô2Ô9ÀÈÐRVÉÐWÑWÔWÐWÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhÝ˜Õ 6Ñ7Ô7ð 	vÝŒL˜Ô/°c¸vÔ?OÐQUÑ?UÐX^Ñ?^Ð_Ñ_Ô_Ð_ÝŒL˜Ô/Ô6¸F¼MÔ<[Ð^dÑ<dÐeÑeÔeÐeÝŒL˜Ô2Ô9¸v¼}Ô?^ÐagÑ?gÐhÑhÔhÐhÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhÝ˜¥Ñ0Ô0ð 	vØ!Ô+¨TÑ1°q¸6¼=Ô;ZÑ7ZÐ_cÑ6cÑdÐgmÑmˆKØ"Ô,¨dÑ2°fÑ<ˆLÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ-°;Ð?Ñ?Ô?Ð?ÝŒL˜œÔ/°\ÐBÑBÔBÐBÐBÐBÝ˜¥	Ñ*Ô*ð 	vØ!œ=Ô4°dÑ:ÀÀFÄMÔDcÑ@cÐhlÑ?lÑmÐpvÑvˆKØ˜&œ-Ô3Ñ3¸Ñ<¸vÑEˆFÝŒL˜œÔ*°Ð7Ñ7Ô7Ð7ÝŒL˜œÔ*°Ð<Ñ<Ô<Ð<Ð<Ð<Ý˜¥Ñ,Ô,ð 	vÝŒLØÔ&Ô-ØÔ)¨4Ñ/°&Ñ8ðñ ô ð õ ŒLØÔ(Ô/ØÔ+¨TÑ1°FÑ:ðñ ô ð õ ŒN˜6Ô-¨t¬{Ô/QÑRÔRÐRÐRÐRÝ˜Õ 8Ñ9Ô9ð 	vÝŒJ�v”¨×(?Ò(?ÀÔ@YÐ[aÔ[sÑ(tÔ(tÑuÔuÐuÐuÐuð	vð 	vr,   )rM   rN   rO   r   rR   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendÚ_no_split_modulesr  rõ   Ú_can_record_outputsr'   Úno_gradr   ÚModuler,  rÑ   rÒ   s   @r*   r$  r$    s¸   ø€ € € € € € àÐÐÑØ ÐØ(ÐØ&*Ð#Ø€NØÐØÐØ"&ÐØ-Ð.Ðà+Ø%ðð Ðð
 €U„]�_„_ð$v B¤Ið $vð $vð $vð $vð $vñ „_ð$vð $vð $vð $vð $vr,   r$  c                   ó\   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej        dz  dee	         de
fd„Zˆ xZS )
ÚOwlViTEncoderz±
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`OwlViTEncoderLayer`].

    Args:
        config: OwlViTConfig
    r�   c                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS rS   )r  )rC   rÌ   r�   s     €r*   ú
<listcomp>z*OwlViTEncoder.__init__.<locals>.<listcomp>G  s"   ø€ Ð$iÐ$iÐ$iÀAÕ%7¸Ñ%?Ô%?Ð$iÐ$iÐ$ir,   F)	r™   rš   r�   r   Ú
ModuleListÚranger3  ÚlayersÚgradient_checkpointingr«   s    `€r*   rš   zOwlViTEncoder.__init__D  s`   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”mÐ$iÐ$iÐ$iÐ$iÍÈvÔOgÑIhÔIhÐ$iÑ$iÔ$iÑjÔjˆŒØ&+ˆÔ#Ð#Ð#r,   Nræ   ré   r!   c                 óN   — |}| j         D ]} |||fi |¤Ž}Œt          |¬¦  «        S )N)Úlast_hidden_state)rW  r   )rE   rÚ   ræ   ré   r  Úencoder_layers         r*   rÎ   zOwlViTEncoder.forwardJ  s^   € ð &ˆØ!œ[ð 	ð 	ˆMØ)˜MØØðð ð ðð ˆMˆMõ Ø+ð
ñ 
ô 
ð 	
r,   rV   )rM   rN   rO   rP   r   rš   r'   r   r   r   r   rÎ   rÑ   rÒ   s   @r*   rQ  rQ  ;  s—   ø€ € € € € ðð ð,˜|ð ,ð ,ð ,ð ,ð ,ð ,ð /3ð
ð 
ð œ tÑ+ð
ð Ð+Ô,ð	
ð
 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r,   rQ  c                   óÎ   ‡ — e Zd Zdefˆ fd„Ze ed¬¦  «        e	 	 	 ddej	        dz  dej	        dz  dej	        dz  d	e
e         d
eez  f
d„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚOwlViTTextTransformerr�   c                 ó  •— t          ¦   «                              |¦  «         |j        }t          |¦  «        | _        t          |¦  «        | _        t          j        ||j	        ¬¦  «        | _
        |                      ¦   «          d S r  )r™   rš   rœ   rÔ   r­   rQ  Úencoderr   r  r  Úfinal_layer_normÚ	post_init)rE   r�   r�   r¬   s      €r*   rš   zOwlViTTextTransformer.__init__^  ss   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ&ˆ	Ý.¨vÑ6Ô6ˆŒÝ$ VÑ,Ô,ˆŒÝ "¤¨Y¸FÔ<QÐ RÑ RÔ RˆÔð 	�ŠÑÔÐÐÐr,   F©Útie_last_hidden_statesNrÙ   ræ   r”   ré   r!   c                 óV  — |                      ¦   «         }|                     d|d         ¦  «        }|                      ||¬¦  «        }t          | j        ||d¬¦  «        }|                     dd¦  «          | j        d||ddœ|¤Ž}|j        }|                      |¦  «        }|t          j
        |j        d         |j        ¬	¦  «        |                     t          j        ¦  «                             d¬
¦  «                             |j        ¦  «        f         }	t!          ||	¬¦  «        S )a|  
        input_ids (`torch.LongTensor` of shape `(batch_size * num_max_text_queries, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. Indices can be obtained using [`AutoTokenizer`]. See
            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details. [What are input
            IDs?](../glossary#input-ids)
        r–   )rÙ   r”   N)r�   rÚ   ræ   Úpast_key_valuesrü   T)rÚ   ræ   rü   r   r#   rµ   ©rZ  Úpooler_outputrS   )r²   r¿   r­   r   r�   Úpopr_  rZ  r`  r'   r(   r·   r$   Útor^   Úargmaxr   )
rE   rÙ   ræ   r”   ré   r  r  Úencoder_outputsrZ  Úpooled_outputs
             r*   rÎ   zOwlViTTextTransformer.forwardi  sK  € ð   —n’nÑ&Ô&ˆØ—N’N 2 {°2¤Ñ7Ô7ˆ	ØŸš°)È,˜ÑWÔWˆå+Ø”;Ø'Ø)Ø ð	
ñ 
ô 
ˆð 	�
Š
�; Ñ%Ô%Ð%Ø+7¨4¬<ð ,
Ø'Ø)Øð,
ð ,
ð ð	,
ð ,
ˆð ,Ô=ÐØ ×1Ò1Ð2CÑDÔDÐð *ÝŒLÐ*Ô0°Ô3Ð<MÔ<TÐUÑUÔUØ�LŠL�œÑ#Ô#×*Ò*¨rÐ*Ñ2Ô2×5Ò5Ð6GÔ6NÑOÔOðQô
ˆõ
 *Ø/Ø'ð
ñ 
ô 
ð 	
r,   rß   )rM   rN   rO   r   rš   r   r   r   r'   r   r   r   rI   r   rÎ   rÑ   rÒ   s   @r*   r]  r]  ]  sé   ø€ € € € € ð	Ð/ð 	ð 	ð 	ð 	ð 	ð 	ð  Ø€_¨EÐ2Ñ2Ô2Øð *.Ø.2Ø,0ð	-
ð -
à”< $Ñ&ð-
ð œ tÑ+ð-
ð ”l TÑ)ð	-
ð
 Ð+Ô,ð-
ð 
Ð+Ñ	+ð-
ð -
ð -
ñ „^ñ 3Ô2ñ  Ôð-
ð -
ð -
ð -
ð -
r,   r]  c                   ó°   ‡ — e Zd ZU eed<   dZdefˆ fd„Zdej        fd„Z	d„ Z
e	 	 ddej        dz  d	ej        dz  d
ee         deez  fd„¦   «         Zˆ xZS )ÚOwlViTTextModelr�   )r'  c                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S rV   )r™   rš   r]  Ú
text_modelra  r«   s     €r*   rš   zOwlViTTextModel.__init__   s@   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý/°Ñ7Ô7ˆŒà�ŠÑÔÐÐÐr,   r!   c                 ó$   — | j         j        j        S rV   ©rp  r­   r×   rK   s    r*   Úget_input_embeddingsz$OwlViTTextModel.get_input_embeddings¦  s   € ØŒÔ)Ô9Ð9r,   c                 ó(   — || j         j        _        d S rV   rr  )rE   rå   s     r*   Úset_input_embeddingsz$OwlViTTextModel.set_input_embeddings©  s   € Ø5:ˆŒÔ"Ô2Ð2Ð2r,   NrÙ   ræ   ré   c                 ó"   —  | j         d||dœ|¤ŽS )aÛ  
        input_ids (`torch.LongTensor` of shape `(batch_size * num_max_text_queries, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. Indices can be obtained using [`AutoTokenizer`]. See
            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details. [What are input
            IDs?](../glossary#input-ids)

        Examples:
        ```python
        >>> from transformers import AutoProcessor, OwlViTTextModel

        >>> model = OwlViTTextModel.from_pretrained("google/owlvit-base-patch32")
        >>> processor = AutoProcessor.from_pretrained("google/owlvit-base-patch32")
        >>> inputs = processor(
        ...     text=[["a photo of a cat", "a photo of a dog"], ["photo of a astranaut"]], return_tensors="pt"
        ... )
        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled (EOS token) states
        ```©rÙ   ræ   rS   )rp  )rE   rÙ   ræ   ré   s       r*   rÎ   zOwlViTTextModel.forward¬  s4   € ð6 ˆtŒð 
ØØ)ð
ð 
ð ð
ð 
ð 	
r,   ©NN)rM   rN   rO   r   rR   rF  rš   r   rO  rs  ru  r   r'   r   r   r   rI   r   rÎ   rÑ   rÒ   s   @r*   rn  rn  œ  sò   ø€ € € € € € ØÐÐÑØ ÐðÐ/ð ð ð ð ð ð ð: b¤ið :ð :ð :ð :ð;ð ;ð ;ð ð *.Ø.2ð
ð 
à”< $Ñ&ð
ð œ tÑ+ð
ð Ð+Ô,ð	
ð
 
Ð+Ñ	+ð
ð 
ð 
ñ „^ð
ð 
ð 
ð 
ð 
r,   rn  c                   ó¦   ‡ — e Zd Zdefˆ fd„Ze ed¬¦  «        e	 ddej	        de
dz  dee         d	eez  fd
„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚOwlViTVisionTransformerr�   c                 óV  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        |j        ¬¦  «        | _        t          |¦  «        | _
        t	          j        |j        |j        ¬¦  «        | _        |                      ¦   «          d S r  )r™   rš   rŒ   r­   r   r  rœ   r  Úpre_layernormrQ  r_  Úpost_layernormra  r«   s     €r*   rš   z OwlViTVisionTransformer.__init__Ï  s‹   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å0°Ñ8Ô8ˆŒÝœ\¨&Ô*<À&ÔBWÐXÑXÔXˆÔÝ$ VÑ,Ô,ˆŒÝ œl¨6Ô+=À6ÔCXÐYÑYÔYˆÔð 	�ŠÑÔÐÐÐr,   Frb  rÇ   rÆ   Nré   r!   c                 óF  — | j         j        j        j        }|                     |¦  «        }|                       ||¬¦  «        }|                      |¦  «        } | j        dd|i|¤Ž}|j        }|d d …dd d …f         }|                      |¦  «        }t          ||¬¦  «        S )N)rÆ   rÚ   r   rf  rS   )
r­   r£   r¸   rX   ri  r|  r_  rZ  r}  r   )	rE   rÇ   rÆ   ré   Úexpected_input_dtyper  rk  rZ  rl  s	            r*   rÎ   zOwlViTVisionTransformer.forwardÚ  sË   € ð  $œÔ>ÔEÔKÐØ#—’Ð';Ñ<Ô<ˆàŸš¨ÐOg˜ÑhÔhˆØ×*Ò*¨=Ñ9Ô9ˆà+7¨4¬<ð ,
ð ,
Ø'ð,
àð,
ð ,
ˆð
 ,Ô=ÐØ)¨!¨!¨!¨Q°°°¨'Ô2ˆØ×+Ò+¨MÑ:Ô:ˆå)Ø/Ø'ð
ñ 
ô 
ð 	
r,   rÏ   )rM   rN   rO   r   rš   r   r   r   r'   rQ   rÐ   r   r   rI   r   rÎ   rÑ   rÒ   s   @r*   rz  rz  Î  sË   ø€ € € € € ð	Ð1ð 	ð 	ð 	ð 	ð 	ð 	ð  Ø€_¨EÐ2Ñ2Ô2Øð 16ð
ð 
àÔ'ð
ð #'¨¡+ð
ð Ð+Ô,ð	
ð
 
Ð+Ñ	+ð
ð 
ð 
ñ „^ñ 3Ô2ñ  Ôð
ð 
ð 
ð 
ð 
r,   rz  c            
       ó˜   ‡ — e Zd ZU eed<   dZdZdefˆ fd„Zdej	        fd„Z
e	 	 ddej        dz  d	ed
ee         defd„¦   «         Zˆ xZS )ÚOwlViTVisionModelr�   rÇ   )r&  c                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S rV   )r™   rš   rz  Úvision_modelra  r«   s     €r*   rš   zOwlViTVisionModel.__init__þ  sA   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý3°FÑ;Ô;ˆÔà�ŠÑÔÐÐÐr,   r!   c                 ó$   — | j         j        j        S rV   )rƒ  r­   r£   rK   s    r*   rs  z&OwlViTVisionModel.get_input_embeddings  s   € ØÔ Ô+Ô;Ð;r,   NFrÆ   ré   c                 ó"   —  | j         d||dœ|¤ŽS )a'  
        Examples:
        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, OwlViTVisionModel

        >>> model = OwlViTVisionModel.from_pretrained("google/owlvit-base-patch32")
        >>> processor = AutoProcessor.from_pretrained("google/owlvit-base-patch32")
        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> inputs = processor(images=image, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled CLS states
        ```©rÇ   rÆ   rS   )rƒ  )rE   rÇ   rÆ   ré   s       r*   rÎ   zOwlViTVisionModel.forward  s5   € ð8 !ˆtÔ ð 
Ø%Ø%=ð
ð 
ð ð
ð 
ð 	
r,   ©NF)rM   rN   rO   r   rR   Úmain_input_namerF  rš   r   rO  rs  r   r'   rQ   rÐ   r   r   r   rÎ   rÑ   rÒ   s   @r*   r�  r�  ù  sÜ   ø€ € € € € € ØÐÐÑØ$€OØ!ÐðÐ1ð ð ð ð ð ð ð< b¤ið <ð <ð <ð <ð ð 26Ø).ð
ð 
àÔ'¨$Ñ.ð
ð #'ð
ð Ð+Ô,ð	
ð
 
$ð
ð 
ð 
ñ „^ð
ð 
ð 
ð 
ð 
r,   r�  c                   ó”  ‡ — e Zd ZU eed<   defˆ fd„Zee	 ddej	        dej	        dz  de
e         deez  fd„¦   «         ¦   «         Zee	 dd
ej	        dede
e         deez  fd„¦   «         ¦   «         Zee	 	 	 	 	 	 ddej        dz  d
ej        dz  dej	        dz  dedz  dededz  de
e         deez  fd„¦   «         ¦   «         Zˆ xZS )r4  r�   c                 ó  •— t          ¦   «                              |¦  «         |j        }|j        }|j        | _        |j        | _        |j        | _        t          |¦  «        | _	        t          |¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        t#          j        |j        ¦  «        ¦  «        | _        |                      ¦   «          d S )NF)r“   )r™   rš   Útext_configÚvision_configÚprojection_dimrœ   r6  r8  r]  rp  rz  rƒ  r   rý   r7  r5  rž   r'   Útensorr;  r:  ra  )rE   r�   r‹  rŒ  r¬   s       €r*   rš   zOwlViTModel.__init__.  sâ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ(ˆØÔ,ˆà$Ô3ˆÔØ)Ô5ˆÔØ -Ô 9ˆÔå/°Ñ<Ô<ˆŒÝ3°MÑBÔBˆÔå!#¤¨4Ô+@À$ÔBUÐ\aÐ!bÑ!bÔ!bˆÔÝ!œy¨Ô)<¸dÔ>QÐX]Ð^Ñ^Ô^ˆÔÝœ<­¬°VÔ5RÑ(SÔ(SÑTÔTˆÔð 	�ŠÑÔÐÐÐr,   NrÙ   ræ   ré   r!   c                 óh   —  | j         d||dœ|¤Ž}|j        }|                      |¦  «        |_        |S )a¨  
        input_ids (`torch.LongTensor` of shape `(batch_size * num_max_text_queries, sequence_length)`):
            Indices of input sequence tokens in the vocabulary. Indices can be obtained using [`AutoTokenizer`]. See
            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details. [What are input
            IDs?](../glossary#input-ids)

        Examples:
        ```python
        >>> import torch
        >>> from transformers import AutoProcessor, OwlViTModel

        >>> model = OwlViTModel.from_pretrained("google/owlvit-base-patch32")
        >>> processor = AutoProcessor.from_pretrained("google/owlvit-base-patch32")
        >>> inputs = processor(
        ...     text=[["a photo of a cat", "a photo of a dog"], ["photo of a astranaut"]], return_tensors="pt"
        ... )
        >>> with torch.inference_mode():
        ...     text_features = model.get_text_features(**inputs)
        ```rw  rS   )rp  rg  r5  )rE   rÙ   ræ   ré   Útext_outputsrl  s         r*   Úget_text_featureszOwlViTModel.get_text_featuresB  sX   € ð6 4C°4´?ð 4
ØØ)ð4
ð 4
ð ð4
ð 4
ˆð
 %Ô2ˆØ%)×%9Ò%9¸-Ñ%HÔ%HˆÔ"àÐr,   FrÇ   rÆ   c                 ód   —  | j         d||dœ|¤Ž}|                      |j        ¦  «        |_        |S )aˆ  
        Examples:
        ```python
        >>> import torch
        >>> from transformers.image_utils import load_image
        >>> from transformers import AutoProcessor, OwlViTModel

        >>> model = OwlViTModel.from_pretrained("google/owlvit-base-patch32")
        >>> processor = AutoProcessor.from_pretrained("google/owlvit-base-patch32")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = load_image(url)

        >>> inputs = processor(images=image, return_tensors="pt")
        >>> with torch.inference_mode():
        ...     image_features = model.get_image_features(**inputs)
        ```r†  rS   )rƒ  r7  rg  )rE   rÇ   rÆ   ré   Úvision_outputss        r*   Úget_image_featureszOwlViTModel.get_image_featuresg  sT   € ð2 6G°TÔ5Fð 6
Ø%Ø%=ð6
ð 6
ð ð6
ð 6
ˆð
 (,×'=Ò'=¸nÔ>ZÑ'[Ô'[ˆÔ$àÐr,   Úreturn_lossÚreturn_base_image_embedsc           	      ó~  —  | j         d	||dœ|¤Ž} | j        d	||dœ|¤Ž}	|	j        }
|                      |
¦  «        }
|j        }|                      |¦  «        }|t
          j                             |ddd¬¦  «        z  }|
t
          j                             |
ddd¬¦  «        z  }| j         	                    ¦   «          
                    |j        ¦  «        }t          j        ||                     ¦   «         ¦  «        |z  }|                     ¦   «         }d}|rt          |¦  «        }|}
t          ||||
||	|¬¦  «        S )
aw  
        return_loss (`bool`, *optional*):
            Whether or not to return the contrastive loss.
        return_base_image_embeds (`bool`, *optional*):
            Whether or not to return the base image embeddings.

        Examples:
        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, OwlViTModel

        >>> model = OwlViTModel.from_pretrained("google/owlvit-base-patch32")
        >>> processor = AutoProcessor.from_pretrained("google/owlvit-base-patch32")
        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))
        >>> inputs = processor(text=[["a photo of a cat", "a photo of a dog"]], images=image, return_tensors="pt")
        >>> outputs = model(**inputs)
        >>> logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
        >>> probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities
        ```r†  rw  rb   r–   T)Úordr¶   ÚkeepdimN)r5   r6   r7   r8   r9   r:   r;   rS   )rƒ  rp  rg  r5  r7  r'   ÚlinalgÚnormr:  Úexpri  r$   rî   rT   r2   r4   )rE   rÙ   rÇ   ræ   r•  rÆ   r–  ré   r“  r�  r8   r9   Útext_embeds_normr:  r7   r6   r5   s                    r*   rÎ   zOwlViTModel.forward‰  s�  € ðF 6G°TÔ5Fð 6
Ø%Ø%=ð6
ð 6
ð ð6
ð 6
ˆð 4C°4´?ð 4
ØØ)ð4
ð 4
ð ð4
ð 4
ˆð #Ô0ˆØ×*Ò*¨;Ñ7Ô7ˆØ%Ô3ˆØ×-Ò-¨lÑ;Ô;ˆð $¥e¤l×&7Ò&7¸È!ÐQSÐ]aÐ&7Ñ&bÔ&bÑbˆØ&­¬×):Ò):¸;ÈAÐSUÐ_cÐ):Ñ)dÔ)dÑdÐð Ô&×*Ò*Ñ,Ô,×/Ò/°Ô0CÑDÔDˆåœ,Ð'7¸¿ºÑ9IÔ9IÑJÔJÈ[ÑXˆØ*×,Ò,Ñ.Ô.ÐàˆØð 	@Ý.¨Ñ?Ô?ˆDà&ˆåØØ-Ø+Ø#Ø%Ø*Ø .ð
ñ 
ô 
ð 	
r,   rV   rÏ   )NNNNFN)rM   rN   rO   r   rR   rš   r   r   r'   r   r   r   rI   r   r‘  rÐ   r”  rà   rQ   r4   rÎ   rÑ   rÒ   s   @r*   r4  r4  *  sú  ø€ € € € € € àÐÐÑð˜|ð ð ð ð ð ð ð( Øð /3ð!ð !à”<ð!ð œ tÑ+ð!ð Ð+Ô,ð	!ð
 
Ð+Ñ	+ð!ð !ð !ñ „^ñ Ôð!ðF Øð */ðð à”lðð #'ðð Ð+Ô,ð	ð
 
Ð+Ñ	+ðð ð ñ „^ñ Ôðð@ Øð .2Ø15Ø.2Ø#'Ø).Ø04ðK
ð K
àÔ# dÑ*ðK
ð Ô'¨$Ñ.ðK
ð œ tÑ+ð	K
ð
 ˜D‘[ðK
ð #'ðK
ð #'¨¡+ðK
ð Ð+Ô,ðK
ð 
�Ñ	ðK
ð K
ð K
ñ „^ñ ÔðK
ð K
ð K
ð K
ð K
r,   r4  c                   óN   ‡ — e Zd Zddedefˆ fd„Zdej        dej        fd„Z	ˆ xZ
S )	ÚOwlViTBoxPredictionHeadé   r�   Úout_dimc                 ó,  •— t          ¦   «                              ¦   «          |j        j        }t	          j        ||¦  «        | _        t	          j        ||¦  «        | _        t	          j        ¦   «         | _	        t	          j        ||¦  «        | _
        d S rV   )r™   rš   rŒ  rœ   r   rý   Údense0Údense1ÚGELUÚgeluÚdense2)rE   r�   r¡  r¯   r¬   s       €r*   rš   z OwlViTBoxPredictionHead.__init__Ú  sn   ø€ Ý‰Œ×ÒÑÔÐàÔ$Ô0ˆÝ”i  uÑ-Ô-ˆŒÝ”i  uÑ-Ô-ˆŒÝ”G‘I”IˆŒ	Ý”i  wÑ/Ô/ˆŒˆˆr,   Úimage_featuresr!   c                 óØ   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rV   )r£  r¦  r¤  r§  )rE   r¨  Úoutputs      r*   rÎ   zOwlViTBoxPredictionHead.forwardã  s\   € Ø—’˜^Ñ,Ô,ˆØ—’˜6Ñ"Ô"ˆØ—’˜VÑ$Ô$ˆØ—’˜6Ñ"Ô"ˆØ—’˜VÑ$Ô$ˆØˆr,   )r   )rM   rN   rO   r   r^   rš   r'   r   rQ   rÎ   rÑ   rÒ   s   @r*   rŸ  rŸ  Ù  sw   ø€ € € € € ð0ð 0˜|ð 0°cð 0ð 0ð 0ð 0ð 0ð 0ð e¤lð °uÔ7Hð ð ð ð ð ð ð ð r,   rŸ  c            	       ó|   ‡ — e Zd Zdefˆ fd„Zdej        dej        dz  dej        dz  deej                 fd„Z	ˆ xZ
S )	ÚOwlViTClassPredictionHeadr�   c                 ól  •— t          ¦   «                              ¦   «          |j        j        }|j        j        | _        t          j        | j        |¦  «        | _        t          j        | j        d¦  «        | _	        t          j        | j        d¦  «        | _
        t          j        ¦   «         | _        d S )Nr   )r™   rš   r‹  rœ   rŒ  Ú	query_dimr   rý   r£  Úlogit_shiftr:  ÚELUÚelu)rE   r�   r¡  r¬   s      €r*   rš   z"OwlViTClassPredictionHead.__init__í  sƒ   ø€ Ý‰Œ×ÒÑÔÐàÔ$Ô0ˆØÔ-Ô9ˆŒå”i ¤°Ñ8Ô8ˆŒÝœ9 T¤^°QÑ7Ô7ˆÔÝœ9 T¤^°QÑ7Ô7ˆÔÝ”6‘8”8ˆŒˆˆr,   r9   Úquery_embedsNÚ
query_maskr!   c                 ó   — |                       |¦  «        }|€L|j        }|j        d d…         \  }}t          j        ||| j        f¦  «                             |¦  «        }||fS |t          j                             |dd¬¦  «        dz   z  }|t          j                             |dd¬¦  «        dz   z  }t          j	        d||¦  «        }|  
                    |¦  «        }	|                      |¦  «        }
|                      |
¦  «        dz   }
||	z   |
z  }|�v|j        dk    rt          j        |d¬	¦  «        }t          j        |d
k    t          j        |j        ¦  «        j        |¦  «        }|                     t          j        ¦  «        }||fS )Nrb   r–   T)r¶   r™  g�íµ ÷Æ°>z...pd,...qd->...pqr   rÜ   rµ   r   )r£  r$   r·   r'   Úzerosr®  ri  rš  r›  Úeinsumr¯  r:  r±  Úndimr¹   ÚwhereÚfinforX   rf   rY   )rE   r9   r²  r³  Úimage_class_embedsr$   rË   r¥   Úpred_logitsr¯  r:  s              r*   rÎ   z!OwlViTClassPredictionHead.forwardø  s”  € ð "Ÿ[š[¨Ñ6Ô6ÐØÐØ'Ô.ˆFØ&8Ô&>¸rÀ¸rÔ&BÑ#ˆJ˜Ýœ+ z°;ÀÄÐ&OÑPÔP×SÒSÐTZÑ[Ô[ˆKØÐ!3Ð4Ð4ð 0µ5´<×3DÒ3DÐEWÐ]_ÐimÐ3DÑ3nÔ3nÐquÑ3uÑvÐØ#¥u¤|×'8Ò'8¸È2ÐW[Ð'8Ñ'\Ô'\Ð_cÑ'cÑdˆõ ”lÐ#7Ð9KÈ\ÑZÔZˆð ×&Ò& |Ñ4Ô4ˆØ×&Ò& |Ñ4Ô4ˆØ—h’h˜{Ñ+Ô+¨aÑ/ˆØ" [Ñ0°KÑ?ˆàÐ!ØŒ Ò"Ð"Ý"œ_¨Z¸RÐ@Ñ@Ô@�
åœ+ j°A¢oµu´{À;ÔCTÑ7UÔ7UÔ7YÐ[fÑgÔgˆKØ%Ÿ.š.­¬Ñ7Ô7ˆKàÐ/Ð0Ð0r,   )rM   rN   rO   r   rš   r'   rQ   r   rI   rÎ   rÑ   rÒ   s   @r*   r¬  r¬  ì  s˜   ø€ € € € € ð	˜|ð 	ð 	ð 	ð 	ð 	ð 	ð!1àÔ'ð!1ð Ô'¨$Ñ.ð!1ð ”L 4Ñ'ð	!1ð
 
ˆuÔ Ô	!ð!1ð !1ð !1ð !1ð !1ð !1ð !1ð !1r,   r¬  c                   óØ  ‡ — e Zd ZU eed<   defˆ fd„Zedededej	        fd„¦   «         Z
dededej	        fd„Z	 dd	ej        d
ej        dedej        fd„Z	 	 dd	ej        dej        dz  dej	        dz  deej                 fd„Z	 ddej	        dej        dej	        dedee         deej                 fd„Z	 ddej        dedee         deej                 fd„Z	 ddej        dej        dedej        fd„Zee	 	 ddej        dej        dz  dedee         def
d„¦   «         ¦   «         Zee	 	 ddej	        dej        dej	        dz  dedee         defd„¦   «         ¦   «         Zˆ xZS ) r<  r�   c                 ó’  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        t          |¦  «        | _        t          j	        |j
        j        |j
        j        ¬¦  «        | _        t          j        ¦   «         | _        || _        | j        j
        j        | j        j
        j        z  | _        | j        j
        j        | j        j
        j        z  | _        |                      d|                      | j        | j        ¦  «        d¬¦  «         |                      ¦   «          d S )Nr  r=  Fr—   )r™   rš   r4  r%  r¬  Ú
class_headrŸ  Úbox_headr   r  rŒ  rœ   r  Ú
layer_normÚSigmoidÚsigmoidr�   r¤   r›   r?  r@  r©   r>  ra  r«   s     €r*   rš   z!OwlViTForObjectDetection.__init__  s  ø€ Ý‰Œ×Ò˜Ñ Ô Ð å! &Ñ)Ô)ˆŒÝ3°FÑ;Ô;ˆŒÝ/°Ñ7Ô7ˆŒåœ, vÔ';Ô'GÈVÔMaÔMpÐqÑqÔqˆŒÝ”z‘|”|ˆŒØˆŒØ"&¤+Ô";Ô"FÈ$Ì+ÔJcÔJnÑ"nˆÔØ!%¤Ô!:Ô!EÈÌÔIbÔImÑ!mˆÔØ×ÒØ˜×-Ò-¨dÔ.EÀtÔG]Ñ^Ô^Ðkpð 	ñ 	
ô 	
ð 	
ð 	�ŠÑÔÐÐÐr,   r?  r@  r!   c                 óf  — t          j        d|dz   t           j        ¬¦  «        }t          j        d| dz   t           j        ¬¦  «        }t          j        ||d¬¦  «        \  }}t          j        ||fd¬¦  «        }|dxx         |z  cc<   |dxx         | z  cc<   |                     dd	¦  «        }|S )
Nr   )rX   Úxy)Úindexingr–   rµ   ©.r   ©.r   rb   )r'   r(   rY   ÚmeshgridÚstackr¿   )r?  r@  Úx_coordinatesÚy_coordinatesÚxxÚyyÚbox_coordinatess          r*   Ú!normalize_grid_corner_coordinatesz:OwlViTForObjectDetection.normalize_grid_corner_coordinates1  sË   € õ œ QÐ(9¸AÑ(=ÅUÄ]ÐSÑSÔSˆÝœ QÐ(:¸QÑ(>ÅeÄmÐTÑTÔTˆÝ” ¨}ÀtÐLÑLÔL‰ˆˆBõ  œ+ r¨2 h°BÐ7Ñ7Ô7ˆØ˜ÐÐÔÐ#4Ñ4ÐÐÑØ˜ÐÐÔÐ#5Ñ5ÐÐÑð *×.Ò.¨r°1Ñ5Ô5ˆàÐr,   c                 ó¸  — |                       ||¦  «        }t          j        |dd¦  «        }t          j        |dz   ¦  «        t          j        | dz   ¦  «        z
  }t          j        |d¦  «        }|dxx         |z  cc<   |dxx         |z  cc<   t          j        |dz   ¦  «        t          j        | dz   ¦  «        z
  }t          j        ||gd¬¦  «        }|S )Nrá   g      ð?g-Cëâ6?rÆ  rÇ  r–   rµ   )rÏ  r'   ÚclipÚlogÚlog1pÚ	full_likerÀ   )rE   r?  r@  rÎ  Úbox_coord_biasÚbox_sizeÚbox_size_biasr=  s           r*   r>  z)OwlViTForObjectDetection.compute_box_biasB  sð   € à×@Ò@ÐASÐUfÑgÔgˆÝœ* _°c¸3Ñ?Ô?ˆõ œ ?°TÑ#9Ñ:Ô:½U¼[È/ÐIYÐ\`ÑI`Ñ=aÔ=aÑaˆõ ”? >°3Ñ7Ô7ˆØ�ÐÐÔÐ-Ñ-ÐÐÑØ�ÐÐÔÐ.Ñ.ÐÐÑÝœ	 (¨T¡/Ñ2Ô2µU´[À(ÀÈTÑAQÑ5RÔ5RÑRˆõ ”9˜n¨mÐ<À"ÐEÑEÔEˆØˆr,   FÚimage_featsÚfeature_maprÆ   c                 óð   — |                       |¦  «        }|r#|j        \  }}}}|                      ||¦  «        }n| j        }|                     |j        ¦  «        }||z  }|                      |¦  «        }|S )a  
        Args:
            image_feats:
                Features extracted from the image, returned by the `image_text_embedder` method.
            feature_map:
                A spatial re-arrangement of image_features, also returned by the `image_text_embedder` method.
            interpolate_pos_encoding:
                Whether to interpolate the pre-trained position encodings.
        Returns:
            pred_boxes:
                List of predicted boxes (cxcywh normalized to 0, 1) nested within a dictionary.
        )r¿  r·   r>  r=  ri  r$   rÂ  )	rE   rØ  rÙ  rÆ   r   rÌ   r?  r@  r=  s	            r*   Úbox_predictorz&OwlViTForObjectDetection.box_predictorT  s‡   € ð& —]’] ;Ñ/Ô/ˆ
ð $ð 	%Ø:EÔ:KÑ7ˆAÐ!Ð#4°aØ×,Ò,Ð-?ÐARÑSÔSˆHˆHà”}ˆHà—;’;˜{Ô1Ñ2Ô2ˆØ�hÑˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐr,   Nr²  r³  c                 ó>   — |                       |||¦  «        \  }}||fS )a8  
        Args:
            image_feats:
                Features extracted from the `image_text_embedder`.
            query_embeds:
                Text query embeddings.
            query_mask:
                Must be provided with query_embeddings. A mask indicating which query embeddings are valid.
        )r¾  )rE   rØ  r²  r³  r»  rº  s         r*   Úclass_predictorz(OwlViTForObjectDetection.class_predictoru  s,   € ð -1¯OªO¸KÈÐWaÑ,bÔ,bÑ)ˆÐ(àÐ/Ð0Ð0r,   rÙ   rÇ   ræ   ré   c                 ó@  —  | j         d||||dœ|¤Ž}|r5|j        \  }}}}	|| j        j        j        z  }
|	| j        j        j        z  }n| j        }
| j        }|j        d         }| j         j         	                    |¦  «        }t          j        |d d …d d…d d …f         |d d …d d…f         j        ¦  «        }|d d …dd …d d …f         |z  }|                      |¦  «        }|j        d         |
||j        d         f}|                     |¦  «        }|d         }|||fS )N)rÇ   rÙ   ræ   rÆ   r   r   r–   éüÿÿÿrS   )r%  r·   r�   rŒ  r›   r?  r@  r;   rƒ  r}  r'   Úbroadcast_torÀ  r¼   )rE   rÙ   rÇ   ræ   rÆ   ré   ÚoutputsrÌ   r®   r¯   r?  r@  rZ  r9   Úclass_token_outÚnew_sizer8   s                    r*   Úimage_text_embedderz,OwlViTForObjectDetection.image_text_embedderˆ  s€  € ð �$”+ð 
Ø%ØØ)Ø%=ð	
ð 
ð
 ð
ð 
ˆð $ð 	7Ø".Ô"4ÑˆAˆq�&˜%Ø!'¨4¬;Ô+DÔ+OÑ!OÐØ %¨¬Ô)BÔ)MÑ MÐÐà!%Ô!8ÐØ $Ô 6Ðð $Ô7¸Ô:ÐØ”{Ô/×>Ò>Ð?PÑQÔQˆõ  Ô,¨\¸!¸!¸!¸R¸a¸RÀÀÀ¸(Ô-CÀ\ÐRSÐRSÐRSÐUXÐVXÐUXÐRXÔEYÔE_Ñ`Ô`ˆð $ A A A q r r¨1¨1¨1 HÔ-°Ñ?ˆØ—’ |Ñ4Ô4ˆð Ô˜qÔ!ØØØÔ˜rÔ"ð	
ˆð $×+Ò+¨HÑ5Ô5ˆØ˜b”kˆà˜\¨7Ð3Ð3r,   c                 ó*  —  | j         j        d||dœ|¤Ž}|r5|j        \  }}}}|| j        j        j        z  }|| j        j        j        z  }	n| j        }| j        }	|d         }
| j         j                             |
¦  «        }t          j
        |d d …d d…d d …f         |d d …d d…f         j        ¦  «        }|d d …dd …d d …f         |z  }|                      |¦  «        }|j        d         ||	|j        d         f}|                     |¦  «        }||fS )Nr†  r   r   r–   rS   )r%  rƒ  r·   r�   rŒ  r›   r?  r@  r}  r'   rà  rÀ  r¼   )rE   rÇ   rÆ   ré   r“  rÌ   r®   r¯   r?  r@  rZ  r9   râ  rã  s                 r*   Úimage_embedderz'OwlViTForObjectDetection.image_embedder·  sn  € ð 6N°T´[Ô5Mð 6
Ø%Ð@Xð6
ð 6
Ø\bð6
ð 6
ˆð $ð 	7Ø".Ô"4ÑˆAˆq�&˜%Ø!'¨4¬;Ô+DÔ+OÑ!OÐØ %¨¬Ô)BÔ)MÑ MÐÐà!%Ô!8ÐØ $Ô 6Ðð +¨1Ô-ÐØ”{Ô/×>Ò>Ð?PÑQÔQˆõ  Ô,¨\¸!¸!¸!¸R¸a¸RÀÀÀ¸(Ô-CÀ\ÐRSÐRSÐRSÐUXÐVXÐUXÐRXÔEYÔE_Ñ`Ô`ˆð $ A A A q r r¨1¨1¨1 HÔ-°Ñ?ˆØ—’ |Ñ4Ô4ˆð Ô˜qÔ!ØØØÔ˜rÔ"ð	
ˆð $×+Ò+¨HÑ5Ô5ˆà˜nÐ-Ð-r,   Úquery_image_featuresÚquery_feature_mapc                 óØ  — |                       |¦  «        \  }}|                      |||¦  «        }t          |¦  «        }g }g }	|j        }
t	          |j        d         ¦  «        D �]Q}t          j        g d¢g|
¬¦  «        }||         }t          ||¦  «        \  }}t          j	        |d         dk    ¦  «        rt          ||¦  «        }t          j        |¦  «        dz  }|d         |k                         ¦   «         }|                     ¦   «         r£||         |                     d¦  «                 }t          j        ||         d¬¦  «        }t          j        d||¦  «        }|t          j        |¦  «                 }|                     ||         |         ¦  «         |	                     |¦  «         �ŒS|r)t          j        |¦  «        }t          j        |	¦  «        }nd	\  }}|||fS )
Nr   )r   r   r   r   r#   rá   gš™™™™™é?r   )Úaxiszd,id->irx  )rÝ  rÛ  r   r$   rV  r·   r'   rŽ  rs   ru   rz   rg   ÚnonzeroÚnumelÚsqueezer*  r¶  ÚargminÚappendrÉ  )rE   rç  rè  rÆ   rÌ   r€   r   Úpred_boxes_as_cornersÚbest_class_embedsÚbest_box_indicesÚpred_boxes_deviceÚiÚeach_query_boxÚeach_query_pred_boxesÚiousÚiou_thresholdÚselected_indsÚselected_embeddingsÚmean_embedsÚmean_simÚbest_box_indr²  Úbox_indicess                          r*   Úembed_image_queryz*OwlViTForObjectDetection.embed_image_queryà  sô  € ð ×.Ò.Ð/CÑDÔD‰ˆˆ<Ø×'Ò'Ð(<Ð>OÐQiÑjÔjˆ
Ý 8¸Ñ DÔ DÐð ÐØÐØ1Ô8ÐåÐ+Ô1°!Ô4Ñ5Ô5ð 	6ñ 	6ˆAÝ"œ\¨<¨<¨<¨.ÐARÐSÑSÔSˆNØ$9¸!Ô$<Ð!Ý˜nÐ.CÑDÔD‰GˆD�!õ Œy˜˜aœ CšÑ(Ô(ð RÝ*¨>Ð;PÑQÔQ�õ "œI d™OœO¨cÑ1ˆMà! !œW¨Ò5×>Ò>Ñ@Ô@ˆMØ×"Ò"Ñ$Ô$ð 6Ø&2°1¤o°m×6KÒ6KÈAÑ6NÔ6NÔ&OÐ#Ý#œj¨°a¬¸qÐAÑAÔA�Ý œ<¨	°;Ð@SÑTÔT�Ø,­U¬\¸(Ñ-CÔ-CÔD�Ø!×(Ò(¨°a¬¸Ô)FÑGÔGÐGØ ×'Ò'¨Ñ5Ô5Ð5ùàð 	3Ý œ;Ð'8Ñ9Ô9ˆLÝœ+Ð&6Ñ7Ô7ˆKˆKà(2Ñ%ˆL˜+à˜[¨*Ð4Ð4r,   Úquery_pixel_valuesc           
      óÄ  — |                       ||¬¦  «        d         } | j         d||dœ|¤Ž\  }}|j        \  }}	}
}t          j        |||	|
z  |f¦  «        }|j        \  }}	}
}t          j        |||	|
z  |f¦  «        }|                      |||¦  «        \  }}}|                      ||¬¦  «        \  }}|                      |||¦  «        }t          ||||||d|¬¦  «        S )a’  
        query_pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values of query image(s) to be detected. Pass in one query image per target image.

        Examples:
        ```python
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image
        >>> import torch
        >>> from transformers import AutoProcessor, OwlViTForObjectDetection

        >>> processor = AutoProcessor.from_pretrained("google/owlvit-base-patch16")
        >>> model = OwlViTForObjectDetection.from_pretrained("google/owlvit-base-patch16")
        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))
        >>> query_url = "http://images.cocodataset.org/val2017/000000001675.jpg"
        >>> with httpx.stream("GET", query_url) as response:
        ...     query_image = Image.open(BytesIO(response.read()))
        >>> inputs = processor(images=image, query_images=query_image, return_tensors="pt")
        >>> with torch.no_grad():
        ...     outputs = model.image_guided_detection(**inputs)
        >>> # Target image sizes (height, width) to rescale box predictions [batch_size, 2]
        >>> target_sizes = torch.Tensor([image.size[::-1]])
        >>> # Convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
        >>> results = processor.post_process_image_guided_detection(
        ...     outputs=outputs, threshold=0.6, nms_threshold=0.3, target_sizes=target_sizes
        ... )
        >>> i = 0  # Retrieve predictions for the first image
        >>> boxes, scores = results[i]["boxes"], results[i]["scores"]
        >>> for box, score in zip(boxes, scores):
        ...     box = [round(i, 2) for i in box.tolist()]
        ...     print(f"Detected similar object with confidence {round(score.item(), 3)} at location {box}")
        Detected similar object with confidence 0.856 at location [10.94, 50.4, 315.8, 471.39]
        Detected similar object with confidence 1.0 at location [334.84, 25.33, 636.16, 374.71]
        ```r†  r   )rØ  r²  N)r9   r†   r‡   rˆ   r    r€   r:   r;   rS   )ræ  r·   r'   r¼   rÿ  rÝ  rÛ  r…   )rE   rÇ   r   rÆ   ré   rè  rÙ  r“  rË   r?  r@  Ú
hidden_dimrØ  Úquery_image_featsr²  rò  rˆ   r»  r€   r‡   s                       r*   Úimage_guided_detectionz/OwlViTForObjectDetection.image_guided_detection  sg  € ð^ !×/Ò/Ø+ÐF^ð 0ñ 
ô 
à
ôÐð ': dÔ&9ð '
Ø%Ø%=ð'
ð '
ð ð'
ð '
Ñ#ˆ�^ð ITÔHYÑEˆ
Ð&Ð(9¸:Ý”m K°*Ð>PÐSdÑ>dÐfpÐ1qÑrÔrˆàHYÔH_ÑEˆ
Ð&Ð(9¸:Ý!œMØ 
Ð,>ÐARÑ,RÐT^Ð_ñ
ô 
Ðð <@×;QÒ;QØÐ0Ð2Jñ<
ô <
Ñ8ˆÐ&Ð(8ð
 '+×&:Ò&:À{ÐamÐ&:Ñ&nÔ&nÑ#ˆ�lð !×.Ò.¨{¸KÐIaÑbÔbÐå5Ø$Ø0Ø/Ø-ØØ%Ø"Ø .ð	
ñ 	
ô 	
ð 		
r,   c           	      óæ  —  | j         d||||dœ|¤Ž\  }}}|j        }	|j        }
|j        \  }}}}t	          j        ||||z  |f¦  «        }|j        d         |z  }|                     |||j        d         ¦  «        }|                     |||j        d         ¦  «        }|d         dk    }|                      |||¦  «        \  }}|                      |||¦  «        }t          ||||||	|
¬¦  «        S )a	  
        input_ids (`torch.LongTensor` of shape `(batch_size * num_max_text_queries, sequence_length)`, *optional*):
            Indices of input sequence tokens in the vocabulary. Indices can be obtained using [`AutoTokenizer`]. See
            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details. [What are input
            IDs?](../glossary#input-ids).

        Examples:
        ```python
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image
        >>> import torch

        >>> from transformers import OwlViTProcessor, OwlViTForObjectDetection

        >>> processor = OwlViTProcessor.from_pretrained("google/owlvit-base-patch32")
        >>> model = OwlViTForObjectDetection.from_pretrained("google/owlvit-base-patch32")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))
        >>> text_labels = [["a photo of a cat", "a photo of a dog"]]
        >>> inputs = processor(text=text_labels, images=image, return_tensors="pt")
        >>> outputs = model(**inputs)

        >>> # Target image sizes (height, width) to rescale box predictions [batch_size, 2]
        >>> target_sizes = torch.tensor([(image.height, image.width)])
        >>> # Convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
        >>> results = processor.post_process_grounded_object_detection(
        ...     outputs=outputs, target_sizes=target_sizes, threshold=0.1, text_labels=text_labels
        ... )
        >>> # Retrieve predictions for the first image for the corresponding text queries
        >>> result = results[0]
        >>> boxes, scores, text_labels = result["boxes"], result["scores"], result["text_labels"]
        >>> for box, score, text_label in zip(boxes, scores, text_labels):
        ...     box = [round(i, 2) for i in box.tolist()]
        ...     print(f"Detected {text_label} with confidence {round(score.item(), 3)} at location {box}")
        Detected a photo of a cat with confidence 0.707 at location [324.97, 20.44, 640.58, 373.29]
        Detected a photo of a cat with confidence 0.717 at location [1.46, 55.26, 315.55, 472.17]
        ```)rÙ   rÇ   ræ   rÆ   r   r–   rÆ  )r9   r8   r   r    r€   r:   r;   rS   )	rä  r:   r;   r·   r'   r¼   rÝ  rÛ  r}   )rE   rÙ   rÇ   ræ   rÆ   ré   r²  rÙ  rá  r�  r“  rË   r?  r@  r  rØ  Úmax_text_queriesr³  r»  r€   r   s                        r*   rÎ   z OwlViTForObjectDetection.forwarda  sQ  € ðf .F¨TÔ-Eð .
ØØ%Ø)Ø%=ð	.
ð .
ð
 ð.
ð .
Ñ*ˆ�k 7ð Ô0ˆØ Ô4ˆàHSÔHYÑEˆ
Ð&Ð(9¸:Ý”m K°*Ð>PÐSdÑ>dÐfpÐ1qÑrÔrˆð %œ?¨1Ô-°Ñ;ÐØ#×+Ò+¨JÐ8HÈ,ÔJ\Ð]_ÔJ`ÑaÔaˆð ×%Ò% jÐ2BÀIÄOÐTVÔDWÑXÔXˆ	Ø˜vÔ&¨Ò*ˆ
ð '+×&:Ò&:¸;ÈÐV`Ñ&aÔ&aÑ#ˆ�lð ×'Ò'¨°[ÐBZÑ[Ô[ˆ
å*Ø$Ø$Ø!ØØ%Ø*Ø .ð
ñ 
ô 
ð 	
r,   rÏ   rx  r‡  )rM   rN   rO   r   rR   rš   Ústaticmethodr^   r'   r   rÏ  r>  rQ   rÐ   rÛ  rI   rÝ  r   r   rä  ræ  rÿ  r   r   r…   r  r}   rÎ   rÑ   rÒ   s   @r*   r<  r<    s‘  ø€ € € € € € ØÐÐÑð˜|ð ð ð ð ð ð ð$ ð¸cð ÐVYð Ð^cÔ^jð ð ð ñ „\ðð °3ð È3ð ÐSXÔS_ð ð ð ð ð, */ð	ð àÔ&ðð Ô&ðð #'ð	ð
 
Ô	ðð ð ð ðH 26Ø*.ð	1ð 1àÔ&ð1ð Ô'¨$Ñ.ð1ð ”L 4Ñ'ð	1ð
 
ˆuÔ Ô	!ð1ð 1ð 1ð 1ð0 */ð-4ð -4à”<ð-4ð Ô'ð-4ð œð	-4ð
 #'ð-4ð Ð+Ô,ð-4ð 
ˆuÔ Ô	!ð-4ð -4ð -4ð -4ðd */ð'.ð '.àÔ'ð'.ð #'ð'.ð Ð+Ô,ð	'.ð
 
ˆuÔ Ô	!ð'.ð '.ð '.ð '.ðZ */ð	*5ð *5à#Ô/ð*5ð !Ô,ð*5ð #'ð	*5ð
 
Ô	ð*5ð *5ð *5ð *5ðX Øð 8<Ø).ð	Q
ð Q
àÔ'ðQ
ð "Ô-°Ñ4ðQ
ð #'ð	Q
ð
 Ð+Ô,ðQ
ð 
0ðQ
ð Q
ð Q
ñ „^ñ ÔðQ
ðf Øð
 /3Ø).ðV
ð V
à”<ðV
ð Ô'ðV
ð œ tÑ+ð	V
ð
 #'ðV
ð Ð+Ô,ðV
ð 
%ðV
ð V
ð V
ñ „^ñ ÔðV
ð V
ð V
ð V
ð V
r,   r<  )r4  r$  rn  r�  r<  )Nrá   )LrP   Úcollections.abcr   Údataclassesr   Útypingr   r'   r   r   Ú r	   r/  Úactivationsr
   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_owlvitr   r   r   Útransformers.image_transformsr   Ú
get_loggerrM   Úloggerr+   r2   r4   r_   rc   rs   rz   r}   r…   rO  rŒ   rÔ   r[   ró   rõ   r  r  r$  rQ  r]  rn  rz  r�  r4  rŸ  r¬  r<  Ú__all__rS   r,   r*   ú<module>r     sä  ðð Ð à $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø /Ð /Ð /Ð /Ð /Ð /Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð JÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ Tð ÐÑÔð GØFÐFÐFÐFÐFÐFð 
ˆÔ	˜HÑ	%Ô	%€ð`˜Uœ\ð `¨e¬lð `ð `ð `ð `ð
-¨E¬Lð -¸U¼\ð -ð -ð -ð -ð Ø
ð!
ð !
ð !
ð !
ð !
�;ñ !
ô !
ñ „ñ „ð!
ðJGˆvð G˜&ð Gð Gð Gð GðE�Fð E˜vð Eð Eð Eð Eð"ð ð ð"'ð 'ð 'ð0 €ððñ ô ð
 ð+
ð +
ð +
ð +
ð +
 +ñ +
ô +
ñ „ñô ð+
ð\ €ððñ ô ð
 ð*
ð *
ð *
ð *
ð *
¨[ñ *
ô *
ñ „ñô ð*
ðZFð Fð Fð Fð F˜RœYñ Fô Fð FðRð ð ð ð ˜2œ9ñ ô ð ðL !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð86)ð 6)ð 6)ð 6)ð 6)�b”iñ 6)ô 6)ð 6)ðtð ð ð ð �”	ñ ô ð ð ð ð ð ð Ð3ñ ô ð ðB ð4vð 4vð 4vð 4vð 4v˜Oñ 4vô 4vñ „ð4vðp
ð 
ð 
ð 
ð 
�B”Iñ 
ô 
ð 
ðD<
ð <
ð <
ð <
ð <
Ð1ñ <
ô <
ð <
ð~/
ð /
ð /
ð /
ð /
Ð+ñ /
ô /
ð /
ðd(
ð (
ð (
ð (
ð (
Ð3ñ (
ô (
ð (
ðV.
ð .
ð .
ð .
ð .
Ð-ñ .
ô .
ð .
ðb ðk
ð k
ð k
ð k
ð k
Ð'ñ k
ô k
ñ „ðk
ð\ð ð ð ð ˜bœiñ ô ð ð&-1ð -1ð -1ð -1ð -1 ¤	ñ -1ô -1ð -1ð`]
ð ]
ð ]
ð ]
ð ]
Ð4ñ ]
ô ]
ð ]
ð@ wÐ
vÐ
v€€€r,   