
    khU              	           d dl Z d dlZd dlZd dlmZ d dlmZ dZdZ	eZ
 eddd      d        Zd	 Zd
 ZdefdZ eddddddd      d        Z eddddddd      d        Z eddddd      d        Zd Zy)    N)symbolic_opset11)
parse_args      vfc                 >   t        j                  | |d      }t        j                  | t        j                  | |d      d      }| j                  dt        j                  t
        j                  gt        j                              }| j                  dt        j                  |gt        j                              }| j                  d| j                  d|t        j                  j                  j                        | j                  d|t        j                  j                  j                        ||      }t        j                  | t        j                  | |d| j                  dt        j                  d	gt        j                                    d      S )
Nr   Constantdtypevalue_tNonMaxSuppressionCastto_i      )opset11	unsqueezeoptorchtensorsysmaxsizelongfloatonnxTensorProtoDataTypeFLOATsqueezeselect)gboxesscoresiou_thresholdmax_output_per_classnms_outs         ^/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/ops/_register_onnx_ops.pysymbolic_multi_label_nmsr*      s3   a*Eq'"3"3Avq"A1EF44
ELL#++V[V`V`4a4bDDU\\=/QVQ\Q\-]D^M dd	VU!?!?!E!EF	VV%**"@"@"F"FGG ??	7>>!Waj%,,PQsZ_ZdZdBe)fgij     c                 2   t        j                  | t        j                  | |d| j                  dt	        j
                  dgt        j                                    d      }| j                  d|t        j                  j                  j                        S )Nr   r
   r   r   r   r   r   )
r   r!   r"   r   r   r   r   r   r   INT64)r#   roisindicess      r)   $_process_batch_indices_for_roi_alignr0   !   so    oo	7>>!T1add:u||QCW\WaWa?bd&cdfgG 44ejj&D&D&J&J4KKr+   c                     t        j                  | |d| j                  dt        j                  g dt        j
                                    S )Nr   r
   )r   r         r   r   )r   r"   r   r   r   r   )r#   r.   s     r)   _process_rois_for_roi_alignr4   (   s6    >>!T1add:u||L`e`j`j?kd&lmmr+   sampling_ratioc                 >    |dk  rt        j                  d       d}|S )Nr   zONNX export for RoIAlign with a non-zero sampling_ratio is not supported. The model will be exported with a sampling_ratio of 0.)warningswarn)r#   r5   s     r)   %_process_sampling_ratio_for_roi_alignr9   ,   s)    E	
 r+   ic           
          t        | |      }t        | |      }|rt        j                  d       t	        | |      }| j                  d|||||||      S )NzyROIAlign with aligned=True is only supported in opset >= 16. Please export with opset 16 or higher, or use aligned=False.RoiAlign)spatial_scale_foutput_height_ioutput_width_isampling_ratio_i)r0   r4   r7   r8   r9   r   )	r#   inputr.   spatial_scalepooled_heightpooled_widthr5   alignedbatch_indicess	            r)   roi_align_opset11rG   6   sk    8DAM&q$/DK	
 ;1nMN44%%#'  	 	r+   c                     t        | |      }t        | |      }|rdnd}	t        | |      }| j                  d||||	||||	      S )N
half_pixeloutput_half_pixelr<   ) coordinate_transformation_mode_sr=   r>   r?   r@   )r0   r4   r9   r   )
r#   rA   r.   rB   rC   rD   r5   rE   rF   coordinate_transformation_modes
             r)   roi_align_opset16rM   L   sb    8DAM&q$/D5<\BU":1nMN44)G%%#'  
 
r+   c                 :    | j                  d||||f|      }|d fS )N
MaxRoiPool)pooled_shape_ir=   )r   )r#   rA   r.   rB   rC   rD   roi_pools          r)   rQ   rQ   _   s2    tteT=,2Oan  H T>r+   c                  L   t         j                  j                  dt        t               t         j                  j                  dt
        t               t         j                  j                  dt        t               t         j                  j                  dt        t               y )Nztorchvision::nmsztorchvision::roi_alignztorchvision::roi_pool)	r   r   register_custom_op_symbolicr*   _ONNX_OPSET_VERSION_11rG   rM   _ONNX_OPSET_VERSION_16rQ    r+   r)   _register_custom_oprW   g   se    	JJ**+=?WYop	JJ**+CEVXno	JJ**+CEVXno	JJ**+BHNder+   )r   r7   r   
torch.onnxr   r   torch.onnx.symbolic_helperr   rT   rU   BASE_ONNX_OPSET_VERSIONr*   r0   r4   intr9   rG   rM   rQ   rW   rV   r+   r)   <module>r\      s    
   2 1  0  Cc &LnS  Cc3S#. /* Cc3S#. /$ Cc3$ %fr+   