
    VhL                     z   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	Z
d dlmZmZmZmZmZ d dl mZ d dlmZ d dl d	 Ze j,                  j/                  d
d      dedeeef   fd       Zej4                  d        Zd Zd Zej=                  ee       d ZejA                  e       e j,                  j/                  dd      dededefd       Z!e!j4                  d        Zd Z"d Z#e!j=                  e#e"       d Z$e!jA                  e$       e j,                  j/                  dd      dede%defd       Z&e&j4                  d        Zd  Z'd! Z(e&j=                  e(e'       d" Z)e&jA                  e)       e j,                  j/                  d#d      ded$e*deeeef   fd%       Z+e+j4                  d&        Zd' Z,d( Z-e+j=                  e-e,       d) Z.e+jA                  e.       e j,                  j/                  d*d      ded+ed,ed$e*def
d-       Z/e/j4                  d.        Zd/ Z0d0 Z1e/j=                  e1e0       d1 Z2e/jA                  e2       e j,                  j/                  d2d      dedefd3       Z3e3j4                  d4        Zd5 Z4d6 Z5e3jA                  e5       e j,                  j/                  d7d      ded8e6e*   defd9       Z7e7j4                  defd:       Zdd;Z8d< Z9e7j=                  e9e8       d= Z:e7jA                  e:       d> Z;e j,                  j/                  d?d      d@e6e   d$e*defdA       Z<e<j4                  dB        ZdC Z=dD Z>e<j=                  e>e=       dE Z?e<jA                  e?       dF Z@e j,                  j/                  dGd      dedHe6e*   d$e*deAe   fdI       ZBeBj4                  dJ        ZdK ZCdL ZDeBj=                  eDeC       dM ZEeBjA                  eE       dN ZFe j,                  j/                  dOd      dedHe6e*   d$e*deeAe   e*f   fdP       ZGeGj4                  dQ        ZdR ZHdS ZIeGj=                  eIeH       dT ZJeGjA                  eJ       e j,                  j/                  dUd      dVedWedXedefdY       ZKeKj4                  dZ        Zd[ ZLeKjA                  eL       d\ ZM ed]ej                  e ee j                  e j                        d^_       ed`e!j                  e ee j                  e j                        d^_       edae&j                  e ee j                  e j                        d^_       edbe+j                  e ee j                  e j                        d^_       edce/j                  e ee j                  e j                        d^_       edde3j                  e4 ee j                  e j                        d^d^e       edfe j                  j                  j                  eM ee j                  e j                        d^d^e       edge j                  j                  jn                  e; ee j                  e j                        dhd^e       edie j                  j                  jx                  e@ ee j                  e j                        dhd^d^d^j       edke j                  j                  j                  eF ee j                  e j                        dhd^d^d^j       edle j                  j                  j                  eF ee j                  e j                        dm dhd^d^d^n	      gZSe j,                  j                  dodp      ZUeUj                  dq       e j,                  j5                  dreUs      dt        ZeUj                  du       dv ZWe j,                  j5                  dweWeUs       eUj                  dx       e j,                  j5                  dyeUs      dz        ZeUj                  d{       d| ZXe j,                  j5                  d}eXeUs       e j,                  j/                  d~d      dedefd       ZYeYj4                  d        Ze j,                  j/                  dd      dedefd       ZZd Z[eZj5                  e[       y)    N)make_tensor)OpInfoSampleInput)all_types_and)sample_inputs_numpy_cubesample_inputs_numpy_mulsample_inputs_numpy_mul_scalarsample_inputs_numpy_sortsample_inputs_numpy_take)Tensor)Number)*c                 >    | j                         j                         S N)cpunumpy)tensors    T/home/dcms/DCMS/lib/python3.12/site-packages/torch/testing/_internal/custom_op_db.pyto_numpyr      s    ::<    z_torch_testing::numpy_cube )mutates_argsxreturnc                     t        |       }t        j                  d|dz  z  | j                        }t        j                  |dz  | j                        |fS )N      device)r   torchr   r   )r   x_npdxs      r   
numpy_cuber#      sE    A;D	a$!)mAHH	5B<<	!((3R77r   c                 B    | j                         | j                         fS r   cloner   s    r   _r(   %   s    779aggir   c                 :    |\  }|\  }}| j                  ||       y r   save_for_backward)ctxinputsoutputr   _cuber"   s         r   numpy_cube_setup_contextr0   )   s"    	BAIE2!R r   c                 \    | j                   \  }}t        ||      dt        ||      z  z   }|S )N   )saved_tensors	numpy_mul)r,   grad_outgrad_dxr   r"   grad_xs         r   numpy_cube_backwardr8   .   s3    EArx$q9Wa+@'@@FMr   )setup_contextc                 0    t        |      }||d   |d   ffS Nr   )r#   )infoin_dimsr   results       r   numpy_cube_vmapr?   5   s#    ]FGAJ
+++r   z_torch_testing::numpy_mulyc                 n    t        j                  t        |       t        |      z  | j                        S Nr   r    r   r   r   r   r@   s     r   r4   r4   ;   s$    <<hqk1!((CCr   c                 ^    | j                   |j                   k(  sJ | |z  j                         S r   )r   
contiguousrD   s     r   r(   r(   ?   s+    88qxxEr   c                 "     | j                   |  y r   r*   r,   r-   r.   s      r   numpy_mul_setup_contextrI   D   s    C6"r   c                     | j                   \  }}| j                  d   r||z  nd }| j                  d   r||z  nd }||fS Nr      )r3   needs_input_grad)r,   r5   r   r@   r7   grad_ys         r   numpy_mul_backwardrO   G   sK    DAq 11!4X\$F 11!4X\$F6>r   c                     |\  }}||j                  |d      n|j                  d      }||j                  |d      n|j                  d      }||z  }|j                  dd      }|dfS Nr   movedim	unsqueeze)r<   r=   r   r@   x_bdimy_bdimr>   s          r   numpy_mul_vmaprX   O   sl    NFF!'!3		&"RA!'!3		&"RAUF^^B"F19r   z _torch_testing::numpy_mul_scalarscalarc                \    t        j                  t        |       |z  | j                        S rB   rC   r   rY   s     r   numpy_mul_scalarr\   Y   s     <<f,QXX>>r   c                (    | |z  j                         S r   )rF   r[   s     r   r(   r(   ]   s    J""$$r   c                     |d   | _         y )NrY   rY   )r,   r-   keyword_only_inputsr.   s       r   numpy_mul_scalar_setup_contextra   a   s    $X.CJr   c                 $    || j                   z  }|S r   r_   )r,   r5   r7   s      r   numpy_mul_scalar_backwardrc   d   s    

"FMr   c                    |\  }||j                  |d      n|j                  d      }||z  }|j                  dd      }|dfS rQ   rS   )r<   r=   r   rY   rV   r>   s         r   numpy_mul_scalar_vmapre   j   sK    GF!'!3		&"RAZF^^B"F19r   z_torch_testing::numpy_sortdimc                 D   | j                   }t        |       } t        j                  | |      }t        j                  ||      }t        j                  | ||      }t        j                  ||      t        j                  ||      t        j                  ||      fS )Naxisr   )r   r   npargsorttake_along_axisr    r   )r   rf   r   indind_invr>   s         r   
numpy_sortro   s   s|    XXFA
**QS
!Cjj3'G3S1FVF+S(WV, r   c                     t        j                  |       t        j                  | t         j                        t        j                  | t         j                        fS Ndtype)r    
empty_likelong)r   rf   s     r   r(   r(      s@    A 0 0%** EuGWGWXYafakakGlllr   c                 l    |\  }}}|d   | _         | j                  ||       | j                  ||       y )NrL   )rf   r+   mark_non_differentiable)r,   r-   r.   _outrm   rn   s         r   numpy_sort_setup_contextry      s9    D#wQiCG#w'W-r   c                 T    | j                   \  }}t        |||| j                        d fS r   r3   
numpy_takerf   )r,   r5   grad_indgrad_ind_invrm   rn   s         r   numpy_sort_backwardr      s+    $$LChcgg6<<r   c                     |\  }}|j                  |d      }|dk\  r|n||j                         z   dz
  }t        ||dz         }|dfS )Nr   rL   )r   r   r   )rT   rf   ro   )r<   r=   r   rf   rV   r(   r>   s          r   numpy_sort_vmapr      sR    IFA			&!A#sQUUW}q0C37#F9r   z_torch_testing::numpy_takerm   rn   c                     | j                   }t        |       } t        |      }t        j                  t	        j
                  | ||      |      S rB   )r   r   r    r   rj   rl   )r   rm   rn   rf   r   s        r   r|   r|      s=    XXFA
3-C<<**1c37GGr   c                    | j                   |j                   k(  sJ | j                   |j                   k(  sJ |j                  t        j                  k(  sJ |j                  t        j                  k(  sJ t        j                  |       S r   )r   rs   r    ru   rt   )r   rm   rn   rf   s       r   r(   r(      sk    88szz!!!88w~~%%%99

"""==EJJ&&&Ar   c                 D    |\  }}}}|| _         | j                  ||       y r   )rf   r+   )r,   r-   r.   _xrm   rn   rf   s          r   numpy_take_setup_contextr      s'    "BWcCG#w'r   c                 \    | j                   \  }}t        |||| j                        }|d d d fS r   r{   )r,   r5   rm   rn   r7   s        r   numpy_take_backwardr      s4    $$LC'38F4t##r   c                      |\  }}}}	||j                         n|dz
  }
|dk\  r|n||
z   } fd} |||      } |||      } |||      }t        ||||dz         dfS )NrL   r   c                 z    |' | j                   j                  g| j                   S | j                  |d      S r;   )expand
batch_sizeshaperT   )r   rV   r<   s     r   expand_bdimz$numpy_take_vmap.<locals>.expand_bdim   s7    >188DOO6agg66yy##r   )rf   r|   )r<   r=   r   rm   rn   rf   rV   ind_bdimind_inv_bdimr(   logical_dimr   s   `           r   numpy_take_vmapr      s    (/%FHlA $^!%%'!K#s[0C$
 	AvA
c8
$C'<0GagsQw/22r   z_torch_testing::numpy_nonzeroc                     t        |       }t        j                  t        j                  |      d      }|j                  d   dk  rt        d      t        j                  || j                        S )NrL   rh   r   znot supportedr   )	r   rj   stacknonzeror   RuntimeErrorr    r   r   )r   r!   ress      r   numpy_nonzeror      sT    A;D
((2::d#!
,C
yy|q?++<<AHH--r   c                     t         j                  j                  j                         }|j	                         }|| j                         g}| j                  |t         j                        }|S rq   )r    
_custom_opimplget_ctxcreate_unbacked_symintrf   	new_emptyru   )r   r,   i0r   r>   s        r   r(   r(      sT    





'
'
)C		#	#	%BME[[ejj[1FMr   c              +     K   t        j                  t        |||      }d} ||dd      }t        |dd|t        j                        }t        j
                         5  ||z  }d d d        t        |d	       y # 1 sw Y   xY ww)
Nr   rs   requires_grad
   ?r   lowhighr   )r   r   r   rs   r   args)	functoolspartialr   r    ru   no_gradr   )	opinfor   rs   r   kwargsmake_argr   r>   masks	            r   sample_inputs_numpy_nonzeror      s{       V5XefHEe1-Fu!!F%**MD	 $ f2
&& s   AB	A=%B	=BB	c                     t        d      Nz1Operator is data-dependent and cannot be vmapped.NotImplementedError)r<   r=   r   s      r   numpy_nonzero_vmapr          
Q
RRr   z_torch_testing::numpy_view_copyr   c                     t        j                  t        j                  t	        |       j                  |            | j                        S rB   )r    r   rj   copyr   reshaper   r   r   s     r   numpy_view_copyr      s/    << 3 3E :;AHHMMr   c                 \    | j                         j                  |      j                         S r   )r&   viewr   s     r   r(   r(      s     779>>% &&((r   c                 ,    |d   j                   | _        y r;   )r   x_shaperH   s      r   numpy_view_copy_setup_contextr      s    )//CKr   c                 n    t         j                  j                  j                  || j                        d fS r   )r    ops_torch_testingr   r   )r,   r5   s     r   numpy_view_copy_backwardr      s(    99##33HckkJDPPr   c                 z    |\  }}|j                  |d      }|j                  d   }|g|}t        ||      }|dfS r;   )rT   r   r   )	r<   r=   r   r   rV   r(   r   batch_shaper>   s	            r   numpy_view_copy_vmapr      sK    IFA			&!AggajG#U#KQ,F19r   c              +      K   t        j                  t        |||      } |ddddd      }t        |ddgf       y w)	Nr   r   r      r   r      r   r   r   r   r   )r   r   rs   r   r   r   r>   s          r   sample_inputs_numpy_view_copyr     sB       V5XefHaA3Q/F
fQG:
..   >A z_torch_testing::numpy_catxsc                 ,    t               dkD  sJ t         fd D              sJ t         fd D              sJ  D cg c]  }t        |       }}t        j                  ||      }t        j                  | d   j                        S c c}w )Nr   c              3   V   K   | ]   }|j                   d    j                   k(   " ywr   Nr   .0r   r   s     r   	<genexpr>znumpy_cat.<locals>.<genexpr>	  "     4Aqxx2a5<<'4   &)c              3   V   K   | ]   }|j                   d    j                   k(   " ywr   rr   r   s     r   r   znumpy_cat.<locals>.<genexpr>
  "     2!qww"Q%++%2r   rh   r   )lenallr   rj   concatenater    r   r   )r   rf   r   np_xsnp_outs   `    r   	numpy_catr     s    r7Q;;444442r2222"$%QXa[%E%^^E,F<<r!u||44 &s   Bc                      t               dkD  sJ t         fd D              sJ t         fd D              sJ t        j                   |      S )Nr   c              3   V   K   | ]   }|j                   d    j                   k(   " ywr   r   r   s     r   r   z_.<locals>.<genexpr>  r   r   c              3   V   K   | ]   }|j                   d    j                   k(   " ywr   rr   r   s     r   r   z_.<locals>.<genexpr>  r   r   rf   )r   r   r    cat)r   rf   s   ` r   r(   r(     sL    r7Q;;444442r222299RS!!r   c                 j    |\  }}|D cg c]  }|j                   |    c}| _        || _        y c c}w r   )r   	dim_sizesrf   )r,   r-   r.   r   rf   r   s         r   numpy_cat_setup_contextr     s1    GB+-.aQWWS\.CMCG /s   0c                     | j                   }| j                  }t        t        j                  |      d d       }t
        j                  j                  j                  |||      }|d fS )NrR   )	r   rf   listrj   cumsumr    r   r   numpy_split_copy)r,   r5   r   rf   splitsgrad_xss         r   numpy_cat_backwardr     sV    I
''C"))I&s+,Fii&&77&#NGD=r   c                 *    |\  }t        ||      }||fS r   )r   )r<   r=   r   rf   rV   r>   s         r   numpy_cat_vmapr   %  s    GFq#F6>r   c              +      K   t        j                  t        |||      } |ddddd      } |ddddd      } |ddddd      }t        |||gd	       y w)
Nr   r   r   r   r   r      )r   r   r   )	r   r   rs   r   r   r   r0r1r2s	            r   sample_inputs_numpy_catr   ,  sf       V5XefH	!Qs	+B	!Qs	+B	!Qs	+B
r2rl
..s   AAz _torch_testing::numpy_split_copyr   c                     t        |       }t        j                  |||      }|D cg c].  }t        j                  || j
                  | j                        0 c}S c c}w Nrh   r   rs   )r   rj   splitr    r   r   rs   r   r   rf   r!   arrsarrs         r   r   r   3  sF    A;D88D&s+DIMN#ELLQXXQWW=NNNs   3Ac                 r    t        j                  | ||      D cg c]  }|j                          c}S c c}w r   )r    tensor_splitr&   r   r   rf   xis       r   r(   r(   9  s+    !&!3!3Avs!CD2BHHJDDDs   4c                     |\  }}}|| _         y r   r   r,   r-   r.   r(   rf   s        r   numpy_split_copy_setup_contextr  =      IAq#CGr   c                 v    t         j                  j                  j                  || j                        }|d d fS Nr   r    r   r   r   rf   )r,   r5   r>   s      r   numpy_split_copy_backwardr	  A  s2    YY%%//cgg/FF4r   c                 Z    |\  }}}|j                  |d      }t        |||dz         }|dfS rK   )rT   r   )r<   r=   r   r   rf   rV   r(   r>   s           r   numpy_split_copy_vmapr  G  s9    MFA			&!Aaq1F19r   c              +      K   t        j                  t        |||      } |dddd      }t        |g ddf       y w)	Nr   r   	   r   r   )rL   r   r2   rL   r   r   )r   r   rs   r   r   r   r   s          r   sample_inputs_numpy_split_copyr  O  s>       V5XefHA3Q'A
ay!n
--r   z)_torch_testing::numpy_split_copy_with_intc                     t        |       }t        j                  |||      }|D cg c].  }t        j                  || j
                  | j                        0 c}t        |      fS c c}w r   )r   rj   r   r    r   r   rs   r   r   s         r   numpy_split_copy_with_intr  T  sR    A;D88D&s+DIMN#ELLQXXQWW=NPSTZP[[[Ns   3A)c                     t        j                  | ||      D cg c]  }|j                          c}t        |      fS c c}w r   )r    r   r&   r   r   s       r   r(   r(   Z  s4    !&!3!3Avs!CD2BHHJDc&kQQDs   ?c                     |\  }}}|| _         y r   r   r  s        r   'numpy_split_copy_with_int_setup_contextr  ^  r  r   c                 r    t         j                  j                  j                  || j                        d d fS r  r  )r,   r5   r(   s      r   "numpy_split_copy_with_int_backwardr  b  s-    99##--hCGG-DdDPPr   c                     |\  }}}|j                  |d      }t        |||dz         \  }}||ft        t        |            D cg c]  }d c}d ffS c c}w rK   )rT   r  ranger   )	r<   r=   r   r   rf   rV   r(   r>   	len_splits	            r   numpy_split_copy_with_int_vmapr  i  s`    MFA			&!A1!VS1WEFIIU3v;-?!@!!@$ GGG!@s   	Az_torch_testing::numpy_nmsboxesscoresiou_thresholdc                 P   | j                   |j                   k(  sJ | j                   }t        |       } t        |      }| j                  d   }| j                  |dfk(  sJ |j                  |fk(  sJ | d d df   }| d d df   }| d d df   }| d d df   }||z
  dz   ||z
  dz   z  }	|j                         d d d   }
g }|
j                  dkD  r|
d   }|j                  |       t        j                  ||   ||
dd           }t        j                  ||   ||
dd           }t        j                  ||   ||
dd           }t        j                  ||   ||
dd           }t        j                  d||z
  dz         }t        j                  d||z
  dz         }||z  }||	|   |	|
dd     z   |z
  z  }t        j                  ||k        d   }|
|dz      }
|
j                  dkD  rt        j                  t        j                  |      |      }|j	                  d      dk\  sJ |S )	Nr   r   rL   r   r   rR   g        r   )r   r   r   rk   sizeappendrj   maximumminimumwherer    r   r   )r  r  r  r   Nx1y1x2y2areasorderkeepixx1yy1xx2yy2whinterovrindsr>   s                          r   	numpy_nmsr5  q  s/    <<6==(((\\FUOEfFAA;;1a&   <<A4	q!tB	q!tB	q!tB	q!tB"Wq[R"Wq[)ENNTrT"ED
**q.!HAjjA59.jjA59.jjA59.jjA59.JJsC#IM*JJsC#IM*AuQx%ab	"22U:;xx},-a0dQh **q.  \\"((4.8F;;q>QMr   c                 X   | j                   |j                   k(  sJ | j                  d   }| j                  |dfk(  sJ |j                  |fk(  sJ t        j                  j                  j                         }|j                         }| j                  |gt        j                        }|S )Nr   r   rr   )	r   r   r    r   r   r   r   r   int64)r  r  r  r#  r,   r   r>   s          r   r(   r(     s    <<6==(((AA;;1a&   <<A4





'
'
)C		#	#	%B__bT_5FMr   c                     t        d      r   r   )r<   r=   r  r  r  s        r   numpy_nms_vmapr9    r   r   c              +   v  K   t        j                  t        ||      }d} ||gdd      } ||gdd      } ||gdd      }	 ||gdd      }
t        j                  ||	||z   |	|
z   gd      j                  |      } ||gdd|	      } |g dd      j                         }t        |||f
       y w)Nr   @   r      r   r   rL   r   )r   r   r   r   )r   r   r   r    r   requires_grad_itemr   )r   r   rs   r   r   r   r#  r   r"   ysdyr  r  r  s                 r   sample_inputs_numpy_nmsrA    s       V5IH
A	1#12	&B	1#11	%B	1#12	&B	1#11	%BKKRb"r'2:II-XEqcqqFFRQQ/446M
e6="9
::s   B7B9NumpyCubeCustomOpF)opsample_inputs_funcdtypessupports_outNumpyMulCustomOpNumpyMulScalarCustomOpNumpySortCustomOpNumpyTakeCustomOpNumpyNonzeroCustomOp)rC  rD  rE  supports_autogradrF  NumpyNMSCustomOpNumpyViewCopyCustomOpTNumpyCatCustomOp)rC  rD  rE  rL  check_batched_gradcheck_batched_gradgradrF  NumpySplitCopyCustomOpNumpySplitCopyWithIntCustomOpc                      | |i |d   S r;   r   )rC  r   r   s      r   <lambda>rU    s    b$6I&6I!6L r   )rC  rD  rE  gradcheck_wrapperrL  rP  rQ  rF  r   FRAGMENTzsource0(Tensor x) -> Tensorz_torch_testing::source0)libc                 "    | j                         S r   r%   r'   s    r   r(   r(   !      779r   zsource1(Tensor x) -> Tensorc                 "    | j                         S r   r%   r'   s    r   source1_faker\  '      779r   z_torch_testing::source1zsource2(Tensor x) -> Tensorz_torch_testing::source2c                 "    | j                         S r   r%   r'   s    r   r(   r(   .  rZ  r   zsource3(Tensor x) -> Tensorc                 "    | j                         S r   r%   r'   s    r   source3_faker`  4  r]  r   z_torch_testing::source3z_torch_testing::source4c                 "    | j                         S r   r%   r'   s    r   source4rb  :  rZ  r   c                 "    | j                         S r   r%   r'   s    r   r(   r(   >  rZ  r   z_torch_testing::source5c                 "    | j                         S r   r%   r'   s    r   source5re  B  rZ  r   c                 "    | j                         S r   r%   r'   s    r   source5_fakerg  F  r]  r   )r   N)\r    r   torch.testingr   #torch.testing._internal.opinfo.corer   r   $torch.testing._internal.common_dtyper   r   rj   ,torch.testing._internal.autograd_function_dbr   r   r	   r
   r   r   torch.typesr   typingr   library	custom_optupler#   register_faker(   r0   r8   register_autogradr?   register_vmapr4   rI   rO   rX   floatr\   ra   rc   re   intro   ry   r   r   r|   r   r   r   r   r   r   Sequencer   r   r   r   r   r   r   r   r   r   Listr   r  r	  r  r  r  r  r  r  r5  r9  rA  _opoverloadboolhalfr   r   custom_op_dbLibraryrX  definer\  r`  rb  re  rg  r   r   r   <module>r~     s
     % ?       5BG8& 8U66>2 8 H8
    !

   0@X  Y,    )42FD DF Dv D GD    # 
  .>U  V 
   ';"M? ?5 ?V ? N? %  %/  " "#<Lj " k   4 55BG
& 
s 
uVVV-C'D 
 H
 m m.=   0@X  Y    )5BGH& Hv H HS HV H HH  (
$
   0@X  Y3$    )8rJ.V . . K.  'S   . /:LNv Nhsm N N MN )6 ) )"Q  ! !":Jg ! h   2 3/
 42F5(6" 5 5 5 G5 " "
 
  .>U  V
 
   '/ ;"MO O OC ODL O NO
 E  E  " "#<Lj " k   4 5.
 DSUV\ \# \S \USWX^S_adSdMe \ W\
 ((R )RQ  + +&9 , ;H  ' '(F G42F)V )V )F )v ) G)V 	 	S 
   '; !!3UZZ4   2UZZ4  ''9UZZ4 !!3UZZ4 !!3UZZ4 $$6UZZ4 99##--2UZZ4 99##338UZZ4 99##--2UZZ4 $	  99##449UZZ4 $	 '99##==9UZZ4L $
a[D mm,j9 

( )6C@ A 

( )   5|  M 

( )6C@ A 

( )   5|  M 2Dv &  E 	  2Dv &  E   l #r   