
    kh6                         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f
d       Z G d dej$                        Zy)    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returnc                    t         j                  j                         s-t         j                  j                         st	        t
               t                t        |       |}t        |      }t        |t         j                        st        |      }t         j                  j                  j                  | |||d   |d         \  }}|S )a  
    Performs Position-Sensitive Region of Interest (RoI) Pool operator
    described in R-FCN

    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

    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_poolr   r
   r   
isinstancer   r   opstorchvision)r   r   r   r   roisoutput_s          W/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/ops/ps_roi_pool.pyr   r      s    > 99!!#EII,@,@,BK(% D$KdELL)*40		%%11%}kZ[n^ijk^lmIFAM    c                   L     e Zd ZdZ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 )
	PSRoIPoolz"
    See :func:`ps_roi_pool`.
    r   r   c                 T    t         |           t        |        || _        || _        y N)super__init__r   r   r   )selfr   r   	__class__s      r   r$   zPSRoIPool.__init__;   s&    D!&*r   r   r   r   c                 F    t        ||| j                  | j                        S r"   )r   r   r   )r%   r   r   s      r   forwardzPSRoIPool.forwardA   s    5$(8(8$:L:LMMr   c                 l    | j                   j                   d| j                   d| j                   d}|S )Nz(output_size=z, spatial_scale=))r&   __name__r   r   )r%   ss     r   __repr__zPSRoIPool.__repr__D   s;    ~~&&'}T5E5E4FFVW[WiWiVjjklr   )r+   
__module____qualname____doc__intfloatr$   r   r(   strr-   __classcell__)r&   s   @r   r    r    6   sE    +C + +NV N6 Nf N# r   r    )g      ?)r   torch.fxr   r   torch.nn.modules.utilsr   torchvision.extensionr   utilsr   _utilsr
   r   fxwrapr1   r2   r   Moduler     r   r   <module>r>      sz       ( 1 ' F 
 	''' ' 	'
 ' 'T		 r   