
    \hU              	           S SK r S SKrS SKrS SKJr  S SKJr  SrSr	\r
\" SSS5      S 5       rS	 rS
 rS\4S jr\" SSSSSSS5      S 5       r\" SSSSSSS5      S 5       r\" SSSSS5      S 5       rS rg)    N)symbolic_opset11)
parse_args      vfc                    [         R                  " XS5      n[         R                  " U [         R                  " XS5      S5      nU R                  S[        R                  " [
        R                  /[        R                  S9S9nU R                  S[        R                  " U/[        R                  S9S9nU R                  SU R                  SU[        R                  R                  R                  S9U R                  SU[        R                  R                  R                  S9UU5      n[         R                  " U [         R                  " XSU R                  S[        R                  " S	/[        R                  S9S95      S5      $ )
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/fran/franai/venv/lib/python3.13/site-packages/torchvision/ops/_register_onnx_ops.pysymbolic_multi_label_nmsr*      s-   a*Eq'"3"3Aq"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>>!aj%,,PQsZ_ZdZdBe)fgij     c                 $   [         R                  " U [         R                  " XSU R                  S[        R
                  " S/[        R                  S9S95      S5      nU R                  SU[        R                  R                  R                  S9$ )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   !   sm    oo	7>>!1add:u||QCW\WaWa?bd&cdfgG 44ejj&D&D&J&J4KKr+   c                     [         R                  " XSU R                  S[        R                  " / SQ[        R
                  S9S95      $ )Nr   r
   )r   r         r   r   )r   r"   r   r   r   r   )r#   r.   s     r)   _process_rois_for_roi_alignr4   (   s4    >>!1add:u||L`e`j`j?kd&lmmr+   sampling_ratioc                 B    US:  a  [         R                  " S5        SnU$ )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                     [        X5      n[        X5      nU(       a  [        R                  " S5        [	        X5      nU R                  SUUUUUUUS9$ )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   se    8AM&q/DK	
 ;1MN44%%#'  	 	r+   c                     [        X5      n[        X5      nU(       a  SOSn	[        X5      nU R                  SUUUU	UUUUS9	$ )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   s\    8AM&q/D5<\BU":1MN44)G%%#'  
 
r+   c                 0    U R                  SXXE4US9nUS 4$ )N
MaxRoiPool)pooled_shape_ir=   )r   )r#   rA   r.   rB   rC   rD   roi_pools          r)   rQ   rQ   _   s.    tte=2Oan  H T>r+   c                  L   [         R                  R                  S[        [        5        [         R                  R                  S[
        [        5        [         R                  R                  S[        [        5        [         R                  R                  S[        [        5        g )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+   