U
    <þjg  ã                   @   s¶   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eeeee f ee eedœdd„ƒZG d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                 C   sp   t j ¡ st j ¡ sttƒ tƒ  t|ƒ |}t|ƒ}t	|t j
ƒsJt|ƒ}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   )ÚtorchZjitZis_scriptingÚ
is_tracingr
   Úroi_poolr   r   r   Ú
isinstancer   r   ÚopsZtorchvision)r   r   r   r   ÚroisÚoutputÚ_© r   ú</tmp/pip-unpacked-wheel-xh8d94dr/torchvision/ops/roi_pool.pyr      s    "r   c                       sX   e Zd ZdZee edœ‡ fdd„Zee	ee
e f edœdd„Zedœd	d
„Z‡  ZS )ÚRoIPoolz
    See :func:`roi_pool`.
    )r   r   c                    s"   t ƒ  ¡  t| ƒ || _|| _d S ©N)ÚsuperÚ__init__r
   r   r   )Úselfr   r   ©Ú	__class__r   r   r!   =   s    
zRoIPool.__init__)r   r   r   c                 C   s   t ||| j| jƒS r   )r   r   r   )r"   r   r   r   r   r   ÚforwardC   s    zRoIPool.forward)r   c                 C   s"   | j j› d| j› d| j› d}|S )Nz(output_size=z, spatial_scale=ú))r$   Ú__name__r   r   )r"   Úsr   r   r   Ú__repr__F   s    zRoIPool.__repr__)r'   Ú
__module__Ú__qualname__Ú__doc__r   ÚintÚfloatr!   r   r   r   r%   Ústrr)   Ú__classcell__r   r   r#   r   r   8   s   r   )r   )Útypingr   r   r   Ztorch.fxr   r   Ztorch.jit.annotationsr   Ztorch.nn.modules.utilsr   Ztorchvision.extensionr   Úutilsr
   Ú_utilsr   r   ZfxÚwrapr-   r.   r   ÚModuler   r   r   r   r   Ú<module>   s$    üû)