
    PhB                        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 d dl mZ d dlmZ d dl d dlmZ d	 Z ej0                  d
      dedeeef   fd       Z ej6                  d
      d        Z ej:                  d
      d        Z ej>                  d
      d        Z  ejB                  d
      d        Z" ej0                  d      dededefd       Z# ej6                  d      d        Z$ ej:                  d      d        Z% ej>                  d      d        Z& ejB                  d      d        Z' ej0                  d      dede(deeeef   fd       Z) ej6                  d      d        Z* ej:                  d      d        Z+ ej>                  d      d        Z, ejB                  dg d       d!        Z- ej0                  d"      ded#ed$ede(def
d%       Z. ej6                  d"      d&        Z/ ej:                  d"      d'        Z0 ej>                  d"      d(        Z1 ejB                  d"      d)        Z2 ej0                  d*      dedefd+       Z3 ej6                  d*      d,        Z4 ej:                  d*      d-        Z5d. Z6 ej0                  d/      ded0e7e(   defd1       Z8 ej6                  d/      defd2       Z9 ej:                  d/      defd3       Z: ej>                  d/      defd4       Z; ejB                  d/      defd5       Z<d6 Z= ej0                  d7      d8e7e   de(defd9       Z> ej6                  d7      d:        Z? ej:                  d7      d;        Z@ ej>                  d7      d<        ZA ejB                  d7      d=        ZBd> ZC ej0                  d?      ded@e7e(   de(deDe   fdA       ZE ej6                  d?      dB        ZF ej:                  d?      dC        ZG ej>                  d?      dD        ZH ejB                  d?      dE        ZIdF ZJ ej0                  dG      ded@e7e(   de(deeDe   e(f   fdH       ZK ej6                  dG      dI        ZL ej:                  dG      dJ        ZM ej>                  dG      dK        ZN ejB                  dGdLdMg       dN        ZO ej0                  dO      dPedQedRedefdS       ZP ej6                  dO      dT        ZQ ej:                  dO      dU        ZRdV ZS edWe j                  j                  j4                  e ee j                  e j                        dMX       edYe j                  j                  jF                  e ee j                  e j                        dMX       edZe j                  j                  jR                  e ee j                  e j                        dMX       ed[e j                  j                  j\                  e ee j                  e j                        dMX       ed\e j                  j                  jf                  e6 ee j                  e j                        dMdM]       ed^e j                  j                  j                  eS ee j                  e j                        dMdM]       ed_e j                  j                  jp                  e= ee j                  e j                        dLdM]       ed`e j                  j                  j|                  eC ee j                  e j                        dLdMdMdMa       edbe j                  j                  j                  eJ ee j                  e j                        dLdMdMdMa       edce j                  j                  j                  eJ ee j                  e j                        dd dLdMdMdMe	      g
ZXy)f    N)make_tensor)OpInfoSampleInput)all_types_and)sample_inputs_numpy_cubesample_inputs_numpy_mulsample_inputs_numpy_sortsample_inputs_numpy_take)Tensor)Number)*c                 >    | j                         j                         S N)cpunumpy)tensors    oC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/testing/_internal/custom_op_db.pyto_numpyr      s    ::<    z_torch_testing::numpy_cubexreturnc                     t               r   NotImplementedErrorr   s    r   
numpy_cuber          

r   c                     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_cube_implr&   "   sE    A;D	a$!)mAHH	5B<<	!((3R77r   c                 B    | j                         | j                         fS r   )cloner   s    r   numpy_cube_abstractr)   (   s    779aggir   c                 $    | j                   |d   fS )N   r   inputsoutputs     r   numpy_cube_save_for_backwardr/   ,   s    HHfQi  r   c                     |\  }}t         j                  j                  j                  ||      dt         j                  j                  j                  ||      z  z   }d|iS )N   r   )r#   ops_torch_testing	numpy_mul)ctxsavedgrad_outgrad_dxr   r%   grad_xs          r   numpy_cube_backwardr:   0   sT    EArYY%%//"=EIID\D\DfDfgnpqDr@rrF=r   z_torch_testing::numpy_mulyc                     t               r   r   r   r;   s     r   r4   r4   6   r   r   c                 n    t        j                  t        |       t        |      z  | j                        S Nr!   )r#   r   r   r"   r=   s     r   numpy_mul_implr@   :   s$    <<hqk1!((CCr   c                 ^    | j                   |j                   k(  sJ | |z  j                         S r   )r"   
contiguousr=   s     r   numpy_mul_abstractrC   >   s+    88qxxEr   c                 
   i }| j                   j                  |d<   | j                  j                  |d<   | j                   j                  r| j                  nd |d<   | j                  j                  r| j                   nd |d<   |S )Nx_requires_grady_requires_gradr;   r   )r   requires_gradr;   )r-   r.   r6   s      r   numpy_mul_save_for_backwardrH   C   sl    E%xx55E
%xx55E
#XX33E#J#XX33E#JLr   c                 H    |d   r||d   z  nd }|d   r||d   z  nd }||dS )NrE   r;   r   )r;   r    )r5   r6   r7   r9   grad_ys        r   numpy_mul_backwardrL   M   s=    &+,=&>Xc
"DF&+,=&>Xc
"DFf%%r   z_torch_testing::numpy_sortdimc                     t               r   r   r   rM   s     r   
numpy_sortrP   S   r   r   c                 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   rM   r"   indind_invresults         r   numpy_sort_implrZ   W   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longrO   s     r   numpy_sort_abstractra   d   s@    A 0 0%** EuGWGWXYafakakGlllr   c                 ,    |\  }}}| j                   ||gS r   rM   )r-   r.   outrW   rX   s        r   numpy_sort_save_for_backwardre   h   s    CgJJW%%r   )TFF)output_differentiabilityc                 j    |\  }}}dt         j                  j                  j                  ||||      iS Nr   r#   r2   r3   
numpy_take)r5   r6   r7   grad_indgrad_ind_invrM   rW   rX   s           r   numpy_sort_backwardrm   m   s4    Cg))44XwSQRRr   z_torch_testing::numpy_takerW   rX   c                     t               r   r   r   rW   rX   rM   s       r   rj   rj   r   r   r   c                     | j                   }t        |       } t        |      }t        j                  t	        j
                  | ||      |      S r?   )r"   r   r#   r   rT   rV   )r   rW   rX   rM   r"   s        r   numpy_take_implrq   v   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"   r^   r#   r`   r_   ro   s       r   numpy_take_abstractrs   }   sk    88szz!!!88w~~%%%99

"""==EJJ&&&Ar   c                 J    | j                   | j                  | j                  dS )NrM   rW   rX   ru   r,   s     r   numpy_take_save_for_backwardrv      s#     zzzz>> r   c                 t    t         j                  j                  j                  ||d   |d   |d         d d dS )NrX   rW   rM   )r   rW   rX   ri   )r5   r6   r7   s      r   numpy_take_backwardrx      sC     YY%%005;KUSX\[`af[gh r   z_torch_testing::numpy_nonzeroc                     t               r   r   r   s    r   numpy_nonzerorz      r   r   c                     t        |       }t        j                  t        j                  |      d      }|j                  d   dk  rt        d      t        j                  || j                        S )Nr+   rR   r   znot supportedr!   )	r   rT   stacknonzeroshapeRuntimeErrorr#   r   r"   )r   r$   ress      r   numpy_nonzero_implr      sT    A;D
((2::d#!
,C
yy|q?++<<AHH--r   c                     t         j                  j                  j                         }|j	                         }|| j                         g}| j                  |t         j                        }|S r\   )r#   
_custom_opimplget_ctxcreate_unbacked_symintrM   	new_emptyr`   )r   r5   i0r~   rY   s        r   numpy_nonzero_abstractr      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"   r^   rG   
   ?r    lowhighr   )r   r   r"   r^   rJ   args)	functoolspartialr   r#   r`   no_gradr   )	opinfor"   r^   rG   kwargsmake_argr~   rY   masks	            r   sample_inputs_numpy_nonzeror      ss       V5XefHEe1-Fu!!F%**MD	$ 
 f2
&& 
s   AB	A=%B	=BB	z_torch_testing::numpy_view_copyr~   c                     t               r   r   r   r~   s     r   numpy_view_copyr      r   r   c                     t        j                  t        j                  t	        |       j                  |            | j                        S r?   )r#   r   rT   copyr   reshaper"   r   s     r   numpy_view_copy_implr      s/    << 3 3E :;AHHMMr   c                 \    | j                         j                  |      j                         S r   )r(   viewr   s     r   numpy_view_copy_abstractr      s     779>>% &&((r   c                 .    | j                   j                  S r   r   r,   s     r   !numpy_view_copy_save_for_backwardr      s    88>>r   c                 Z    dt         j                  j                  j                  ||      iS rh   )r#   r2   r3   r   )r5   x_shaper7   s      r   numpy_view_copy_backwardr      s$    ))99(GLMMr   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"   r^   rG   r   r   rY   s          r   sample_inputs_numpy_view_copyr      sB       V5XefHaA3Q/F
fQG:
..   >A z_torch_testing::numpy_catxsc                     t               r   r   r   rM   s     r   	numpy_catr      r   r   c                 ,    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_impl.<locals>.<genexpr>   #     4Aqxx2a5<<'   &)c              3   V   K   | ]   }|j                   d    j                   k(   " ywr   r]   r   s     r   r   z!numpy_cat_impl.<locals>.<genexpr>   #     2r!qww"Q%++%rr   rR   r!   )lenallr   rT   concatenater#   r   r"   )r   rM   r   np_xsnp_outs   `    r   numpy_cat_implr      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%numpy_cat_abstract.<locals>.<genexpr>   r   r   c              3   V   K   | ]   }|j                   d    j                   k(   " ywr   r]   r   s     r   r   z%numpy_cat_abstract.<locals>.<genexpr>   r   r   rc   )r   r   r#   catr   s   ` r   numpy_cat_abstractr      sL    r7Q;;444442r222299RS!!r   c                     | j                   D cg c]  }|j                  | j                      }}|| j                  fS c c}w r   )r   r~   rM   )r-   r.   r   	dim_sizess       r   numpy_cat_save_for_backwardr      s;    .4ii8i$iI8fjj   9s    ?c                     |\  }}t        t        j                  |      d d       }t        j                  j
                  j                  |||      }d|iS )Nr   )listrT   cumsumr#   r2   r3   numpy_split_copy)r5   r6   r7   r   rM   splitsgrad_xss          r   numpy_cat_backwardr      sM    NIs"))I&s+,Fii&&77&#NG'?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"   r^   rG   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_copysectionsc                     t               r   r   r   r   rM   s      r   r   r      r   r   c                     t        |       }t        j                  |||      }|D cg c].  }t        j                  || j
                  | j                        0 c}S c c}w NrR   r"   r^   )r   rT   splitr#   r   r"   r^   r   r   rM   r$   arrsarrs         r   numpy_split_copy_implr      sJ    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   rM   xis       r   numpy_split_copy_abstractr      s1    !&!3!3Avs!CD!C2BHHJ!CDDDs   4c                     | j                   S r   rc   r,   s     r   "numpy_split_copy_save_for_backwardr     s    ::r   c                 `    |}dt         j                  j                  j                  ||      iS Nr   rc   r#   r2   r3   r   )r5   r6   r7   rM   s       r   numpy_split_copy_backwardr     s,    
C))33H#3FGGr   c              +      K   t        j                  t        |||      } |dddd      }t        |g ddf       y w)	Nr   r    	   r   r   )r+   r   r1   r+   r   r   )r   r"   r^   rG   r   r   r   s          r   sample_inputs_numpy_split_copyr   
  s>       V5XefHA3Q'A
ay!n
--r   z)_torch_testing::numpy_split_copy_with_intc                     t               r   r   r   s      r   numpy_split_copy_with_intr     r   r   c                     t        |       }t        j                  |||      }|D cg c].  }t        j                  || j
                  | j                        0 c}t        |      fS c c}w r   )r   rT   r   r#   r   r"   r^   r   r   s         r   numpy_split_copy_with_int_implr     sV    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   "numpy_split_copy_with_int_abstractr     s:    !&!3!3Avs!CD!C2BHHJ!CDc&kQQDs   ?c                     | j                   S r   rc   r,   s     r   +numpy_split_copy_with_int_save_for_backwardr     s     ::r   TFc                 `    |}dt         j                  j                  j                  ||      iS r   r   )r5   r6   r7   _rM   s        r   "numpy_split_copy_with_int_backwardr   "  s.     C))33H#3FGGr   z_torch_testing::numpy_nmsboxesscoresiou_thresholdc                     t               r   r   )r   r   r   s      r   	numpy_nmsr  )  r   r   c                 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   r+   r    r   r   g        r!   )r"   r   r~   rU   sizeappendrT   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indsrY   s                          r   numpy_nms_implr  -  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   r]   )	r"   r~   r#   r   r   r   r   r   int64)r   r   r   r	  r5   r   rY   s          r   numpy_nms_abstractr  Y  s    <<6==(((AA;;1a&   <<A4





'
'
)C		#	#	%B__bT_5FMr   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   r+   rc   )r   r   rG   r   )r   r   r   r#   r|   requires_grad_itemr   )r   r"   r^   rG   r   r   r	  r   r%   ysdyr   r   r   s                 r   sample_inputs_numpy_nmsr&  e  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NumpyCubeCustomOp)opsample_inputs_funcdtypessupports_outNumpyMulCustomOpNumpySortCustomOpNumpyTakeCustomOpNumpyNonzeroCustomOp)r(  r)  r*  supports_autogradr+  NumpyNMSCustomOpNumpyViewCopyCustomOpNumpyCatCustomOp)r(  r)  r*  r0  check_batched_gradcheck_batched_gradgradr+  NumpySplitCopyCustomOpNumpySplitCopyWithIntCustomOpc                      | |i |d   S )Nr   rJ   )r(  r   r   s      r   <lambda>r9    s    b$6I&6I!6Lr   )r(  r)  r*  gradcheck_wrapperr0  r4  r5  r+  )Yr#   r   torch.testingr   #torch.testing._internal.opinfo.corer   r   $torch.testing._internal.common_dtyper   r   rT   ,torch.testing._internal.autograd_function_dbr   r   r	   r
   r   torch.typesr   typingtorch._custom_ops_custom_ops
custom_opsr   	custom_opTupler   r   r&   impl_abstractr)   impl_save_for_backwardr/   impl_backwardr:   r4   r@   rC   rH   rL   intrP   rZ   ra   re   rm   rj   rq   rs   rv   rx   rz   r   r   r   Sequencer   r   r   r   r   r   r   r   r   r   r   r   Listr   r   r   r   r   r   r   r   r   r   r   r  r  r  r&  r2   r3   boolhalfcustom_op_dbrJ   r   r   <module>rO     s+
     % ?      &  23 &  U66>2   4  -.8 /8
 67  8  #""#?@! A! 67 8
 12   F  v   3  ,-D .D 56  7  #""#>? @ 56& 7&
 23 &  s  uVVV-C'D   4  -.
 /
 67m 8m #""#?@& A& 6QefS gS 23 &  v    S  V   4  -.H /H 67 8 #""#?@ A 67 8 56 V     7  01. 2. 9: ;' 78 v  hsm     9  23Nf N 4N ;<)& ) =) #""#DE  F ;<N N =N/
 12 (6"       3  ,-5 .5 56" 7" #""#>?! @! 56 7/ 89   (3-  c  d6l   :  34O 5O
 <=E >E #""#EF G <=H >H.
 AB   8C=  s  uUYZ`UacfUfOg   C  <=\ >\
 EFR GR #""/11 /"E],H,H 12 V  V  F  v   3  ,-) .)V 56	 7	; 99##..3UZZ4 99##--2UZZ4 99##..3UZZ4 99##..3UZZ4 99##11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 $
STr   