
    Ph(                        U d Z ddlZddlZddlZddlmZmZmZmZm	Z	 ddl
Z
ddlZej                  j                         Zexr ej                  j                         dk\  Zer ej"                  d      ndZer
 ed       Zn	 ed       Z ed       Z ed	       Z ed
       Z ed       Z ed       Z ed       Z ed       Z ed       Zeed<    ed       Zeed<    ed       Zeed<   exr e Z eed<   er 	 ddl!Z"e"j                  jG                         Z$ndZ$da'd Z(d Z)ejT                  d        Z+ejT                  d%d       Z,d%dZ-d Z.d Z/d Z0d Z1d  Z2d! Z3 e2       Z4 e3       Z5d"ejl                  jn                  dfd#Z8d"ejr                  ejl                  jn                  dfd$Z:esej                  j                         rJ yy# e%$ rZ&dZ$dZY dZ&[&dZ&[&ww xY w)&z>This file is allowed to initialize CUDA context when imported.    N)LazyVal
TEST_NUMBATEST_WITH_ROCM	TEST_CUDA
IS_WINDOWS   zcuda:0c                      t         S N)r        nC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/testing/_internal/common_cuda.py<lambda>r      s    r   c                      t         xrB t        j                  j                  j	                  t        j
                  dt                    S )N      ?device)r   torchbackendscudnnis_acceptabletensorCUDA_DEVICEr   r   r   r   r      s1    !wu~~/C/C/Q/QRWR^R^_ajuRv/w!wr   c                  b    t         r(t        j                  j                  j	                         S dS )Nr   )
TEST_CUDNNr   r   r   versionr   r   r   r   r      s"    zU^^%9%9%A%A%C%XWX%Xr   c                      t         j                  j                         xr! t         j                  j                         dk\  S )N)      r   cudais_availableget_device_capabilityr   r   r   r   r      ,    ejj557hEJJ<\<\<^bh<hhr   c                      t         j                  j                         xr! t         j                  j                         dk\  S )N)   r   r   r   r   r   r   r      r#   r   c                      t         j                  j                         xr! t         j                  j                         dk\  S )N)   r   r   r   r   r   r   r      r#   r   c                      t         j                  j                         xr! t         j                  j                         dk\  S )N)r'   r   r   r   r   r   r   r      r#   r   c                      t         j                  j                         xr! t         j                  j                         dk\  S )N)   r   r   r   r   r   r   r      r#   r   c                      t         j                  j                         xr! t         j                  j                         dk\  S )N)	   r   r   r   r   r   r   r      r#   r   c                  B    t         xr t         xr t         xr t        S r
   )r   r   r   SM80OrLaterr   r   r   r   r      s.    )  ;B^I[  ;Bfpbp  ;B  wB  ;Br   !PLATFORM_SUPPORTS_FLASH_ATTENTIONc                       t         xr t         S r
   )r   r   r   r   r   r   r       s    I<\nJ\<\r   #PLATFORM_SUPPORTS_MEM_EFF_ATTENTIONc                      t         xs t        S r
   )r/   r1   r   r   r   r   r   "   s    :[  ;C  `C  ;Cr   !PLATFORM_SUPPORTS_FUSED_ATTENTIONPLATFORM_SUPPORTS_FUSED_SDPAFc                      t         sJ d       t        sIt        t        j                  j                               D ]  } t        j                  dd|          day y )Nz?CUDA must be available when calling initialize_cuda_context_rng   zcuda:r   T)r   __cuda_ctx_rng_initializedranger   r    device_countrandn)is    r   initialize_cuda_context_rngr<   6   sN    WWW9%uzz..01AKKE!+. 2%)"	 &r   c                  z   t         j                  j                         rt         j                  j                  yt         j                  j	                  t         j                  j                               j                  dk  ryt        t         j                  j                  j                  d      d         dk  ryy)NFr*   .r      T)	r   r    r!   r   get_device_propertiescurrent_devicemajorintsplitr   r   r   tf32_is_not_fp32rE   C   s~    ::""$(:(:(Bzz''

(A(A(CDJJQN
5==##C(+,r1r   c               #     K   t         j                  j                  j                  j                  } 	 dt         j                  j                  j                  _        t         j                  j
                  j                  d d d d      5  d  d d d        | t         j                  j                  j                  _        y # 1 sw Y   3xY w# | t         j                  j                  j                  _        w xY ww)NFenabled	benchmarkdeterministic
allow_tf32)r   r   r    matmulrK   r   flags)old_allow_tf32_matmuls    r   tf32_offrO   M   s     !NN//66AAF05""-^^!!''TXej'k l 1F""- lk 1F""-s5   /C9AC B?C *C9?CC +C66C9c              #   8  K   t         j                  j                  j                  j                  }| j
                  }	 dt         j                  j                  j                  _        || _        t         j                  j                  j                  d d d d      5  d  d d d        |t         j                  j                  j                  _        || _        y # 1 sw Y   :xY w# |t         j                  j                  j                  _        || _        w xY ww)NTrG   )r   r   r    rL   rK   	precisionr   rM   )selftf32_precisionrN   old_precisions       r   tf32_onrU   X   s     !NN//66AANNM'04""-'^^!!''TXei'j k 1F""-&	 kj 1F""-&s5   ;DAC% C C% (1DC"C% %2DDc                 (     d  fdfd}|S )Nc                 P    t               5   |        d d d        y # 1 sw Y   y xY wr
   rO   )rR   function_calls     r   with_tf32_disabledz+tf32_on_and_off.<locals>.with_tf32_disabled   s    ZO ZZs   %c                 V    t        |       5   |        d d d        y # 1 sw Y   y xY wr
   )rU   )rR   rY   rS   s     r   with_tf32_enabledz*tf32_on_and_off.<locals>.with_tf32_enabled   s    T>*O +**s   (c                      t        j                         j                  }t        |j	                               t        j                          fd       }|S )Nc                  X   t        |       D ]
  \  }}||<    t               }dv r)|xr% t        j                  d         j                  dk(  }dv r)|xr% d   t        j
                  t        j                  hv }|r! d   fd        d   fd       y  di  y )Nr   r    dtyperR   c                        di S Nr   r   fkwargss   r   r   zCtf32_on_and_off.<locals>.wrapper.<locals>.wrapped.<locals>.<lambda>   s    1;v;r   c                        di S ra   r   rb   s   r   r   zCtf32_on_and_off.<locals>.wrapper.<locals>.wrapped.<locals>.<lambda>   s    !+f+r   r   )ziprE   r   r   typefloat32	complex64)	argsrd   kvcond	arg_namesrc   rZ   r\   s	    `   r   wrappedz1tf32_on_and_off.<locals>.wrapper.<locals>.wrapped   s    It,1q	 -#%D6!OfX.>!?!D!D!N& UU]]EOO4T!T"6&>3FG!&.2EFFr   )inspect	signature
parameterstuplekeys	functoolswraps)rc   paramsro   rn   rZ   r\   s   `  @r   wrapperz tf32_on_and_off.<locals>.wrapper   sK    ""1%00&++-(				 
	 r   r   )rS   rx   rZ   r\   s   ` @@r   tf32_on_and_offry      s    ( Nr   c                 B     t        j                          fd       }|S )Nc                  T    t               5   | i |cd d d        S # 1 sw Y   y xY wr
   rX   )rj   rd   rc   s     r   ro   zwith_tf32_off.<locals>.wrapped   s    Zd%f% ZZs   ')ru   rv   )rc   ro   s   ` r   with_tf32_offr|      s%    __Q& & Nr   c                  ^   dt         j                  j                         vryt         j                  j                         j                  d      } t         j                  j                         | t	        d      z   d  j                  d      d   }t        d |j                  d      D              S )NMagmar   r   zMagma 
r   c              3   2   K   | ]  }t        |        y wr
   rC   .0xs     r   	<genexpr>z%_get_magma_version.<locals>.<genexpr>   s     8!7AQ!7   r>   )r   
__config__showfindlenrD   rs   )positionversion_strs     r   _get_magma_versionr      s    e&&++--$$&++H5H""'')(S]*B*CDJJ4PQRSK8!2!23!7888r   c                      t         j                  j                  yt        t         j                  j                        } t	        d | j                  d      D              S )Nr   c              3   2   K   | ]  }t        |        y wr
   r   r   s     r   r   z*_get_torch_cuda_version.<locals>.<genexpr>        9!8AQ!8r   r>   )r   r   r    strrs   rD   )cuda_versions    r   _get_torch_cuda_versionr      sE    }}!u}}))*L9!3!3C!8999r   c                      t         syt        t        j                  j                        } | j                  d      d   } t        d | j                  d      D              S )Nr   -r   c              3   2   K   | ]  }t        |        y wr
   r   r   s     r   r   z*_get_torch_rocm_version.<locals>.<genexpr>   r   r   r>   r   r   r   r   hiprD   rs   )rocm_versions    r   _get_torch_rocm_versionr      sM    u}}(()L%%c*1-L9!3!3C!8999r   c                      t          S r
   )r   r   r   r   !_check_cusparse_generic_availabler      s    r   c                      t         syt        t        j                  j                        } | j                  d      d   } t        d | j                  d      D              }|d u xs |dk   S )NFr   r   c              3   2   K   | ]  }t        |        y wr
   r   r   s     r   r   z5_check_hipsparse_generic_available.<locals>.<genexpr>   s     G/F!s1v/Fr   r>   )r   r6   r   )r   rocm_version_tuples     r   "_check_hipsparse_generic_availabler      sf    u}}(()L%%c*1-LG|/A/A#/FGG"d*I.@6.IJJr   r    c                    t         j                  j                  t         j                  j                  dd      t         j                  j                  dd            j	                  |       }t         j                  j                  t         j                  j                  dd      t         j                  j                  dd            j	                  |       }t        j
                         5  t        |j                         |j                               D ]  \  }}|j                  |        	 d d d        ddi}||j                  |        ||j                         fi |} ||j                         fi |}	||||	fS # 1 sw Y   TxY w)Nr*   r   lrr   )
r   nn
SequentialLineartono_gradrf   rr   copy_update)
r   optimizer_ctoroptimizer_kwargsmod_controlmod_scalingcsrd   opt_controlopt_scalings
             r   !_create_scaling_models_optimizersr      s2    ((%%ehhooa&;UXX__QPQ=RSVV^dVeK((%%ehhooa&;UXX__QPQ=RSVV^dVeK	..0+2H2H2JKDAqGGAJ L 
 C[F#&' !7!7!9DVDK !7!7!9DVDK[+== 
s   -AFFc           	         t        j                  d||       t        j                  d||       ft        j                  d||       t        j                  d||       ft        j                  d||       t        j                  d||       ft        j                  d||       t        j                  d||       fg}t         j                  j                         j	                         }d}t        | ||      |||fz   S )N)r*   r*   )r_   r   r   )r   r   r   )r   r:   r   MSELossr    r   )r   r_   r   r   dataloss_fn	skip_iters          r   _create_scaling_caser      s    [[uV<ekk&X]fl>mn[[uV<ekk&X]fl>mn[[uV<ekk&X]fl>mn[[uV<ekk&X]fl>mnpD
 hh %%'GI,nGW	w	"# #r   )gh㈵>);__doc__ru   r   
torch.cuda$torch.testing._internal.common_utilsr   r   r   r   r   rp   
contextlibr    is_initialized"CUDA_ALREADY_INITIALIZED_ON_IMPORTr9   TEST_MULTIGPUr   r   r   TEST_CUDNN_VERSIONSM53OrLaterSM60OrLaterSM70OrLaterSM75OrLaterr.   SM90OrLaterr/   bool__annotations__r1   r3   r4   
numba.cudanumbar!   TEST_NUMBA_CUDA	Exceptioner7   r<   rE   contextmanagerrO   rU   ry   r|   r   r   r   r   r   TEST_CUSPARSE_GENERICTEST_HIPSPARSE_GENERICoptimSGDr   floatr   r   r   r   <module>r      s=   E    k k   &+ZZ%>%>%@ " <ejj5571<(1lell8$t*+JwxJXY hihihihihihi*1  3B  +C !4  C,34\,] #T ]*1  3C  +D !4  D%.%E~3E d E**113
 O # * F F 
' 
'RJ9::K :; ;=  .4EKKOOfj >$ !'ekk%++//lp #  *zz((**** *Y  
s   G G*G%%G*