U
    <c6Y                  ,   @   s	  U d dl Z d dlmZ d dlmZ d dlmZ d dlZd dl	Z	d dl
mZ d dlmZmZmZ d dlmZmZ d dlmZmZ d d	lmZmZmZmZmZmZmZmZ d d
lm Z m!Z! d dl"m#Z# erd dl$Z%dd Z&dd Z'dd Z(dd Z)eddere%j*j+ndee	j,de	j-difee	j.e	j,ee	j.e	j/e	j,e e&ddd
edderZe#e%j*j0ndee	j.ee	j.e&eee	j1edd de	j.edd difee 2ddde	j3fd fddd!
ed"d#ere%j*j4ndee	j.ee	j.e&ddd$ed%d&ee	j,d'e	j-d(ifere%j*j5ndee	j.e	j,ee	j.e	j,e	j-ddee j6d)d*d+d,fd-	ed.d/d0 d1er^e(ndee	j.e	j,ee	j.e	j/dde'ee j6d2d3ee j6d4d5fd6d0 ed7d0 d8d9d:ed;d<ee	j.e	j/e	j,dddde7d=d>d?ed@dAee	j.ddBddCedDere%j*j8nddEddee	j-dFe	j,dFifee	j.e	j,ee	j.e	j/e	j,ee 2dGdde	j,e	j-gd fdBe)dHedIerte%j*j9nddJdKee	j.dddLedMdNere%j*j:ndee	j.dddOedPere%j*j;nddQee	j1ed dRdifee	j.dddSedTee	j1dUe	j<dVifee	j.dWd0 ee 2dGddfdBdXedYee	j1de	j<dVifee	j.erXe%j*j=nddBdZed[ee	j1de	j<dVifee	j.ere%j*j>nddBdZed\ee	j1de	j<dVifee	j.ere%j*j?nddBdZed]ee	j1de	j<dVifee	j.ere%j*j@nddBdZed^ee	j.dee 2dGd_ee 2dGd`fddBdaedbee	j.dee 2dGd_ee 2dGd`fddBdaedcee	j.dee 2ddee 2dGd_ee 2dGd`fddBdaedeee	j.dee 2ddee 2dGd_ee 2dGd`fddBdaedfee	j.dee 2dGd_ee 2dGd`fddBdaedgee	j.dee 2dGd_ee 2dGd`fddBdaedhee	j.dee 2dGd_ee 2dGd`fddBdaediee	j.dee 2ddee 2dGd_ee 2dGd`fddBdaedjee	j1dUe	j<dVifee	j.ere%j*jAnddBdZedkee	j1dUe	j<dVifee	j.er*e%j*j0nddBdZedlee	j1dUe	j<dVifee	j.er`e%j*jBnddBdZedmee	j1dUe	j<dVifee	j.ere%j*jCnddBdZednee	j1edUdUde	j<edVdUdifee	j.ere%j*jDnddBdZedoee	j1edUdUde	j<edVdUdifee	j.er"e%j*jEnddBdZedpee	j.dee 2ddee 2dGd_ee 2dGd`fddBdaedqee	j.dee 2ddee 2dGd_ee 2dGd`fddBdaedree	j.dee 2ddee 2dGd_ee 2dGd`fddBdaedsee	j.dee 2ddee 2dGd_ee 2dGd`fddBdaedtee	j1edUdUde	j<edVdUdifee	j.dud0 dBdZg#ZFee eGdv< e!dwdYdBeFdxe!dyd[dBeFdxe!dzddBeFdxe!d{ddBeFdxe!d|d"dBeFdxe!d}dtdBeFdxe d~d@ddBeFdgZHee eGd< dS )    N)partial)product)List)make_tensor)precisionOverridetoltoleranceOverride)all_types_andfloating_types)
TEST_SCIPYtorch_to_numpy_dtype_dict)BinaryUfuncInfoDecorateInfoLNumericsFilterOpInfoSSampleInputUnaryUfuncInfo)ElementwiseBinaryPythonRefInfoElementwiseUnaryPythonRefInfo)(np_unary_ufunc_integer_promotion_wrapperc                 k   sj   |o| j tjjk}tt||||d}t|tfV  t|dV  |rf|sf|tf}d|d< t|V  d S )N)dtypedevicerequires_gradexclude_zero r   )optorchspeciali0er   r   r   r   )op_infor   r   r   kwargsr   make_argtr   r   V/tmp/pip-unpacked-wheel-gikjz4vx/torch/testing/_internal/opinfo/definitions/special.pysample_inputs_i0_i1*   s    
r&   c           
      k   sL   t t|||d}ttfdf}d}t||D ]\}}	t|||	fdV  q*d S )N)r   r   r   r   )               )args)r   r   r   r   r   )
r!   r   r   r   r"   r#   Ztensor_shapesnsshapenr   r   r%   sample_inputs_polygamma?   s       r0   c                 C   s2   t t  }| jtjkrtj}tj|| 	|S N)
r   r   Zget_default_dtyper   npdoublescipyr   	polygammaZastype)xr/   Zresult_dtyper   r   r%   reference_polygammaJ   s    r7   c              	   K   sF   | j \}}|rd| j }tttf||||dttd||||dfS )Nr   )r   r   lowr   r   )domainZ_domain_epsr   r   r   )r!   r   r   r   r"   r8   _r   r   r%   sample_inputs_entrX   s,    

        r;   zspecial.i0eZspecial_i0eg333333?T)		aten_nameref
decoratorsdtypesdtypesIfCUDAZbackward_dtypessample_inputs_funcsupports_forward_adsupports_fwgrad_bwgradz
special.i1Z
special_i1g-C6?)ZatolZrtolzIncorrect result!ZTestUnaryUfuncsZtest_reference_numerics_large)r?   )	r<   r=   r?   r@   rA   r>   skipsrC   rB   zspecial.i1eZspecial_i1e)r<   r=   r?   r@   rA   rB   rC   zspecial.ndtrZspecial_ndtrg{Gzt?gMb@?ZTestGradientsZtest_fn_fwgrad_bwgradmeta)Zdevice_type)r<   r>   r=   r?   r@   rB   rC   rD   zspecial.polygammac                 K   s   t jj|| f|S r1   )r   r   r5   )r6   r/   r"   r   r   r%   <lambda>       rF   Zspecial_polygamma_n_0ZTestJitZtest_variant_consistency_jitZTestNormalizeOperatorsZ"test_normalize_operator_exhaustivec                 C   s   ddiddifS )Nr/   r   r   )r   r   inputr   r   r%   rF      rG   c                 C   s   | dk S )N皙?r   r6   r   r   r%   rF      rG   r'   )	conditionZsafe_val)r   Zvariant_test_namer=   r?   r@   rB   rC   rA   rD   Zsample_kwargsZreference_numerics_filterzspecial.xlog1pyZspecial_xlog1pygGz)r8   )r<   r?   promotes_int_to_floatrB   rC   supports_one_python_scalarZrhs_make_tensor_kwargszspecial.zetaZspecial_zetaF)r<   r?   rL   supports_autogradrM   zspecial.entrZspecial_entrrI   zSkipped!)
r=   r<   rB   rC   r>   r?   r@   rD   Zsupports_inplace_autogradrA   zspecial.ndtri)r   r'   Zspecial_ndtri)r=   r9   r<   r?   rB   rC   zspecial.log_ndtrZspecial_log_ndtr)r<   r=   r?   rB   rC   zspecial.erfcxZspecial_erfcxg>)r=   r<   r>   r?   rB   rC   zspecial.airy_aigMbP?gh㈵>c                 C   s   t rtj| d S d S Nr   )r   r4   r   ZairyrJ   r   r   r%   rF   7  rG   )r>   r?   r=   rD   rN   zspecial.bessel_j0)r>   r?   r=   rN   zspecial.bessel_j1zspecial.bessel_y0zspecial.bessel_y1zspecial.chebyshev_polynomial_tZTestCudaFuserOpInfoZTestNNCOpInfo)r?   rL   rD   rM   rN   zspecial.chebyshev_polynomial_uzspecial.chebyshev_polynomial_vz:Skipping - testing takes an unreasonably long time, #79528zspecial.chebyshev_polynomial_wzspecial.hermite_polynomial_hzspecial.hermite_polynomial_hezspecial.laguerre_polynomial_lzspecial.legendre_polynomial_pzspecial.modified_bessel_i0zspecial.modified_bessel_i1zspecial.modified_bessel_k0zspecial.modified_bessel_k1z!special.scaled_modified_bessel_k0z!special.scaled_modified_bessel_k1z&special.shifted_chebyshev_polynomial_tz&special.shifted_chebyshev_polynomial_uz&special.shifted_chebyshev_polynomial_vz&special.shifted_chebyshev_polynomial_wzspecial.spherical_bessel_j0c                 C   s   t rtjd| S d S rO   )r   r4   r   Zspherical_jnrJ   r   r   r%   rF     rG   op_dbz_refs.special.bessel_j0)torch_opinfo_namesupports_nvfuserrP   z_refs.special.bessel_j1z_refs.special.i0ez_refs.special.i1z_refs.special.i1ez!_refs.special.spherical_bessel_j0z_refs.special.zeta)rQ   rM   rR   rP   python_ref_db)IZunittest	functoolsr   	itertoolsr   typingr   Znumpyr2   r   Ztorch.testingr   Z*torch.testing._internal.common_device_typer   r   r   Z$torch.testing._internal.common_dtyper	   r
   Z$torch.testing._internal.common_utilsr   r   Z#torch.testing._internal.opinfo.corer   r   r   r   r   r   r   r   Z#torch.testing._internal.opinfo.refsr   r   Z$torch.testing._internal.opinfo.utilsr   Zscipy.specialr4   r&   r0   r7   r;   r   r    Zbfloat16Zfloat16boolZhalfi1Zfloat32skipZint8Zi1eZndtrZexpectedFailuredictZentrZndtriZlog_ndtrZerfcxZfloat64Zj0Zj1Zy0y1Zi0Zk0Zk1Zk0eZk1erP   __annotations__rS   r   r   r   r%   <module>   sh   (
 
 

   
	 
          			         
 
 
 
				 
 
         	