§
    ƒÛgª:  ã                   ó6  — d dl Zd dlm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mZmZ d dlZd dlZd dlmZ d dlmZ efd	„Z ed
¦  «         G d„ de¦  «        ¦   «         Z ed
¦  «         G d„ de¦  «        ¦   «         Zedk    r ej        ¦   «          dS dS )é    N)Ú
namedtuple)ÚvoidÚint32Úfloat32Úfloat64)Úguvectorize)Úcuda)Úskip_on_cudasimÚCUDATestCase)ÚNumbaPerformanceWarning)Úoverride_configc           
      ó¤   — t          t          | d d …d d …f         | d d …d d …f         | d d …d d …f         ¦  «        gdd¬¦  «        d„ ¦   «         }|S )Nz(m,n),(n,p)->(m,p)r	   ©Útargetc           
      óò   — | j         \  }}|j         \  }}t          |¦  «        D ]R}t          |¦  «        D ]@}d|||f<   t          |¦  «        D ]'}|||fxx         | ||f         |||f         z  z  cc<   Œ(ŒAŒSd S ©Nr   ©ÚshapeÚrange)	ÚAÚBÚCÚmÚnÚpÚiÚjÚks	            úY/granary/edev/quantum/lib/python3.11/site-packages/numba/cuda/tests/cudapy/test_gufunc.pyÚ
matmulcorez*_get_matmulcore_gufunc.<locals>.matmulcore   s«   € ð Œw‰ˆˆ1ØŒw‰ˆˆ1Ý�q‘”ð 	1ð 	1ˆAÝ˜1‘X”Xð 1ð 1�Ø��!�Q�$‘Ý˜q™œð 1ð 1�AØ�a˜�d�G�G”G˜q  A œw¨¨1¨a¨4¬Ñ0Ñ0�G�G‘G�Gð1ð1ð	1ð 	1ó    )r   r   )Údtyper    s     r   Ú_get_matmulcore_gufuncr#      s|   € Ý•$�u˜Q˜Q˜Q   ˜T”{ E¨!¨!¨!¨Q¨Q¨Q¨$¤K°°q°q°q¸!¸!¸!°t´Ñ=Ô=Ð>Ø%Øð ñ  ô  ð1ð 1ñ ô  ð1ð Ðr!   z&ufunc API unsupported in the simulatorc                   ó’   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestCUDAGufuncc                 ó¤  — t          ¦   «         }d}t          j        |dz  dz  t          j        ¬¦  «                             |dd¦  «        }t          j        |dz  dz  t          j        ¬¦  «                             |dd¦  «        } |||¦  «        }t          j        ||¦  «        }|                      t          j        ||¦  «        ¦  «         d S ©Né   é   ©r"   é   ©r#   ÚnpÚaranger   ÚreshapeÚmatmulÚ
assertTrueÚallclose©ÚselfÚgufuncÚ	matrix_ctr   r   r   ÚGolds          r   Útest_gufunc_smallz TestCUDAGufunc.test_gufunc_small!   sÆ   € å'Ñ)Ô)ˆàˆ	ÝŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaØCDñFô FˆåŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaØCDñFô Fˆð ˆF�1�a‰LŒLˆÝŒy˜˜A‰ŒˆØ�Š�œ A tÑ,Ô,Ñ-Ô-Ð-Ð-Ð-r!   c                 óð  — t          ¦   «         }d}t          j        |dz  dz  t          j        ¬¦  «                             |dd¦  «        }t          j        |dz  dz  t          j        ¬¦  «                             |dd¦  «        }t          j        |¦  «        } |||¦  «                             ¦   «         }t          j        ||¦  «        }|  	                    t          j
        ||¦  «        ¦  «         d S r'   )r#   r-   r.   r   r/   r	   Ú	to_deviceÚcopy_to_hostr0   r1   r2   )r4   r5   r6   r   r   ÚdBr   r7   s           r   Útest_gufunc_auto_transferz(TestCUDAGufunc.test_gufunc_auto_transfer/   sá   € å'Ñ)Ô)ˆàˆ	ÝŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaØCDñFô FˆåŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaØCDñFô Fˆõ Œ^˜AÑÔˆàˆF�1�b‰MŒM×&Ò&Ñ(Ô(ˆÝŒy˜˜A‰ŒˆØ�Š�œ A tÑ,Ô,Ñ-Ô-Ð-Ð-Ð-r!   c                 ó¤  — t          ¦   «         }d}t          j        |dz  dz  t          j        ¬¦  «                             |dd¦  «        }t          j        |dz  dz  t          j        ¬¦  «                             |dd¦  «        } |||¦  «        }t          j        ||¦  «        }|                      t          j        ||¦  «        ¦  «         d S )Néé  r(   r)   r*   r+   r,   r3   s          r   Útest_gufunczTestCUDAGufunc.test_gufunc?   sÆ   € å'Ñ)Ô)ˆàˆ	ÝŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaØCDñFô FˆåŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaØCDñFô Fˆð ˆF�1�a‰LŒLˆÝŒy˜˜A‰ŒˆØ�Š�œ A tÑ,Ô,Ñ-Ô-Ð-Ð-Ð-r!   c                 ó¨  — t          ¦   «         }d}t          j        |dz  dz  t          j        ¬¦  «                             dddd¦  «        }t          j        |dz  dz  t          j        ¬¦  «                             dddd¦  «        } |||¦  «        }t          j        ||¦  «        }|                      t          j        ||¦  «        ¦  «         d S )Néd   r(   r)   r*   é   r+   r,   r3   s          r   Útest_gufunc_hidimz TestCUDAGufunc.test_gufunc_hidimM   sº   € å'Ñ)Ô)ˆàˆ	ÝŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ1ÀbÈ!ÈQÑOÔOˆÝŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ1ÀbÈ!ÈQÑOÔOˆàˆF�1�a‰LŒLˆÝŒy˜˜A‰ŒˆØ�Š�œ A tÑ,Ô,Ñ-Ô-Ð-Ð-Ð-r!   c                 ó²  — t          t          ¬¦  «        }t          j                             ddd¦  «        }t          j                             dd¦  «        }t          j        ||¦  «        } |||¦  «        }t          j                             ||¦  «          ||t          j        |d¦  «        ¦  «        }t          j                             ||¦  «         d S )Nr*   é
   é   )rF   é   rH   )	r#   r   r-   ÚrandomÚrandnr0   ÚtestingÚassert_allcloseÚtile)r4   r5   ÚXÚYÚgoldÚres1Úres2s          r   Útest_gufunc_new_axisz#TestCUDAGufunc.test_gufunc_new_axisY   s¯   € å'­gÐ6Ñ6Ô6ˆåŒI�OŠO˜B  1Ñ%Ô%ˆÝŒI�OŠO˜A˜qÑ!Ô!ˆåŒy˜˜A‰Œˆàˆv�a˜‰|Œ|ˆÝ
Œ
×"Ò" 4¨Ñ.Ô.Ð.àˆv�a�œ  JÑ/Ô/Ñ0Ô0ˆÝ
Œ
×"Ò" 4¨Ñ.Ô.Ð.Ð.Ð.r!   c                 ó°  — t          ¦   «         }d}t          j        |dz  dz  t          j        ¬¦  «                             |dd¦  «        }t          j        |dz  dz  t          j        ¬¦  «                             |dd¦  «        }t          j        ¦   «         }t          j        ||¦  «        }t          j        ||¦  «        }t          j        d|j	        |¬¦  «        } |||||¬¦  «        }| 
                    |¬	¦  «        }	|                     ¦   «          t          j        ||¦  «        }
|                      t          j        |	|
¦  «        ¦  «         d S )
Nr?   r(   r)   r*   r+   )r?   r(   r+   )r   r"   Ústream)ÚoutrU   )rU   )r#   r-   r.   r   r/   r	   rU   r:   Údevice_arrayr"   r;   Úsynchronizer0   r1   r2   )r4   r5   r6   r   r   rU   ÚdAr<   ÚdCr   r7   s              r   Útest_gufunc_streamz!TestCUDAGufunc.test_gufunc_streamh   s<  € å'Ñ)Ô)ˆð ˆ	ÝŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaØCDñFô FˆåŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaØCDñFô Fˆõ ”‘”ˆÝŒ^˜A˜vÑ&Ô&ˆÝŒ^˜A˜vÑ&Ô&ˆåÔ \¸¼ÈÐPÑPÔPˆØˆV�B˜ ¨6Ð2Ñ2Ô2ˆØ�OŠO 6ˆOÑ*Ô*ˆØ×ÒÑÔÐåŒy˜˜A‰Œˆà�Š�œ A tÑ,Ô,Ñ-Ô-Ð-Ð-Ð-r!   c                 óV  — t          t          t          d d …         t          d d …         ¦  «        gdd¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «        dz   }t          j        |¦  «        } |||¬¦  «         t          j                             ||¦  «         d S )	Nú(x)->(x)r	   r   c                 óJ   — t          |j        ¦  «        D ]}| |         ||<   Œd S ©N©r   Úsize©r   r   r   s      r   Úcopyz&TestCUDAGufunc.test_copy.<locals>.copy‚   ó4   € õ ˜1œ6‘]”]ð ð �Ø˜”t��!‘�ðð r!   rF   r*   rH   ©rV   ©r   r   r   r-   r.   Ú
zeros_likerK   rL   ©r4   rc   r   r   s       r   Ú	test_copyzTestCUDAGufunc.test_copy€   s­   € å	•d�7 1 1 1œ:¥w¨q¨q¨q¤zÑ2Ô2Ð3ØØ"ð
$ñ 
$ô 
$ð	ð 	ñ
$ô 
$ð	õ ŒI�b¥¤
Ð+Ñ+Ô+¨aÑ/ˆÝŒM˜!ÑÔˆØˆˆQ�Aˆ‰ŒˆÝ
Œ
×"Ò" 1 aÑ(Ô(Ð(Ð(Ð(r!   c                 óN  — t          t          d d …         t          d d …         fgdd¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «        dz   }t          j        |¦  «        } |||¬¦  «         |                      t          j        ||¦  «        ¦  «         d S )	Nr]   r	   r   c                 óJ   — t          |j        ¦  «        D ]}| |         ||<   Œd S r_   r`   rb   s      r   rc   z9TestCUDAGufunc.test_copy_unspecified_return.<locals>.copy‘   rd   r!   rF   r*   rH   re   )r   r   r-   r.   rg   r1   r2   rh   s       r   Útest_copy_unspecified_returnz+TestCUDAGufunc.test_copy_unspecified_returnŽ   s°   € õ 
•w˜q˜q˜q”z¥7¨1¨1¨1¤:Ð.Ð/ØØ"ð
$ñ 
$ô 
$ð	ð 	ñ
$ô 
$ð	õ ŒI�b¥¤
Ð+Ñ+Ô+¨aÑ/ˆÝŒM˜!ÑÔˆØˆˆQ�Aˆ‰ŒˆØ�Š�œ A qÑ)Ô)Ñ*Ô*Ð*Ð*Ð*r!   c                 óf  — t          t          t          d d …         t          d d …         ¦  «        gdd¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «        dz   }t          j        |¦  «        } |||¬¦  «         |                      t          j        ||¦  «        ¦  «         d S )	Nr]   r	   r   c                 óJ   — t          |j        ¦  «        D ]}| |         ||<   Œd S r_   r`   rb   s      r   rc   z*TestCUDAGufunc.test_copy_odd.<locals>.copyŸ   rd   r!   é   r*   rH   re   )r   r   r   r-   r.   rg   r1   r2   rh   s       r   Útest_copy_oddzTestCUDAGufunc.test_copy_odd�   s³   € å	•d�7 1 1 1œ:¥w¨q¨q¨q¤zÑ2Ô2Ð3ØØ"ð
$ñ 
$ô 
$ð	ð 	ñ
$ô 
$ð	õ ŒI�b¥¤
Ð+Ñ+Ô+¨aÑ/ˆÝŒM˜!ÑÔˆØˆˆQ�Aˆ‰ŒˆØ�Š�œ A qÑ)Ô)Ñ*Ô*Ð*Ð*Ð*r!   c           	      óž  — t          t          t          d d …d d …f         t          d d …d d …f         ¦  «        gdd¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «                             dd¦  «        d	z   }t          j        |¦  «        } |||¬
¦  «         |                      t          j        ||¦  «        ¦  «         d S )Nz(x, y)->(x, y)r	   r   c                 ó˜   — t          |j        d         ¦  «        D ].}t          |j        d         ¦  «        D ]}| ||f         |||f<   ŒŒ/d S )Nr   rH   )r   r   )r   r   ÚxÚys       r   Úcopy2dz*TestCUDAGufunc.test_copy2d.<locals>.copy2d­   sd   € õ ˜1œ7 1œ:Ñ&Ô&ð &ð &�Ý˜qœw qœzÑ*Ô*ð &ð &�AØ  1 œg�A�a˜�d‘G�Gð&ð&ð &r!   é   r*   r+   é   rH   re   )	r   r   r   r-   r.   r/   rg   r1   r2   )r4   ru   r   r   s       r   Útest_copy2dzTestCUDAGufunc.test_copy2d«   s×   € å	•d�7 1 1 1 a a a 4œ=­'°!°!°!°Q°Q°Q°$¬-Ñ8Ô8Ð9Ø%Ø"ð
$ñ 
$ô 
$ð	&ð 	&ñ
$ô 
$ð	&õ
 ŒI�b¥¤
Ð+Ñ+Ô+×3Ò3°A°qÑ9Ô9¸AÑ=ˆÝŒM˜!ÑÔˆØˆˆq�aÐÑÔÐØ�Š�œ A qÑ)Ô)Ñ*Ô*Ð*Ð*Ð*r!   c           	      ó4  — t          dgdd¬¦  «        d„ ¦   «         }t          j                             d¦  «                             d¦  «        }t          j                             d¦  «                             d¦  «        }t          j        |j        d         ¦  «                             d¦  «        }t          d	d
¦  «        5  t          j	        d¬¦  «        5 } ||||¦  «         |  
                    |d         j        t          ¦  «         |                      dt          |d         j        ¦  «        ¦  «         |                      dt          |d         j        ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )Nú(void(float32[:], float32[:], float32[:])ú(n),(n)->(n)r	   r   c                 ól   — | j         d         }t          |¦  «        D ]}| |         ||         z  ||<   Œd S r   r   ©ÚaÚbÚdistÚlenr   s        r   Únumba_dist_cudazMTestCUDAGufunc.test_inefficient_launch_configuration.<locals>.numba_dist_cuda½   óE   € ð ”'˜!”*ˆCÝ˜3‘Z”Zð &ð &�Ø˜Aœ$  1¤™+��Q‘�ð&ð &r!   i €  r   r   ÚCUDA_LOW_OCCUPANCY_WARNINGSrH   T©Úrecordz	Grid sizezlow occupancy)r   r-   rI   ÚrandÚastypeÚzerosr   r   ÚwarningsÚcatch_warningsÚassertEqualÚcategoryr   ÚassertInÚstrÚmessage)r4   r‚   r~   r   r€   Úws         r   Ú%test_inefficient_launch_configurationz4TestCUDAGufunc.test_inefficient_launch_configuration¼   s  € Ý	Ð@ÐAØ#¨Fð
4ñ 
4ô 
4ð	&ð 	&ñ
4ô 
4ð	&õ
 ŒI�NŠN˜9Ñ%Ô%×,Ò,¨YÑ7Ô7ˆÝŒI�NŠN˜9Ñ%Ô%×,Ò,¨YÑ7Ô7ˆÝŒx˜œ œ
Ñ#Ô#×*Ò*¨9Ñ5Ô5ˆåÐ:¸AÑ>Ô>ð 	Bð 	BÝÔ(°Ð5Ñ5Ô5ð B¸Ø�  1 dÑ+Ô+Ð+Ø× Ò   1¤¤Õ0GÑHÔHÐHØ—’˜k­3¨q°¬t¬|Ñ+<Ô+<Ñ=Ô=Ð=Ø—’˜o­s°1°Q´4´<Ñ/@Ô/@ÑAÔAÐAð	Bð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bs7   ÃFÃBE5Å)FÅ5E9	Å9FÅ<E9	Å=FÆFÆFc                 óˆ  — t          dgddd¬¦  «        d„ ¦   «         }t          j                             d¦  «                             d¦  «                             d	¦  «        }t          j                             d¦  «                             d¦  «                             d	¦  «        }t          j        |¦  «        }t          d
d¦  «        5  t          j	        d¬¦  «        5 } ||||¦  «         |  
                    t          |¦  «        d¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )Nrz   r{   Tr	   )Únopythonr   c                 ól   — | j         d         }t          |¦  «        D ]}| |         ||         z  ||<   Œd S r   r   r}   s        r   Únumba_dist_cuda2zLTestCUDAGufunc.test_efficient_launch_configuration.<locals>.numba_dist_cuda2Ð   rƒ   r!   i   r   )i   r(   r„   rH   r…   r   )r   r-   rI   r‡   rˆ   r/   rg   r   rŠ   r‹   rŒ   r�   )r4   r–   r~   r   r€   r‘   s         r   Ú#test_efficient_launch_configurationz2TestCUDAGufunc.test_efficient_launch_configurationÏ   s¾  € Ý	Ð@ÐAØ#¨d¸6ð
Cñ 
Cô 
Cð	&ð 	&ñ
Cô 
Cð	&õ
 ŒI�NŠN˜:Ñ&Ô&×-Ò-¨iÑ8Ô8ßŠG�KÑ Ô ð 	
åŒI�NŠN˜:Ñ&Ô&×-Ò-¨iÑ8Ô8ßŠG�KÑ Ô ð 	
åŒ}˜QÑÔˆåÐ:¸AÑ>Ô>ð 	,ð 	,ÝÔ(°Ð5Ñ5Ô5ð ,¸Ø Ð   A tÑ,Ô,Ð,Ø× Ò ¥ Q¡¤¨Ñ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð 	,ð 	,s6   ÃD7Ã"1DÄD7ÄD#	Ä#D7Ä&D#	Ä'D7Ä7D;Ä>D;c           
      óÔ  — d„ } t          t          t          d d …         t          d d …         ¦  «        gddd¬¦  «        |¦  «         |                      t          ¦  «        5 } t          t          t          d d …         t          d d …         ¦  «        gddd¬¦  «        |¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         d S )Nc                 ó   — d S r_   © ©r   r   s     r   Úfooz.TestCUDAGufunc.test_nopython_flag.<locals>.fooä   ó   € ØˆDr!   r]   r	   T)r   r”   Fznopython flag must be True)r   r   r   ÚassertRaisesÚ	TypeErrorrŒ   r�   Ú	exception)r4   rœ   Úraisess      r   Útest_nopython_flagz!TestCUDAGufunc.test_nopython_flagâ   s?  € ð	ð 	ð 	ð	#�•T�' ! ! !œ*¥g¨a¨a¨a¤jÑ1Ô1Ð2°JÀvØ!ð	#ñ 	#ô 	#Ø#&ñ	(ô 	(ð 	(ð ×Ò�yÑ)Ô)ð 	<¨Vð7�K��g a a aœj­'°!°!°!¬*Ñ5Ô5Ð6¸
Ø%°ð7ñ 7ô 7Ø7:ñ<ô <ð <ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð 	×ÒÐ5µs¸6Ô;KÑ7LÔ7LÑMÔMÐMÐMÐMs   Á#AB5Â5B9Â<B9c           
      ór  — d„ }|                       t          ¦  «        5 } t          t          t          d d …         t          d d …         ¦  «        gdddd¬¦  «        |¦  «         d d d ¦  «         n# 1 swxY w Y   d}t          |j        ¦  «        }|                      |d t          |¦  «        …         |¦  «         |t          |¦  «        d …          	                    ¦   «          
                    d¦  «        }d	„ |D ¦   «         }|                      t          d
dg¦  «        t          |¦  «        ¦  «         d S )Nc                 ó   — d S r_   rš   r›   s     r   rœ   z.TestCUDAGufunc.test_invalid_flags.<locals>.fooó   r�   r!   r]   r	   TF)r   Úwhat1Úever2z/The following target options are not supported:ú,c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS )z'" )Ústrip)Ú.0r   s     r   ú
<listcomp>z5TestCUDAGufunc.test_invalid_flags.<locals>.<listcomp>ý   s"   € Ð0Ð0Ð0 Q�—’˜‘”Ð0Ð0Ð0r!   r¥   r¦   )rž   rŸ   r   r   r   r�   r    rŒ   r�   r©   ÚsplitÚset)r4   rœ   r¡   ÚheadÚmsgÚitemss         r   Útest_invalid_flagsz!TestCUDAGufunc.test_invalid_flagsñ   s‹  € ð	ð 	ð 	ð ×Ò�yÑ)Ô)ð 	E¨Vð@�K��g a a aœj­'°!°!°!¬*Ñ5Ô5Ð6¸
Ø%¨T¸ð@ñ @ô @Ø@CñEô Eð Eð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eð AˆÝ�&Ô"Ñ#Ô#ˆØ×Ò˜˜Z�c $™iœi˜Zœ¨$Ñ/Ô/Ð/Ø•C˜‘I”I�J�J”×%Ò%Ñ'Ô'×-Ò-¨cÑ2Ô2ˆØ0Ð0¨%Ð0Ñ0Ô0ˆØ×Ò�˜g wÐ/Ñ0Ô0µ#°e±*´*Ñ=Ô=Ð=Ð=Ð=s   žAA1Á1A5Á8A5c                 ó¦  — t          t          t          d d …         t          d d …         ¦  «        gdd¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «        x}}|                      t          ¦  «        5 } ||||¬¦  «         d d d ¦  «         n# 1 swxY w Y   d}|                      t          |j	        ¦  «        |¦  «         d S )	Nr]   r	   r   c                 ó   — d S r_   rš   )ÚinprV   s     r   rœ   z2TestCUDAGufunc.test_duplicated_output.<locals>.foo  s   € àˆDr!   rF   r*   re   z<cannot specify argument 'out' as both positional and keyword)
r   r   r   r-   r‰   rž   Ú
ValueErrorrŒ   r�   r    )r4   rœ   r´   rV   r¡   r¯   s         r   Útest_duplicated_outputz%TestCUDAGufunc.test_duplicated_output   s  € Ý	•d�7 1 1 1œ:¥w¨q¨q¨q¤zÑ2Ô2Ð3°ZÈÐ	OÑ	OÔ	Oð	ð 	ñ 
PÔ	Oð	õ ”H˜R¥r¤zÐ2Ñ2Ô2Ð2ˆˆcØ×Ò�zÑ*Ô*ð 	#¨fØˆC��S˜cÐ"Ñ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð MˆØ×Ò�˜VÔ-Ñ.Ô.°Ñ4Ô4Ð4Ð4Ð4s   ÂBÂB Â#B c                 ód  — t          t          d d …         t          d d …         t          d d …         fgdd¬¦  «        d„ ¦   «         } |||¦  «        }t          j        t          j        |¦  «        t          j        |¦  «        z  d¬¦  «        }t          j                             ||¦  «         d S )Nz(n),(n)->()r	   r   c                 óz   — d}t          t          | ¦  «        ¦  «        D ]}|| |         ||         z  z  }Œ||d<   d S r   )r   r�   )rs   rt   ÚrÚsr   s        r   Ú	gu_reducez1TestCUDAGufunc.check_tuple_arg.<locals>.gu_reduce  sI   € ð ˆAÝ�3˜q™6œ6‘]”]ð !ð !�Ø�Q�q”T˜A˜aœD‘[Ñ ��ØˆAˆa‰DˆDˆDr!   rH   )Úaxis)r   r   r-   ÚsumÚasarrayrK   Úassert_equal)r4   r~   r   r»   r¹   Úexpecteds         r   Úcheck_tuple_argzTestCUDAGufunc.check_tuple_arg  s®   € Ý	•w˜q˜q˜q”z¥7¨1¨1¨1¤:­w°q°q°q¬zÐ:Ð;¸]Ø"ð
$ñ 
$ô 
$ð	ð 	ñ
$ô 
$ð	ð ˆI�a˜‰OŒOˆÝ”6�"œ* Q™-œ-­"¬*°Q©-¬-Ñ7¸aÐ@Ñ@Ô@ˆÝ
Œ
×Ò ¨!Ñ,Ô,Ð,Ð,Ð,r!   c                 ó:   — d}d}|                       ||¦  «         d S )N)©ç      ð?ç       @ç      @©ç      @ç      @ç      @)©ç      ø?ç      @ç      @©ç      @ç      @ç      @)rÁ   ©r4   r~   r   s      r   Útest_tuple_of_tuple_argz&TestCUDAGufunc.test_tuple_of_tuple_arg  s,   € ðˆðˆà×Ò˜Q Ñ"Ô"Ð"Ð"Ð"r!   c                 óÂ   — t          dd¦  «        } |ddd¬¦  «         |ddd¬¦  «        f} |d	d
d¬¦  «         |ddd¬¦  «        f}|                      ||¦  «         d S )NÚPoint©rs   rt   ÚzrÄ   rÅ   rÆ   rÈ   rÉ   rÊ   rÌ   rÍ   rÎ   rÐ   rÑ   rÒ   )r   rÁ   )r4   rÖ   r~   r   s       r   Útest_tuple_of_namedtuple_argz+TestCUDAGufunc.test_tuple_of_namedtuple_arg   s‹   € Ý˜7 OÑ4Ô4ˆØˆU�S˜C 3Ð'Ñ'Ô'ØˆU�S˜C 3Ð'Ñ'Ô'ð)ˆàˆU�S˜C 3Ð'Ñ'Ô'ØˆU�S˜C 3Ð'Ñ'Ô'ð)ˆà×Ò˜Q Ñ"Ô"Ð"Ð"Ð"r!   c                 óÒ   — t          j        d¦  «        t          j        d¦  «        f}t          j        d¦  «        t          j        d¦  «        f}|                      ||¦  «         d S )NrÃ   rÇ   rË   rÏ   )r-   r¾   rÁ   rÓ   s      r   Útest_tuple_of_array_argz&TestCUDAGufunc.test_tuple_of_array_arg(  s`   € ÝŒZ˜Ñ(Ô(ÝŒZ˜Ñ(Ô(ð*ˆåŒZ˜Ñ(Ô(ÝŒZ˜Ñ(Ô(ð*ˆà×Ò˜Q Ñ"Ô"Ð"Ð"Ð"r!   c                 óX   — t          ¦   «         }|                      |j        d¦  «         d S )Nr    )r#   rŒ   Ú__name__)r4   r5   s     r   Útest_gufunc_namezTestCUDAGufunc.test_gufunc_name/  s+   € Ý'Ñ)Ô)ˆØ×Ò˜œ¨,Ñ7Ô7Ð7Ð7Ð7r!   c           	      ór  — |                       t          ¦  «        5 }t          t          t          d d …         t          d d …         ¦  «        gdd¬¦  «        d„ ¦   «         }d d d ¦  «         n# 1 swxY w Y   t	          |j        ¦  «        }|                      d|¦  «         |                      d|¦  «         d S )Nz(m)->(m)r	   r   c                 ó   — d S r_   rš   )rs   rt   s     r   Úfz.TestCUDAGufunc.test_bad_return_type.<locals>.f5  s   € à�r!   z+guvectorized functions cannot return valueszspecifies int32 return type)rž   rŸ   r   r   r�   r    rŽ   )r4   Úterá   r¯   s       r   Útest_bad_return_typez#TestCUDAGufunc.test_bad_return_type3  sð   € Ø×Ò�yÑ)Ô)ð 	¨RÝ�%¥ a a a¤­%°°°¬(Ñ3Ô3Ð4°jÈÐPÑPÔPðð ñ QÔPðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ
 �"”,ÑÔˆØ�ŠÐCÀSÑIÔIÐIØ�ŠÐ3°SÑ9Ô9Ð9Ð9Ð9s   ›AA,Á,A0Á3A0c                 ó  — t          t          d d …         t          d d …         t          d d …         fgdd¬¦  «        d„ ¦   «         }t          j        d¦  «        }|                      t
          ¦  «        5 } ||¦  «         d d d ¦  «         n# 1 swxY w Y   t          |j        ¦  «        }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      t
          ¦  «        5 } |||||¦  «         d d d ¦  «         n# 1 swxY w Y   t          |j        ¦  «        }|                      d|¦  «         |                      d|¦  «         |                      d	|¦  «         d S )
Nz(m),(m)->(m)r	   r   c                 ó   — d S r_   rš   r×   s      r   rá   z;TestCUDAGufunc.test_incorrect_number_of_pos_args.<locals>.f>  ó	   € ð ˆDr!   r+   ú%gufunc accepts 2 positional argumentszor 3 positional argumentsúGot 1 positional argument.zGot 4 positional arguments.©	r   r   r-   r.   rž   rŸ   r�   r    rŽ   ©r4   rá   Úarrrâ   r¯   s        r   Ú!test_incorrect_number_of_pos_argsz0TestCUDAGufunc.test_incorrect_number_of_pos_args=  sþ  € Ý	•u˜Q˜Q˜Q”x¥ q q q¤­5°°°¬8Ð4Ð5Ø#¨Fð
4ñ 
4ô 
4ð	ð 	ñ
4ô 
4ð	õ Œi˜‰lŒlˆð ×Ò�yÑ)Ô)ð 	¨RØˆAˆc‰FŒFˆFð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ �"”,ÑÔˆØ�ŠÐ=¸sÑCÔCÐCØ�ŠÐ1°3Ñ7Ô7Ð7Ø�ŠÐ2°CÑ8Ô8Ð8ð ×Ò�yÑ)Ô)ð 	"¨RØˆAˆc�3˜˜SÑ!Ô!Ð!ð	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"õ �"”,ÑÔˆØ�ŠÐ=¸sÑCÔCÐCØ�ŠÐ1°3Ñ7Ô7Ð7Ø�ŠÐ3°SÑ9Ô9Ð9Ð9Ð9s$   Á5BÂBÂBÄD#Ä#D'Ä*D'N)rÝ   Ú
__module__Ú__qualname__r8   r=   r@   rD   rS   r[   ri   rl   rp   rx   r’   r—   r¢   r±   r¶   rÁ   rÔ   rÙ   rÛ   rÞ   rã   rì   rš   r!   r   r%   r%      sd  € € € € € ð.ð .ð .ð.ð .ð .ð .ð .ð .ð
.ð 
.ð 
.ð/ð /ð /ð.ð .ð .ð0)ð )ð )ð+ð +ð +ð+ð +ð +ð+ð +ð +ð"Bð Bð Bð&,ð ,ð ,ð&Nð Nð Nð>ð >ð >ð
5ð 
5ð 
5ð-ð -ð -ð#ð #ð #ð#ð #ð #ð#ð #ð #ð8ð 8ð 8ð:ð :ð :ð:ð :ð :ð :ð :r!   r%   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestMultipleOutputsc           	      óÚ  — t          t          t          d d …         t          d d …         t          d d …         ¦  «        gdd¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «        dz   }t          j        |¦  «        }t          j        |¦  «        } ||||¦  «         t          j                             ||¦  «         t          j                             ||¦  «         d S )Nú(x)->(x),(x)r	   r   c                 ó`   — t          |j        ¦  «        D ]}| |         ||<   | |         ||<   Œd S r_   r`   ©r   r   r   r   s       r   rc   zKTestMultipleOutputs.test_multiple_outputs_same_type_passed_in.<locals>.copy[  sA   € õ ˜1œ6‘]”]ð ð �Ø˜”t��!‘Ø˜”t��!‘�ðð r!   rF   r*   rH   rf   )r4   rc   r   r   r   s        r   Ú)test_multiple_outputs_same_type_passed_inz=TestMultipleOutputs.test_multiple_outputs_same_type_passed_inZ  sÞ   € Ý	•d�7 1 1 1œ:¥w¨q¨q¨q¤zµ7¸1¸1¸1´:Ñ>Ô>Ð?Ø#Ø"ð
$ñ 
$ô 
$ð	ð 	ñ
$ô 
$ð	õ
 ŒI�b¥¤
Ð+Ñ+Ô+¨aÑ/ˆÝŒM˜!ÑÔˆÝŒM˜!ÑÔˆØˆˆQ��1‰ŒˆÝ
Œ
×"Ò" 1 aÑ(Ô(Ð(Ý
Œ
×"Ò" 1 aÑ(Ô(Ð(Ð(Ð(r!   c           	      óà  — t          t          t          d d …         t          d d …         t          d d …         ¦  «        gdd¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «        dz   }t          j        |¦  «        }t          j        |¦  «        } ||||¦  «         t          j                             ||¦  «         t          j                             |dz  |¦  «         d S )	Nrò   r	   r   c                 óf   — t          |j        ¦  «        D ]}| |         ||<   | |         dz  ||<   Œd S ©Nr(   r`   rô   s       r   Úcopy_and_doublezRTestMultipleOutputs.test_multiple_outputs_distinct_values.<locals>.copy_and_doublel  óE   € õ ˜1œ6‘]”]ð  ð  �Ø˜”t��!‘Ø˜”t˜a‘x��!‘�ð ð  r!   rF   r*   rH   r(   rf   ©r4   rù   r   r   r   s        r   Ú%test_multiple_outputs_distinct_valuesz9TestMultipleOutputs.test_multiple_outputs_distinct_valuesj  så   € å	•d�7 1 1 1œ:¥w¨q¨q¨q¤zµ7¸1¸1¸1´:Ñ>Ô>Ð?Ø#Ø"ð
$ñ 
$ô 
$ð	 ð 	 ñ
$ô 
$ð	 õ
 ŒI�b¥¤
Ð+Ñ+Ô+¨aÑ/ˆÝŒM˜!ÑÔˆÝŒM˜!ÑÔˆØˆ˜˜1˜aÑ Ô Ð Ý
Œ
×"Ò" 1 aÑ(Ô(Ð(Ý
Œ
×"Ò" 1 q¡5¨!Ñ,Ô,Ð,Ð,Ð,r!   c           	      ó’  — t          t          t          d d …         t          d d …         t          d d …         ¦  «        gdd¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «        dz   } ||¦  «        \  }}t          j                             ||¦  «         t          j                             |dz  |¦  «         d S )	Nrò   r	   r   c                 óf   — t          |j        ¦  «        D ]}| |         ||<   | |         dz  ||<   Œd S rø   r`   rô   s       r   rù   zLTestMultipleOutputs.test_multiple_output_allocation.<locals>.copy_and_double|  rú   r!   rF   r*   rH   r(   )r   r   r   r-   r.   rK   rL   rû   s        r   Útest_multiple_output_allocationz3TestMultipleOutputs.test_multiple_output_allocation{  sÆ   € Ý	•d�7 1 1 1œ:¥w¨q¨q¨q¤zµ7¸1¸1¸1´:Ñ>Ô>Ð?Ø#Ø"ð
$ñ 
$ô 
$ð	 ð 	 ñ
$ô 
$ð	 õ
 ŒI�b¥¤
Ð+Ñ+Ô+¨aÑ/ˆØˆ˜qÑ!Ô!‰ˆˆ1Ý
Œ
×"Ò" 1 aÑ(Ô(Ð(Ý
Œ
×"Ò" 1 q¡5¨!Ñ,Ô,Ð,Ð,Ð,r!   c           	      ó  — t          t          t          d d …         t          d d …         t          d d …         ¦  «        gdd¬¦  «        d„ ¦   «         }t	          j        dt          j        ¬¦  «        dz   }t	          j        |¦  «        }t	          j        |t          j        ¬¦  «        } ||||¦  «         t          j                             ||¦  «         t          j                             |t	          j        d¦  «        z  |¦  «         d S )	Nrò   r	   r   c                 óf   — t          |j        ¦  «        D ]}| |         ||<   | |         dz  ||<   Œd S )NrÌ   r`   rô   s       r   Úcopy_and_multiplyzJTestMultipleOutputs.test_multiple_output_dtypes.<locals>.copy_and_multiply‹  sE   € õ ˜1œ6‘]”]ð "ð "�Ø˜”t��!‘Ø˜”t˜c‘z��!‘�ð"ð "r!   rF   r*   rH   rÌ   )	r   r   r   r   r-   r.   rg   rK   rL   )r4   r  r   r   r   s        r   Útest_multiple_output_dtypesz/TestMultipleOutputs.test_multiple_output_dtypes‰  sö   € å	•d�5   œ8¥U¨1¨1¨1¤X­w°q°q°q¬zÑ:Ô:Ð;Ø#Ø"ð
$ñ 
$ô 
$ð	"ð 	"ñ
$ô 
$ð	"õ
 ŒI�b¥¤Ð)Ñ)Ô)¨AÑ-ˆÝŒM˜!ÑÔˆÝŒM˜!¥2¤:Ð.Ñ.Ô.ˆØÐ˜!˜Q Ñ"Ô"Ð"Ý
Œ
×"Ò" 1 aÑ(Ô(Ð(Ý
Œ
×"Ò" 1¥r¤z°#¡¤Ñ#6¸Ñ:Ô:Ð:Ð:Ð:r!   c                 ó*  — t          t          d d …         t          d d …         t          d d …         t          d d …         fgdd¬¦  «        d„ ¦   «         }t          j        d¦  «        }|                      t
          ¦  «        5 } ||¦  «         d d d ¦  «         n# 1 swxY w Y   t          |j        ¦  «        }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      t
          ¦  «        5 } ||||||¦  «         d d d ¦  «         n# 1 swxY w Y   t          |j        ¦  «        }|                      d|¦  «         |                      d|¦  «         |                      d	|¦  «         d S )
Nz(m),(m)->(m),(m)r	   r   c                 ó   — d S r_   rš   )rs   rt   rØ   r‘   s       r   rá   z@TestMultipleOutputs.test_incorrect_number_of_pos_args.<locals>.f›  ræ   r!   r+   rç   zor 4 positional argumentsrè   zGot 5 positional arguments.ré   rê   s        r   rì   z5TestMultipleOutputs.test_incorrect_number_of_pos_argsš  s
  € Ý	•u˜Q˜Q˜Q”x¥ q q q¤­5°°°¬8µU¸1¸1¸1´XÐ>Ð?Ø'°ð
8ñ 
8ô 
8ð	ð 	ñ
8ô 
8ð	õ Œi˜‰lŒlˆð ×Ò�yÑ)Ô)ð 	¨RØˆAˆc‰FŒFˆFð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ �"”,ÑÔˆØ�ŠÐ=¸sÑCÔCÐCØ�ŠÐ1°3Ñ7Ô7Ð7Ø�ŠÐ2°CÑ8Ô8Ð8ð ×Ò�yÑ)Ô)ð 	'¨RØˆAˆc�3˜˜S #Ñ&Ô&Ð&ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'õ �"”,ÑÔˆØ�ŠÐ=¸sÑCÔCÐCØ�ŠÐ1°3Ñ7Ô7Ð7Ø�ŠÐ3°SÑ9Ô9Ð9Ð9Ð9s$   ÂBÂBÂ"BÄD2Ä2D6Ä9D6N)rÝ   rí   rî   rõ   rü   rÿ   r  rì   rš   r!   r   rð   rð   X  s_   € € € € € ð)ð )ð )ð -ð -ð -ð"-ð -ð -ð;ð ;ð ;ð":ð :ð :ð :ð :r!   rð   Ú__main__)Únumpyr-   Úcollectionsr   Únumbar   r   r   r   r   r	   Únumba.cuda.testingr
   r   ÚunittestrŠ   Únumba.core.errorsr   Únumba.tests.supportr   r#   r%   rð   rÝ   Úmainrš   r!   r   ú<module>r     sŽ  ðØ Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø €€€Ø €€€Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø /Ð /Ð /Ð /Ð /Ð /ð ")ð ð ð ð ð  €Ð9Ñ:Ô:ðv:ð v:ð v:ð v:ð v:�\ñ v:ô v:ñ ;Ô:ðv:ðr	 €Ð9Ñ:Ô:ðY:ð Y:ð Y:ð Y:ð Y:˜,ñ Y:ô Y:ñ ;Ô:ðY:ðx ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr!   