
    ڧg                        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          T/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchvision/ops/roi_pool.pyr   r      s    < 9!!## &EI,@,@,B,B &H%%%%   D$$KdEL)) 1*400	%..udM;WX>[fgh[ijjIFA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    tT%5t7I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lT5EllW[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         +$5c$: +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    bi     r"   