§
    ù²ÅjÇ  ã                   ó  — d dl mZmZ d dl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 ej        j        	 ddedeeee         f         dee         dedef
d„¦   «         Z G d„ dej        ¦  «        ZdS )é    )ÚListÚUnionN)ÚnnÚTensor)ÚBroadcastingList2)Ú_pair)Ú_assert_has_opsé   )Ú_log_api_usage_onceé   )Úcheck_roi_boxes_shapeÚconvert_boxes_to_roi_formatç      ð?ÚinputÚboxesÚoutput_sizeÚspatial_scaleÚreturnc                 óÂ  — t           j                             ¦   «         s2t           j                             ¦   «         st	          t
          ¦  «         t          ¦   «          t          |¦  «         |}t          |¦  «        }t          |t           j
        ¦  «        st          |¦  «        }t           j        j                             | |||d         |d         ¦  «        \  }}|S )aU  
    Performs Region of Interest (RoI) Pool operator described in Fast R-CNN

    Args:
        input (Tensor[N, C, H, W]): The input tensor, i.e. a batch with ``N`` elements. Each element
            contains ``C`` feature maps of dimensions ``H x W``.
        boxes (Tensor[K, 5] or List[Tensor[L, 4]]): the box coordinates in (x1, y1, x2, y2)
            format where the regions will be taken from.
            The coordinate must satisfy ``0 <= x1 < x2`` and ``0 <= y1 < y2``.
            If a single Tensor is passed, then the first column should
            contain the index of the corresponding element in the batch, i.e. a number in ``[0, N - 1]``.
            If a list of Tensors is passed, then each Tensor will correspond to the boxes for an element i
            in the batch.
        output_size (int or Tuple[int, int]): the size of the output after the cropping
            is performed, as (height, width)
        spatial_scale (float): a scaling factor that maps the box coordinates to
            the input coordinates. For example, if your boxes are defined on the scale
            of a 224x224 image and your input is a 112x112 feature map (resulting from a 0.5x scaling of
            the original image), you'll want to set this to 0.5. Default: 1.0

    Returns:
        Tensor[K, C, output_size[0], output_size[1]]: The pooled RoIs.
    r   r   )ÚtorchÚjitÚis_scriptingÚ
is_tracingr   Úroi_poolr	   r   r   Ú
isinstancer   r   ÚopsÚtorchvision)r   r   r   r   ÚroisÚoutputÚ_s          úIC:\Projects\Historical\venv\Lib\site-packages\torchvision/ops/roi_pool.pyr   r      s¿   € õ< Œ9×!Ò!Ñ#Ô#ð &­E¬I×,@Ò,@Ñ,BÔ,Bð &Ý�HÑ%Ô%Ð%ÝÑÔÐÝ˜%Ñ Ô Ð Ø€DÝ˜Ñ$Ô$€KÝ�d�EœLÑ)Ô)ð 1Ý*¨4Ñ0Ô0ˆÝ”	Ô%×.Ò.¨u°d¸MÈ;ÐWXÌ>Ð[fÐghÔ[iÑjÔj�I€FˆAØ€Mó    c                   ót   ‡ — e Zd ZdZdee         defˆ fd„Zdede	ee
e         f         defd„Zdefd	„Zˆ xZS )
ÚRoIPoolz
    See :func:`roi_pool`.
    r   r   c                 ó‚   •— t          ¦   «                              ¦   «          t          | ¦  «         || _        || _        d S ©N)ÚsuperÚ__init__r   r   r   )Úselfr   r   Ú	__class__s      €r!   r(   zRoIPool.__init__=   s=   ø€ Ý‰Œ×ÒÑÔÐÝ˜DÑ!Ô!Ð!Ø&ˆÔØ*ˆÔÐÐr"   r   r   r   c                 ó:   — t          ||| j        | j        ¦  «        S r&   )r   r   r   )r)   r   r   s      r!   ÚforwardzRoIPool.forwardC   s   € Ý˜˜t TÔ%5°tÔ7IÑJÔJÐJr"   c                 óD   — | j         j        › d| j        › d| j        › d�}|S )Nz(output_size=z, spatial_scale=ú))r*   Ú__name__r   r   )r)   Úss     r!   Ú__repr__zRoIPool.__repr__F   s1   € ØŒ~Ô&ÐlÐl°TÔ5EÐlÐlÐW[ÔWiÐlÐlÐlˆØˆr"   )r/   Ú
__module__Ú__qualname__Ú__doc__r   ÚintÚfloatr(   r   r   r   r,   Ústrr1   Ú__classcell__)r*   s   @r!   r$   r$   8   s´   ø€ € € € € ðð ð+Ð$5°cÔ$:ð +È5ð +ð +ð +ð +ð +ð +ðK˜Vð K¨5°¸¸f¼Ð1EÔ+Fð KÈ6ð Kð Kð Kð Kð˜#ð ð ð ð ð ð ð ð r"   r$   )r   )Útypingr   r   r   Útorch.fxr   r   Útorch.jit.annotationsr   Útorch.nn.modules.utilsr   Útorchvision.extensionr	   Úutilsr   Ú_utilsr   r   ÚfxÚwrapr5   r6   r   ÚModuler$   © r"   r!   ú<module>rD      sM  ðØ Ð Ð Ð Ð Ð Ð Ð à €€€Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø (Ð (Ð (Ð (Ð (Ð (Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fð „„ð
 ð	&ð &Øð&à�˜˜fœÐ%Ô&ð&ð # 3Ô'ð&ð ð	&ð
 ð&ð &ð &ñ „ð&ðRð ð ð ð ˆbŒiñ ô ð ð ð r"   