§
    ƒÛg   ã                   ó4  — d dl mZ d dl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mZ d dlmZ d dlZd dlmZmZmZ d dlZe G d	„ d
¦  «        ¦   «         Z ed¦  «         G d„ de¦  «        ¦   «         Ze dk    r ej!        ¦   «          dS dS )é    )ÚList)Ú	dataclassÚfield)ÚcudaÚfloat32)Úcompile_ptx_for_current_deviceÚcompile_ptx)	ÚcosÚsinÚtanÚexpÚlogÚlog10Úlog2ÚpowÚtanh)ÚtruedivN)ÚCUDATestCaseÚskip_on_cudasimÚskip_unless_cc_75c                   óÜ   — e Zd ZU  ee¬¦  «        Zee         ed<    ee¬¦  «        Z	ee         ed<    ee¬¦  «        Z
ee         ed<    ee¬¦  «        Zee         ed<   dededefd	„Zd
S )ÚFastMathCriterion)Údefault_factoryÚfast_expectedÚfast_unexpectedÚprec_expectedÚprec_unexpectedÚtestÚfastÚprecc                 ó¢  ‡‡— |                      t          ˆfd„| j        D ¦   «         ¦  «        ¦  «         |                      t          ˆfd„| j        D ¦   «         ¦  «        ¦  «         |                      t          ˆfd„| j        D ¦   «         ¦  «        ¦  «         |                      t          ˆfd„| j        D ¦   «         ¦  «        ¦  «         d S )Nc              3   ó    •K  — | ]}|‰v V — Œ	d S ©N© ©Ú.0Úir   s     €ú[/granary/edev/quantum/lib/python3.11/site-packages/numba/cuda/tests/cudapy/test_fastmath.pyú	<genexpr>z*FastMathCriterion.check.<locals>.<genexpr>   ó'   øè è € ÐBÐB¨!˜A ˜IÐBÐBÐBÐBÐBÐBó    c              3   ó    •K  — | ]}|‰vV — Œ	d S r#   r$   r%   s     €r(   r)   z*FastMathCriterion.check.<locals>.<genexpr>   ó'   øè è € ÐHÐH¨a˜A T˜MÐHÐHÐHÐHÐHÐHr+   c              3   ó    •K  — | ]}|‰v V — Œ	d S r#   r$   ©r&   r'   r    s     €r(   r)   z*FastMathCriterion.check.<locals>.<genexpr>   r*   r+   c              3   ó    •K  — | ]}|‰vV — Œ	d S r#   r$   r/   s     €r(   r)   z*FastMathCriterion.check.<locals>.<genexpr>   r-   r+   )Ú
assertTrueÚallr   r   r   r   )Úselfr   r   r    s     ``r(   ÚcheckzFastMathCriterion.check   sÒ   øø€ Ø�Š�ÐBÐBÐBÐB¨tÔ/AÐBÑBÔBÑBÔBÑCÔCÐCØ�Š�ÐHÐHÐHÐH°4Ô3GÐHÑHÔHÑHÔHÑIÔIÐIØ�Š�ÐBÐBÐBÐB¨tÔ/AÐBÑBÔBÑBÔBÑCÔCÐCØ�Š�ÐHÐHÐHÐH°4Ô3GÐHÑHÔHÑHÔHÑIÔIÐIÐIÐIr+   N)Ú__name__Ú
__module__Ú__qualname__r   Úlistr   r   ÚstrÚ__annotations__r   r   r   r   r4   r$   r+   r(   r   r      sÌ   € € € € € € à$˜u°TÐ:Ñ:Ô:€M�4˜”9Ð:Ð:Ñ:Ø!& °tÐ!<Ñ!<Ô!<€O�T˜#”YÐ<Ð<Ñ<Ø$˜u°TÐ:Ñ:Ô:€M�4˜”9Ð:Ð:Ñ:Ø!& °tÐ!<Ñ!<Ô!<€O�T˜#”YÐ<Ð<Ñ<ðJ˜,ð J¨cð J¸ð Jð Jð Jð Jð Jð Jr+   r   z4Fastmath and PTX inspection not available on cudasimc                   ó¤   — e Zd Zd„ Zdefd„Zdefd„Zd„ Zd„ Zd„ Z	e
d„ ¦   «         Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zej        d„ ¦   «         ZdS )ÚTestFastMathOptionc                 ó‚  —  t          j        ||d¬¦  «        |¦  «        } t          j        ||¬¦  «        |¦  «        }|                     | |                     |¦  «        |                     |¦  «        ¦  «         t	          |||d¬¦  «        \  }}t	          |||¬¦  «        \  }	}|                     | ||	¦  «         d S )NT)ÚdeviceÚfastmath©r>   )r   Újitr4   Úinspect_asmr   )
r3   ÚpyfuncÚsigr>   Ú	criterionÚfastverÚprecverÚfastptxÚ_Úprecptxs
             r(   Ú_test_fast_math_commonz)TestFastMathOption._test_fast_math_common   sÝ   € ð >•$”(˜3 v¸Ð=Ñ=Ô=¸fÑEÔEˆØ.•$”(˜3 vÐ.Ñ.Ô.¨vÑ6Ô6ˆà�ŠØ�'×%Ò% cÑ*Ô*¨G×,?Ò,?ÀÑ,DÔ,Dñ	
ô 	
ð 	
õ
 4Ø�C °ð
ñ 
ô 
‰
ˆ�õ 4Ø�C ð
ñ 
ô 
‰
ˆ�ð 	�Š˜˜g wÑ/Ô/Ð/Ð/Ð/r+   rE   c                 ó¶   ‡— ˆfd„}ˆfd„}|                       |t          d d d…         t          fd|¬¦  «         |                       |t          fd|¬¦  «         d S )Nc                 ó$   •—  ‰|¦  «        | d<   d S ©Nr   r$   )ÚrÚxÚops     €r(   Úkernelz8TestFastMathOption._test_fast_math_unary.<locals>.kernel2   s   ø€ Ø�2�a‘5”5ˆAˆa‰DˆDˆDr+   c                 ó   •—  ‰| ¦  «        S r#   r$   )rP   rQ   s    €r(   Údevice_functionzATestFastMathOption._test_fast_math_unary.<locals>.device_function5   s   ø€ Ø�2�a‘5”5ˆLr+   é   F©r>   rE   T©rK   r   )r3   rQ   rE   rR   rT   s    `   r(   Ú_test_fast_math_unaryz(TestFastMathOption._test_fast_math_unary1   s    ø€ ð	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	×#Ò#Ø•W˜S˜S˜q˜S”\¥7Ð+°EÀYð 	$ñ 	
ô 	
ð 	
ð 	×#Ò#Ø�g˜Z°À	ð 	$ñ 	
ô 	
ð 	
ð 	
ð 	
r+   c                 óÎ   ‡— ˆfd„}ˆfd„}|                       |t          d d d…         t          t          fd|¬¦  «         |                       |t          t          fd|¬¦  «         d S )Nc                 ó&   •—  ‰||¦  «        | d<   d S rN   r$   )rO   rP   ÚyrQ   s      €r(   rR   z9TestFastMathOption._test_fast_math_binary.<locals>.kernel@   s   ø€ Ø�2�a˜‘8”8ˆAˆa‰DˆDˆDr+   c                 ó   •—  ‰| |¦  «        S r#   r$   )rP   r[   rQ   s     €r(   r>   z9TestFastMathOption._test_fast_math_binary.<locals>.deviceC   s   ø€ Ø�2�a˜‘8”8ˆOr+   rU   FrV   TrW   )r3   rQ   rE   rR   r>   s    `   r(   Ú_test_fast_math_binaryz)TestFastMathOption._test_fast_math_binary?   s¦   ø€ ð	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	×#Ò#ØÝ�S�S�q�SŒ\�7¥GÐ,°UÀið 	$ñ 	
ô 	
ð 	
ð 	×#Ò#Ø•W�gÐ&¨t¸yð 	$ñ 	
ô 	
ð 	
ð 	
ð 	
r+   c                 ó^   — |                       t          t          dgdg¬¦  «        ¦  «         d S )Núcos.approx.ftz.f32 ©r   r   )rX   r
   r   ©r3   s    r(   Ú	test_cosfzTestFastMathOption.test_cosfN   óE   € Ø×"Ò"ÝÝØ4Ð5Ø!6Ð 7ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r+   c                 ó^   — |                       t          t          dgdg¬¦  «        ¦  «         d S )Núsin.approx.ftz.f32 r`   )rX   r   r   ra   s    r(   Ú	test_sinfzTestFastMathOption.test_sinfW   rc   r+   c                 ó`   — |                       t          t          g d¢dg¬¦  «        ¦  «         d S )N)re   r_   údiv.approx.ftz.f32 re   r`   )rX   r   r   ra   s    r(   Ú	test_tanfzTestFastMathOption.test_tanf`   sP   € Ø×"Ò"ÝÝð -ð -ð -ð !6Ð6ð	8ñ 8ô 8ñ	
ô 	
ð 	
ð 	
ð 	
r+   c                 ó^   — |                       t          t          dgdg¬¦  «        ¦  «         d S )Nútanh.approx.f32 r`   )rX   r   r   ra   s    r(   Ú
test_tanhfzTestFastMathOption.test_tanhfj   sG   € ð 	×"Ò"ÝÝØ1Ð2Ø!3Ð 4ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r+   c                 ó–   ‡ ‡— d„ Šˆ ˆfd„} |dt          dgdg¬¦  «        ¬¦  «          |dt          dd	gdg¬¦  «        ¬¦  «         d S )
Nc                 ó*   — t          |¦  «        | d<   d S rN   )r   )rO   rP   s     r(   Útanh_kernelz>TestFastMathOption.test_tanhf_compile_ptx.<locals>.tanh_kernelv   s   € Ý˜‘7”7ˆAˆa‰DˆDˆDr+   c                 óà   •— t          ‰t          d d d…         t          fd| ¬¦  «        \  }}t          ‰t          d d d…         t          f| ¬¦  «        \  }}|                     ‰||¦  «         d S )NrU   T)r?   Úcc)rq   )r	   r   r4   )rq   rE   rH   rI   rJ   r3   ro   s        €€r(   Útanh_common_testzCTestFastMathOption.test_tanhf_compile_ptx.<locals>.tanh_common_testy   s}   ø€ Ý$ [µ7¸3¸3¸Q¸3´<ÅÐ2IØ.2°rð;ñ ;ô ;‰JˆG�Qå$ [µ7¸3¸3¸Q¸3´<ÅÐ2IØ(*ð,ñ ,ô ,‰JˆG�Qà�OŠO˜D '¨7Ñ3Ô3Ð3Ð3Ð3r+   )é   é   rk   r`   )rq   rE   )rs   r   zex2.approx.ftz.f32 zrcp.approx.ftz.f32 )r   )r3   rr   ro   s   ` @r(   Útest_tanhf_compile_ptxz)TestFastMathOption.test_tanhf_compile_ptxu   s¸   øø€ ð	ð 	ð 	ð	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	Ð˜FÕ.?Ø-Ð.Ø/Ð0ð/
ñ /
ô /
ð 	ñ 	ô 	ð 	ð
 	Ð˜FÝ#4Ø0Ø0ð2à/Ð0ð$2ñ $2ô $2ð	3ñ 	3ô 	3ð 	3ð 	3ð 	3r+   c                 ó^   — |                       t          t          dgdg¬¦  «        ¦  «         d S )Nzfma.rn.f32 )r   r   )rX   r   r   ra   s    r(   Ú	test_expfzTestFastMathOption.test_expf‹   sC   € Ø×"Ò"ÝÝØ!. Ø,˜oðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r+   c                 ó`   — |                       t          t          ddgdg¬¦  «        ¦  «         d S )Núlg2.approx.ftz.f32 Ú
0f3F317218r`   )rX   r   r   ra   s    r(   Ú	test_logfzTestFastMathOption.test_logf”   sG   € à×"Ò"ÝÕ"Ø4°lÐCØ!6Ð 7ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r+   c                 ó`   — |                       t          t          ddgdg¬¦  «        ¦  «         d S )Nry   Ú
0f3E9A209Br`   )rX   r   r   ra   s    r(   Útest_log10fzTestFastMathOption.test_log10f�   sG   € à×"Ò"ÝÕ$Ø4°lÐCØ!6Ð 7ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r+   c                 ó^   — |                       t          t          dgdg¬¦  «        ¦  «         d S ©Nry   r`   )rX   r   r   ra   s    r(   Ú
test_log2fzTestFastMathOption.test_log2f¦   sE   € Ø×"Ò"ÝÕ#Ø4Ð5Ø!6Ð 7ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r+   c                 ó^   — |                       t          t          dgdg¬¦  «        ¦  «         d S r€   )r]   r   r   ra   s    r(   Ú	test_powfzTestFastMathOption.test_powf®   sE   € Ø×#Ò#ÝÕ"Ø4Ð5Ø!6Ð 7ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r+   c           	      óf   — |                       t          t          dgdgdgdg¬¦  «        ¦  «         d S )Nrh   ú
div.rn.f32)r   r   r   r   )r]   r   r   ra   s    r(   Ú	test_divfzTestFastMathOption.test_divf¶   sO   € Ø×#Ò#ÝÕ&Ø4Ð5Ø!- Ø+˜nØ!6Ð 7ð	ñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r+   c                 ó  — d„ }t           d d d…         t           t           f} t          j        |dd¬¦  «        |¦  «        } t          j        |d¬¦  «        |¦  «        }d}t          j        |t          j         ¬¦  «        }|                      t          ¦  «        5   |d|f         |dd	¦  «         d d d ¦  «         n# 1 swxY w Y   	  |d|f         |dd	¦  «         d S # t          $ r |                      d
¦  «         Y d S w xY w)Nc                 ó   — ||z  | d<   d S rN   r$   )rO   rP   r[   s      r(   Úf10z3TestFastMathOption.test_divf_exception.<locals>.f10Á   s   € Ø�q‘5ˆAˆa‰DˆDˆDr+   rU   T)r?   Údebug)rŠ   é
   )Údtypeg      $@g        z5Divide in fastmath should not throw ZeroDivisionError)r   r   rA   ÚnpÚemptyÚassertRaisesÚZeroDivisionErrorÚfail)r3   r‰   rD   rF   rG   ÚnelemÚarys          r(   Útest_divf_exceptionz&TestFastMathOption.test_divf_exceptionÀ   sm  € ð	ð 	ð 	õ �s�s˜�sŒ|�W¥gÐ.ˆØ:•$”(˜3¨°TÐ:Ñ:Ô:¸3Ñ?Ô?ˆØ+•$”(˜3 dÐ+Ñ+Ô+¨CÑ0Ô0ˆØˆÝŒh�u¥B¤JÐ/Ñ/Ô/ˆØ×ÒÕ0Ñ1Ô1ð 	.ð 	.ØˆG�A�u�HÔ˜c 4¨Ñ-Ô-Ð-ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð	OØˆG�A�u�HÔ˜c 4¨Ñ-Ô-Ð-Ð-Ð-øÝ ð 	Oð 	Oð 	OØ�IŠIÐMÑNÔNÐNÐNÐNÐNð	Oøøøs$   ÂB>Â>CÃCÃ
C! Ã!DÄDc                 ó>  ‡— t          j        dd¬¦  «        d„ ¦   «         Šˆfd„}t          d d d…         t          f} t          j        |d¬¦  «        |¦  «        } t          j        |¦  «        |¦  «        }|                      d|                     |¦  «        ¦  «         |                      d	|                     |¦  «        ¦  «         |                      d|                     |¦  «        ¦  «         |                      d
|                     |¦  «        ¦  «         d S )Nzfloat32(float32, float32)Tr@   c                 ó   — | |z  S r#   r$   )ÚaÚbs     r(   Úfooz@TestFastMathOption.test_device_fastmath_propagation.<locals>.fooÖ   s   € à�q‘5ˆLr+   c                 óh   •— t          j        d¦  «        }|| j        k     r ‰||¦  «        | |<   d S d S )NrU   )r   ÚgridÚsize)ÚarrÚvalr'   r™   s      €r(   Úbarz@TestFastMathOption.test_device_fastmath_propagation.<locals>.barÚ   s9   ø€ Ý”	˜!‘”ˆAØ�3”8Š|ˆ|Ø˜˜Q ™œ��A‘��ð ˆ|r+   rU   )r?   zdiv.approx.f32r…   zdiv.full.f32)r   rA   r   ÚassertInrB   ÚassertNotIn)r3   rŸ   rD   rF   rG   r™   s        @r(   Ú test_device_fastmath_propagationz3TestFastMathOption.test_device_fastmath_propagationÑ   s+  ø€ õ
 
ŒÐ-°dÐ	;Ñ	;Ô	;ð	ð 	ñ 
<Ô	;ð	ð	%ð 	%ð 	%ð 	%ð 	%õ
 �s�s˜�sŒ|�WÐ%ˆØ.•$”(˜3¨Ð.Ñ.Ô.¨sÑ3Ô3ˆØ•$”(˜3‘-”- Ñ$Ô$ˆð 	�ŠÐ&¨×(;Ò(;¸CÑ(@Ô(@ÑAÔAÐAð 	�Š�l G×$7Ò$7¸Ñ$<Ô$<Ñ=Ô=Ð=Ø×ÒÐ)¨7×+>Ò+>¸sÑ+CÔ+CÑDÔDÐDØ×Ò˜¨×)<Ò)<¸SÑ)AÔ)AÑBÔBÐBÐBÐBr+   N)r5   r6   r7   rK   r   rX   r]   rb   rf   ri   r   rl   ru   rw   r{   r~   r�   rƒ   r†   r”   ÚunittestÚexpectedFailurer¢   r$   r+   r(   r<   r<      sC  € € € € € ð0ð 0ð 0ð(
Ð3Dð 
ð 
ð 
ð 
ð
Ð4Eð 
ð 
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð ð
ð 
ñ Ôð
ð3ð 3ð 3ð,
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ðOð Oð Oð" ÔðCð Cñ ÔðCð Cð Cr+   r<   Ú__main__)"Útypingr   Údataclassesr   r   Únumbar   r   Únumba.cuda.compilerr   r	   Úmathr
   r   r   r   r   r   r   r   r   Úoperatorr   Únumpyr�   Únumba.cuda.testingr   r   r   r£   r   r<   r5   Úmainr$   r+   r(   ú<module>r¯      s°  ðØ Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ð Ð Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð ð3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3à €€€ð ð
Jð 
Jð 
Jð 
Jð 
Jñ 
Jô 
Jñ „ð
Jð €ÐGÑHÔHðPCð PCð PCð PCð PC˜ñ PCô PCñ IÔHðPCðf ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr+   