§
    ù²Åjƒ  ã                   óÊ   — 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mZ e j        j        	 	 ddedededededefd„¦   «         Z G d„ dej        ¦  «        ZdS )é    N)ÚnnÚTensor)Ú_pair)Ú_assert_has_opsé   )Ú_log_api_usage_onceé   )Úcheck_roi_boxes_shapeÚconvert_boxes_to_roi_formatç      ð?éÿÿÿÿÚinputÚboxesÚoutput_sizeÚspatial_scaleÚsampling_ratioÚreturnc                 óÄ  — t           j                             ¦   «         s2t           j                             ¦   «         st	          t
          ¦  «         t          ¦   «          t          |¦  «         |}t          |¦  «        }t          |t           j
        ¦  «        st          |¦  «        }t           j        j                             | |||d         |d         |¦  «        \  }}|S )aT  
    Performs Position-Sensitive Region of Interest (RoI) Align operator
    mentioned in Light-Head 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 (in bins or pixels) after the pooling
            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
        sampling_ratio (int): number of sampling points in the interpolation grid
            used to compute the output value of each pooled output bin. If > 0,
            then exactly ``sampling_ratio x sampling_ratio`` sampling points per bin are used. If
            <= 0, then an adaptive number of grid points are used (computed as
            ``ceil(roi_width / output_width)``, and likewise for height). Default: -1

    Returns:
        Tensor[K, C / (output_size[0] * output_size[1]), output_size[0], output_size[1]]: The pooled RoIs
    r   r	   )ÚtorchÚjitÚis_scriptingÚ
is_tracingr   Úps_roi_alignr   r
   r   Ú
isinstancer   r   ÚopsÚtorchvision)r   r   r   r   r   ÚroisÚoutputÚ_s           úMC:\Projects\Historical\venv\Lib\site-packages\torchvision/ops/ps_roi_align.pyr   r      sÅ   € õJ Œ9×!Ò!Ñ#Ô#ð *­E¬I×,@Ò,@Ñ,BÔ,Bð *Ý�LÑ)Ô)Ð)ÝÑÔÐÝ˜%Ñ Ô Ð Ø€DÝ˜Ñ$Ô$€KÝ�d�EœLÑ)Ô)ð 1Ý*¨4Ñ0Ô0ˆÝ”	Ô%×2Ò2Øˆt�] K°¤N°KÀ´NÀNñô �I€FˆAð €Mó    c                   óP   ‡ — e Zd ZdZdededefˆ fd„Zdededefd	„Zde	fd
„Z
ˆ xZS )Ú
PSRoIAlignz#
    See :func:`ps_roi_align`.
    r   r   r   c                 ó�   •— t          ¦   «                              ¦   «          t          | ¦  «         || _        || _        || _        d S ©N)ÚsuperÚ__init__r   r   r   r   )Úselfr   r   r   Ú	__class__s       €r    r'   zPSRoIAlign.__init__C   sG   ø€ õ 	‰Œ×ÒÑÔÐÝ˜DÑ!Ô!Ð!Ø&ˆÔØ*ˆÔØ,ˆÔÐÐr!   r   r   r   c                 óF   — t          ||| j        | j        | j        ¦  «        S r%   )r   r   r   r   )r(   r   r   s      r    ÚforwardzPSRoIAlign.forwardO   s!   € Ý˜E 4¨Ô)9¸4Ô;MÈtÔObÑcÔcÐcr!   c                 óT   — | j         j        › d| j        › d| j        › d| j        › d�}|S )Nz(output_size=z, spatial_scale=z, sampling_ratio=ú))r)   Ú__name__r   r   r   )r(   Úss     r    Ú__repr__zPSRoIAlign.__repr__R   sW   € àŒ~Ô&ð ð ØÔ+ðð à#Ô1ðð ð !%Ô 3ðð ð ð 	
ð ˆr!   )r.   Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatr'   r   r+   Ústrr0   Ú__classcell__)r)   s   @r    r#   r#   >   s®   ø€ € € € € ðð ð
-àð
-ð ð
-ð ð	
-ð 
-ð 
-ð 
-ð 
-ð 
-ðd˜Vð d¨6ð d°fð dð dð dð dð˜#ð ð ð ð ð ð ð ð r!   r#   )r   r   )r   Útorch.fxr   r   Útorch.nn.modules.utilsr   Útorchvision.extensionr   Úutilsr   Ú_utilsr
   r   ÚfxÚwrapr4   r5   r   ÚModuler#   © r!   r    ú<module>rA      s  ðØ €€€Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fð „„ð
 Øð/ð /Øð/àð/ð ð/ð ð	/ð
 ð/ð ð/ð /ð /ñ „ð/ðdð ð ð ð �”ñ ô ð ð ð r!   