§
    ‚ŠtjÖ>  ã                   ót  — d dl Z d dlZd dlZd dlmc mc 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mZmZmZmZ ddlmZmZmZmZ ddlmZ d	d
lm Z  d	dl!m"Z"  e¦   «         rd dl#m$Z% d„ Z&d„ Z'd„ Z(e G d„ de ¦  «        ¦   «         Z)e ed¬¦  «         G d„ de"¦  «        ¦   «         ¦   «         Z*ddgZ+dS )é    Né   )ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚpadÚreorder_imagesÚto_channel_dimension_format)ÚOPENAI_CLIP_MEANÚOPENAI_CLIP_STDÚChannelDimensionÚPILImageResamplingÚSizeDict)Ú
TensorTypeÚauto_docstringÚis_scipy_availableÚrequires_backends)Úrequiresé   )ÚOwlViTImageProcessor)ÚOwlViTImageProcessorPil)Úndimagec                 ó*  — t          |¦  «        }t          |¦  «        }| j        }|| j        k    r&|d|| j        z
  z  z  }t	          j        | |¦  «        } n:|| j        dz
  k    r|| j        d         fz   }n|| j        k     rt          d¦  «        ‚| |fS )a%  Validate resize output shape according to input image.

    Args:
        image (`np.ndarray`):
         Image to be resized.
        output_shape (`iterable`):
            Size of the generated output image `(rows, cols[, ...][, dim])`. If `dim` is not provided, the number of
            channels is preserved.

    Returns
        image (`np.ndarray`):
            The input image, but with additional singleton dimensions appended in the case where `len(output_shape) >
            input.ndim`.
        output_shape (`Tuple`):
            The output shape converted to tuple.

    Raises ------ ValueError:
        If output_shape length is smaller than the image number of dimensions.

    Notes ----- The input image is reshaped if its number of dimensions is not equal to output_shape_length.

    ©é   r   éÿÿÿÿzIoutput_shape length cannot be smaller than the image number of dimensions)ÚtupleÚlenÚshapeÚndimÚnpÚreshapeÚ
ValueError)ÚimageÚoutput_shapeÚoutput_ndimÚinput_shapes       úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/owlv2/modular_owlv2.pyÚ_preprocess_resize_output_shaper(   3   s¨   € õ. ˜Ñ&Ô&€LÝ�lÑ#Ô#€KØ”+€KØ�U”ZÒÐà�t˜{¨U¬ZÑ7Ñ8Ñ8ˆÝ”
˜5 +Ñ.Ô.ˆˆØ	˜œ
 Q™Ò	&Ð	&à# u¤{°2¤Ð&8Ñ8ˆˆØ	�u”zÒ	!Ð	!ÝÐdÑeÔeÐeà�,ÐÐó    c                 ó  — t          j        | ¦  «        }t          j        |¦  «        r$t           j        }t           j        } || ¦  «        }nt           j        }t           j        } || ¦  «        }t          j        |||¦  «        }|S )a¯  Clip output image to range of values of input image.

    Note that this function modifies the values of *output_image* in-place.

    Taken from:
    https://github.com/scikit-image/scikit-image/blob/b4b521d6f0a105aabeaa31699949f78453ca3511/skimage/transform/_warps.py#L640.

    Args:
        input_image : ndarray
            Input image.
        output_image : ndarray
            Output image, which is modified in-place.
    )r    ÚminÚisnanÚnanminÚnanmaxÚmaxÚclip)Úinput_imageÚoutput_imageÚmin_valÚmin_funcÚmax_funcÚmax_vals         r'   Ú_clip_warp_outputr7   Z   sz   € õ Œf�[Ñ!Ô!€GÝ	„x�ÑÔð å”9ˆÝ”9ˆØ�(˜;Ñ'Ô'ˆˆå”6ˆÝ”6ˆØˆh�{Ñ#Ô#€Gå”7˜<¨°'Ñ:Ô:€LàÐr)   c                 óþ  — t          |t          t          f¦  «        r=t          j        d„ |D ¦   «         ¦  «        }t          j        d„ |D ¦   «         ¦  «        }nBt          |t          j        ¦  «        r|                     d¦  «        \  }}nt          d¦  «        ‚t          j        ||¦  «        }t          j	        ||||gd¬¦  «        }| 
                    d¦  «                             | j        ¦  «        }| |z  } | S )a  
    Scale batch of bounding boxes to the target sizes.

    Args:
        boxes (`torch.Tensor` of shape `(batch_size, num_boxes, 4)`):
            Bounding boxes to scale. Each box is expected to be in (x1, y1, x2, y2) format.
        target_sizes (`list[tuple[int, int]]` or `torch.Tensor` of shape `(batch_size, 2)`):
            Target sizes to scale the boxes to. Each target size is expected to be in (height, width) format.

    Returns:
        `torch.Tensor` of shape `(batch_size, num_boxes, 4)`: Scaled bounding boxes.
    c                 ó   — g | ]
}|d          ‘ŒS )r   © ©Ú.0Úis     r'   ú
<listcomp>z _scale_boxes.<locals>.<listcomp>‡   s   € Ð$@Ð$@Ð$@¨a Q q¤TÐ$@Ð$@Ð$@r)   c                 ó   — g | ]
}|d          ‘ŒS r   r:   r;   s     r'   r>   z _scale_boxes.<locals>.<listcomp>ˆ   s   € Ð#?Ð#?Ð#?¨Q A a¤DÐ#?Ð#?Ð#?r)   r   z4`target_sizes` must be a list, tuple or torch.Tensor)Údim)Ú
isinstanceÚlistr   ÚtorchÚtensorÚTensorÚunbindÚ	TypeErrorr/   ÚstackÚ	unsqueezeÚtoÚdevice)ÚboxesÚtarget_sizesÚimage_heightÚimage_widthÚmax_sizeÚscale_factors         r'   Ú_scale_boxesrR   x   sù   € õ �,¥¥u Ñ.Ô.ð PÝ”|Ð$@Ð$@°<Ð$@Ñ$@Ô$@ÑAÔAˆÝ”lÐ#?Ð#?°,Ð#?Ñ#?Ô#?Ñ@Ô@ˆˆÝ	�L¥%¤,Ñ	/Ô	/ð PØ$0×$7Ò$7¸Ñ$:Ô$:Ñ!ˆ�k�kåÐNÑOÔOÐOõ Œy˜ {Ñ3Ô3€Hå”; ¨(°H¸hÐGÈQÐOÑOÔO€LØ×)Ò)¨!Ñ,Ô,×/Ò/°´Ñ=Ô=€LØ�LÑ €EØ€Lr)   c                   óB  — e Zd Zej        ZeZeZ	dddœZ
dZdZdZdZdZdZdZdddd	ed
dfd„Z	 dded         dedz  d	ed
ed         fd„Z	 	 ddddeded
dfd„Zded         dededddededededeee         z  dz  deee         z  dz  dedz  deez  dz  d
efd„ZdS )ÚOwlv2ImageProcessoréÀ  ©ÚheightÚwidthçp?TNç        Úimagesztorch.TensorÚconstant_valueÚreturnc                 ó˜   — |j         dd…         \  }}t          ||¦  «        }||z
  }||z
  }dd||f}t          j        |||¬¦  «        }	|	S )ú<
        Pad an image with zeros to the given size.
        éþÿÿÿNr   )Úfill)r   r/   ÚtvFr   )
Úselfr[   r\   rW   rX   ÚsizeÚ
pad_bottomÚ	pad_rightÚpaddingÚpadded_images
             r'   Ú_pad_imageszOwlv2ImageProcessor._pad_images¥   sc   € ð œ R S SÔ)‰ˆ�Ý�6˜5Ñ!Ô!ˆØ˜F‘]ˆ
Ø˜5‘Lˆ	à�a˜ JÐ/ˆÝ”w˜v w°^ÐDÑDÔDˆØÐr)   Údisable_groupingc                 ó¾   — t          ||¬¦  «        \  }}i }|                     ¦   «         D ]!\  }}	|                      |	|¬¦  «        }	|	||<   Œ"t          ||¦  «        }
|
S )z�
        Unlike the Base class `self.pad` where all images are padded to the maximum image size,
        Owlv2 pads an image to square.
        ©rj   )r\   )r   Úitemsri   r   )rc   r[   rj   r\   ÚkwargsÚgrouped_imagesÚgrouped_images_indexÚprocessed_images_groupedr   Ústacked_imagesÚprocessed_imagess              r'   r   zOwlv2ImageProcessor.pad²   sŒ   € õ 0EÀVÐ^nÐ/oÑ/oÔ/oÑ,ˆÐ,Ø#%Ð Ø%3×%9Ò%9Ñ%;Ô%;ð 	=ð 	=Ñ!ˆE�>Ø!×-Ò-ØØ-ð .ñ ô ˆNð /=Ð$ UÑ+Ð+å)Ð*BÐDXÑYÔYÐàÐr)   r#   rd   Úanti_aliasingc                 ón  — |j         |j        f}|j        }t          j        |dd…         ¦  «                             |j        ¦  «        t          j        |¦  «                             |j        ¦  «        z  }|�r$|€|dz
  dz                       d¬¦  «        }nƒt          j        |¦  «        t          j	        |¦  «        z  }t          j
        |dk     ¦  «        rt          d¦  «        ‚t          j
        |dk    |dk    z  ¦  «        rt          j        d¦  «         t          j
        |dk    ¦  «        r|}	nidt          j        d|z  ¦  «                             ¦   «         z  dz   }
t!          j        ||
d         |
d         f|                     ¦   «         ¬	¦  «        }	n|}	t'          j        |	|d
¬¦  «        S )az  
        Resize an image as per the original implementation.

        Args:
            image (`Tensor`):
                Image to resize.
            size (`dict[str, int]`):
                Dictionary containing the height and width to resize the image to.
            anti_aliasing (`bool`, *optional*, defaults to `True`):
                Whether to apply anti-aliasing when downsampling the image.
            anti_aliasing_sigma (`float`, *optional*, defaults to `None`):
                Standard deviation for Gaussian kernel when downsampling the image. If `None`, it will be calculated
                automatically.
        r   Nr   r   )r+   úFAnti-aliasing standard deviation must be greater than or equal to zeroúWAnti-aliasing standard deviation greater than zero but not down-sampling along all axesr   )ÚsigmaF)rd   Ú	antialias)rW   rX   r   rC   rD   rJ   rK   ÚclampÚ
atleast_1dÚ	ones_likeÚanyr"   ÚwarningsÚwarnÚceilÚintrb   Úgaussian_blurÚtolistr   Úresize)rc   r#   rd   rt   Úanti_aliasing_sigmarn   r$   r&   ÚfactorsÚfilteredÚkernel_sizess              r'   r„   zOwlv2ImageProcessor.resizeÊ   s»  € ð, œ T¤ZÐ0ˆà”kˆõ ”,˜{¨1¨2¨2œÑ/Ô/×2Ò2°5´<Ñ@Ô@Å5Ä<ÐP\ÑC]ÔC]×C`ÒC`ÐafÔamÑCnÔCnÑnˆàñ 	Ø"Ð*Ø(/°!©°qÑ'8×&?Ò&?ÀAÐ&?Ñ&FÔ&FÐ#Ð#å&+Ô&6Ð7JÑ&KÔ&KÍeÌoÐ^eÑNfÔNfÑ&fÐ#Ý”9Ð0°1Ò4Ñ5Ô5ð Ý$Ð%mÑnÔnÐnÝ”YÐ 3°aÒ 7¸GÀqºLÑIÑJÔJð Ý”MØqñô ð õ ŒyÐ,°Ò1Ñ2Ô2ð Ø ��à ¥5¤:¨aÐ2EÑ.EÑ#FÔ#F×#JÒ#JÑ#LÔ#LÑLÈqÑP�åÔ,Ø˜L¨œO¨\¸!¬_Ð=ÐEX×E_ÒE_ÑEaÔEaðñ ô ��ð
 ˆHå!Ô(¨¸ÈÐNÑNÔNÐNr)   Ú	do_resizeÚresampleúPILImageResampling | NoneÚdo_padÚ
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚreturn_tensorsc           	      ó–  — t          ||¬¦  «        \  }}i }|                     ¦   «         D ]$\  }}|                      |||d|	|
¦  «        }|||<   Œ%t          ||¦  «        }|r|                      |d|¬¦  «        }t          ||¬¦  «        \  }}i }|                     ¦   «         D ]$\  }}|r|                      |||¬¦  «        }|||<   Œ%t          ||¦  «        }t          ||¬¦  «        \  }}i }|                     ¦   «         D ]$\  }}|                      |d|||	|
¦  «        }|||<   Œ%t          ||¦  «        }t          d|i|¬¦  «        S )Nrl   FrZ   )r\   rj   )r#   rd   rŠ   Úpixel_values©ÚdataÚtensor_type)r   rm   Úrescale_and_normalizer   r   r„   r   )rc   r[   r‰   rd   rŠ   rŒ   r�   rŽ   r�   r�   r‘   rj   r’   rn   ro   rp   rq   r   rr   rs   Úresized_images_groupedÚresized_stackÚresized_imagess                          r'   Ú_preprocesszOwlv2ImageProcessor._preprocess   sÑ  € õ" 0EÀVÐ^nÐ/oÑ/oÔ/oÑ,ˆÐ,Ø#%Ð à%3×%9Ò%9Ñ%;Ô%;ð 	=ð 	=Ñ!ˆE�>à!×7Ò7Ø 
¨N¸EÀ:Èyñô ˆNð /=Ð$ UÑ+Ð+å)Ð*BÐDXÑYÔYÐàð 	qØ#ŸxšxÐ(8ÈÐ_o˜xÑpÔpÐå/DØÐ/?ð0
ñ 0
ô 0
Ñ,ˆÐ,ð "$ÐØ%3×%9Ò%9Ñ%;Ô%;ð 	>ð 	>Ñ!ˆE�>Øð >Ø $§¢°.ÀtÐV^ Ñ _Ô _�Ø0=Ð& uÑ-øÝ'Ð(>Ð@TÑUÔUˆõ 0EÀ^ÐfvÐ/wÑ/wÔ/wÑ,ˆÐ,Ø#%Ð Ø%3×%9Ò%9Ñ%;Ô%;ð 	=ð 	=Ñ!ˆE�>à!×7Ò7Ø  ~°|ÀZÐQZñô ˆNð /=Ð$ UÑ+Ð+å)Ð*BÐDXÑYÔYÐå .Ð2BÐ!CÐQ_Ð`Ñ`Ô`Ð`r)   ©rZ   ©TN)Ú__name__Ú
__module__Ú__qualname__r   ÚBILINEARrŠ   r
   r�   r   r‘   rd   rŽ   r‰   r�   r�   rŒ   Ú	crop_sizeÚdo_center_cropÚfloatri   rB   Úboolr   r   r„   Ústrr   r   rœ   r:   r)   r'   rT   rT   —   sþ  € € € € € à!Ô*€HØ!€JØ€IØ CÐ(Ð(€DØ€NØ€IØ€JØ€LØ€FØ€IØ€Nðð  .ð À%ð ÐR`ð ð ð ð ð" !$ð	 ð  à�^Ô$ð ð  ™+ð ð ð	 ð 
ˆnÔ	ð ð  ð  ð  ð8 #Ø ð4Oð 4Oàð4Oð ð4Oð ð	4Oð 
ð4Oð 4Oð 4Oð 4Oðl7aà�^Ô$ð7að ð7að ð	7að
 .ð7að ð7að ð7að ð7að ð7að ˜D œKÑ'¨$Ñ.ð7að ˜4 œ;Ñ&¨Ñ-ð7að  ™+ð7að ˜jÑ(¨4Ñ/ð7að 
ð7að 7að 7að 7að 7að 7ar)   rT   )rC   )Úbackendsc                   ó@  — e Zd Zej        ZeZeZ	dddœZ
dZdZdZdZdZdZdZddej        ded	ej        fd
„Z	 	 ddej        deeef         ded	ej        fd„Zdeej                 dededddededededeee         z  dz  deee         z  dz  deez  dz  d	efd„ZdS )ÚOwlv2ImageProcessorPilrU   rV   rY   TNrZ   r#   r\   r]   c                 óŽ   — |j         dd…         \  }}t          ||¦  «        }||z
  }||z
  }t          |d|fd|ff|¬¦  «        }|S )r_   r`   Nr   )r#   rg   Úconstant_values)r   r/   r   )rc   r#   r\   rW   rX   rd   re   rf   s           r'   r   zOwlv2ImageProcessorPil.padI  sj   € ð œ B C CÔ(‰ˆ�Ý�6˜5Ñ!Ô!ˆØ˜F‘]ˆ
Ø˜5‘Lˆ	ÝØØ˜�_ q¨) nÐ5Ø*ð
ñ 
ô 
ˆð
 ˆr)   rd   rt   c                 ó   — t          | d¦  «         |d         |d         f}t          |t          j        ¦  «        }t	          ||¦  «        \  }}|j        }t          j        ||¦  «        }d}	d}
d}|rº|€t          j        d|dz
  dz  ¦  «        }nƒt          j	        |¦  «        t          j
        |¦  «        z  }t          j        |dk     ¦  «        rt          d	¦  «        ‚t          j        |dk    |dk    z  ¦  «        rt          j        d
¦  «         t          j        |||
|	¬¦  «        }n|}d„ |D ¦   «         }t          j        ||||	|
d¬¦  «        }t%          ||¦  «        }t          |t          j        ¦  «        }|S )a~  
        Resize an image as per the original implementation.

        Args:
            image (`np.ndarray`):
                Image to resize.
            size (`dict[str, int]`):
                Dictionary containing the height and width to resize the image to.
            anti_aliasing (`bool`, *optional*, defaults to `True`):
                Whether to apply anti-aliasing when downsampling the image.
            anti_aliasing_sigma (`float`, *optional*, defaults to `None`):
                Standard deviation for Gaussian kernel when downsampling the image. If `None`, it will be calculated
                automatically.
        ÚscipyrW   rX   Úmirrorr   r   Nr   rv   rw   )ÚcvalÚmodec                 ó   — g | ]}d |z  ‘ŒS r   r:   )r<   Úfs     r'   r>   z1Owlv2ImageProcessorPil.resize.<locals>.<listcomp>‰  s   € Ð/Ð/Ð/ !˜˜A™Ð/Ð/Ð/r)   T)Úorderr±   r°   Ú	grid_mode)r   r	   r   ÚLASTr(   r   r    ÚdivideÚmaximumr{   r|   r}   r"   r~   r   ÚndiÚgaussian_filterÚzoomr7   ÚFIRST)rc   r#   rd   rt   r…   rn   r$   r&   r†   Úndi_moder°   r´   r‡   Úzoom_factorsÚouts                  r'   r„   zOwlv2ImageProcessorPil.resizeX  sž  € õ, 	˜$ Ñ(Ô(Ð(à˜Xœ¨¨W¬Ð6ˆÝ+¨EÕ3CÔ3HÑIÔIˆÝ=¸eÀ\ÑRÔRÑˆˆ|Ø”kˆÝ”)˜K¨Ñ6Ô6ˆð ˆØˆØˆØð 	Ø"Ð*Ý&(¤j°°W¸q±[ÀAÑ4EÑ&FÔ&FÐ#Ð#å&(¤mÐ4GÑ&HÔ&HÍ2Ì<ÐX_ÑK`ÔK`Ñ&`Ð#Ý”6Ð-°Ò1Ñ2Ô2ð Ý$Ð%mÑnÔnÐnÝ”VÐ0°1Ò4¸ÀAºÑFÑGÔGð Ý”MØqñô ð õ Ô*¨5Ð2EÈDÐW_Ð`Ñ`Ô`ˆHˆHàˆHà/Ð/ wÐ/Ñ/Ô/ˆÝŒh�x °UÀÐPTÐ`dÐeÑeÔeˆå! %¨Ñ-Ô-ˆå+¨EÕ3CÔ3IÑJÔJˆØˆr)   r[   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   c                 ó"  — g }|D ]x}|r|                       ||¦  «        }|r|                      |¦  «        }|r|                      |||¦  «        }|r|                      ||	|
¦  «        }|                     |¦  «         Œyt          d|i|¬¦  «        S )Nr”   r•   )Úrescaler   r„   Ú	normalizeÚappendr   )rc   r[   r‰   rd   rŠ   rŒ   r�   rŽ   r�   r�   r‘   r’   rn   rs   r#   s                  r'   rœ   z"Owlv2ImageProcessorPil._preprocess‘  s·   € ð ÐØð 		+ð 		+ˆEØð <ØŸš U¨NÑ;Ô;�Øð (ØŸš ™œ�Øð ;ØŸš E¨4°Ñ:Ô:�Øð EØŸš u¨j¸)ÑDÔD�Ø×#Ò# EÑ*Ô*Ð*Ð*Ý .Ð2BÐ!CÐQ_Ð`Ñ`Ô`Ð`r)   r�   rž   ) rŸ   r    r¡   r   r¢   rŠ   r
   r�   r   r‘   rd   rŽ   r‰   r�   r�   rŒ   r£   r¤   r    Úndarrayr¥   r   Údictr§   r�   r¦   r„   rB   r   r   r   rœ   r:   r)   r'   rª   rª   :  s§  € € € € € ð "Ô*€HØ!€JØ€IØ CÐ(Ð(€DØ€NØ€IØ€JØ€LØ€FØ€IØ€Nðð ˜œð °Uð ÀRÄZð ð ð ð ð& #Ø ð7ð 7àŒzð7ð �3˜�8Œnð7ð ð	7ð 
Œð7ð 7ð 7ð 7ðraà�R”ZÔ ðað ðað ð	að
 .ðað ðað ðað ðað ðað ˜D œKÑ'¨$Ñ.ðað ˜4 œ;Ñ&¨Ñ-ðað ˜jÑ(¨4Ñ/ðað 
ðað að að að að ar)   rª   ),r~   Únumpyr    rC   Ú$torchvision.transforms.v2.functionalÚ
transformsÚv2Ú
functionalrb   Úimage_processing_backendsr   Úimage_processing_utilsr   Úimage_transformsr   r   r   r	   Úimage_utilsr
   r   r   r   r   Úutilsr   r   r   r   Úutils.import_utilsr   Úowlvit.image_processing_owlvitr   Ú"owlvit.image_processing_pil_owlvitr   r®   r   r¹   r(   r7   rR   rT   rª   Ú__all__r:   r)   r'   ú<module>rÔ      so  ðð €€€à Ð Ð Ð Ø €€€Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *Ø AÐ AÐ AÐ AÐ AÐ AØ HÐ HÐ HÐ HÐ HÐ Hð ÐÑÔð %Ø$Ð$Ð$Ð$Ð$Ð$ð$ð $ð $ðNð ð ð<ð ð ð> ð_að _að _að _að _aÐ.ñ _aô _añ „ð_aðD Ø	€�:ÐÑÔðoað oað oað oað oaÐ4ñ oaô oañ Ôñ „ðoaðd !Ð":Ð
;€€€r)   