
    ڧg)                         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           X/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchvision/ops/ps_roi_align.pyr   r      s    J 9!!## *EI,@,@,B,B *L)))%   D$$KdEL)) 1*400	%22t]KNKNN IFA 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!    E4)94;MtOb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!   