§
    ƒÛg©?  ã                   ó8  — 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
mZ d dlmZmZ d„ Zd„ Z G d„ de¦  «        Z G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zedk    r e j        ¦   «          dS dS )é    N)ÚvoidÚfloat32Úint64ÚjitÚguvectorize)ÚGUVectorize)ÚtagÚTestCasec           
      óò   — | j         \  }}|j         \  }}t          |¦  «        D ]R}t          |¦  «        D ]@}d|||f<   t          |¦  «        D ]'}|||fxx         | ||f         |||f         z  z  cc<   Œ(ŒAŒSdS )zdocstring for matmulcorer   N)ÚshapeÚrange)	ÚAÚBÚCÚmÚnÚpÚiÚjÚks	            úV/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/npyufunc/test_gufunc.pyÚ
matmulcorer      s©   € àŒ7�D€A€qØŒ7�D€A€qÝ�1‰XŒXð -ð -ˆÝ�q‘”ð 	-ð 	-ˆAØˆAˆa�ˆd‰GÝ˜1‘X”Xð -ð -�Ø�!�Q�$��”˜1˜Q ˜Tœ7 Q q¨! t¤WÑ,Ñ,��‘�ð-ð	-ð-ð -ó    c                 ó   — | |z  |z   |d<   d S ©Nr   © )ÚaÚxÚyÚouts       r   Úaxpyr!      s   € Ø�‰U�a‰Z€Cˆ�F€F€Fr   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	Ú
TestGUFuncÚcpuc                 ó~  — 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d¬¦  «         d S )	Nié  é   é   ©Údtypeé   çñhãˆµøä>ç:Œ0âŽyE>©ÚrtolÚatol)ÚnpÚaranger   ÚreshapeÚmatmulÚtestingÚassert_allclose)ÚselfÚgufuncÚ	matrix_ctr   r   r   ÚGolds          r   Úcheck_matmul_gufunczTestGUFunc.check_matmul_gufunc   s®   € Øˆ	ÝŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaÐQRÑSÔSˆÝŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaÐQRÑSÔSˆàˆF�1�a‰LŒLˆÝŒy˜˜A‰Œˆå
Œ
×"Ò" 1 d°¸DÐ"ÑAÔAÐAÐAÐAr   c                 ó&  — t          t          d| j        ¬¦  «        }|                     t          d d …d d …f         t          d d …d d …f         t          d d …d d …f         f¦  «         |                     ¦   «         }|                      |¦  «         d S ©Nú(m,n),(n,p)->(m,p)©Útarget)r   r   r?   Úaddr   Úbuild_ufuncr:   ©r6   r7   s     r   Útest_gufunczTestGUFunc.test_gufunc'   s”   € Ý�ZÐ)=Ø$(¤Kð1ñ 1ô 1ˆà�
Š
•G˜A˜A˜A˜q˜q˜q˜D”M¥7¨1¨1¨1¨a¨a¨a¨4¤=µ'¸!¸!¸!¸Q¸Q¸Q¸$´-Ð@ÑAÔAÐAØ×#Ò#Ñ%Ô%ˆà× Ò  Ñ(Ô(Ð(Ð(Ð(r   c                 ó   —  t          t          t          d d …d d …f         t          d d …d d …f         t          d d …d d …f         ¦  «        gd| j        ¬¦  «        t          ¦  «        }|                      |¦  «         d S r<   )r   r   r   r?   r   r:   rB   s     r   Útest_guvectorize_decorz!TestGUFunc.test_guvectorize_decor/   sŒ   € ð1•�d¥7¨1¨1¨1¨Q¨Q¨Q¨3¤<µ¸¸¸¸1¸1¸1¸´½wÀqÀqÀqÈÈÈÀs¼|ÑLÔLÐMØ1Ø$(¤Kð1ñ 1ô 1å1;ñ=ô =ˆð 	× Ò  Ñ(Ô(Ð(Ð(Ð(r   c                 ó6  — t          t          d| j        ¬¦  «        }|                     d¦  «         |                     ¦   «         }t          j        dt
          j        ¬¦  «        } ||||¦  «        }t
          j         	                    |||z  |z   ¦  «         d S )Nú(), (), () -> ()r>   z(intp, intp, intp, intp[:])é
   r(   )
r   r!   r?   r@   rA   r0   r1   Úintpr4   Úassert_equal)r6   r7   r   r    s       r   Útest_ufunc_likezTestGUFunc.test_ufunc_like6   sŒ   € õ �TÐ#5¸d¼kÐJÑJÔJˆØ�
Š
Ð0Ñ1Ô1Ð1Ø×#Ò#Ñ%Ô%ˆåŒI�b¥¤Ð(Ñ(Ô(ˆØˆf�Q˜˜1‰oŒoˆå
Œ
×Ò  Q¨¡U¨Q¡YÑ/Ô/Ð/Ð/Ð/r   c                 ól  — t          dgd¦  «        d„ ¦   «         }t          j        d¦  «        } ||d¬¦  «        }t          j        |d¬¦  «        }t          j                             ||¦  «         t          j        |¦  «        } |||d¬¦  «         t          j                             ||¦  «         d S )Nzf8[:],f8[:]ú(n)->(n)c                 ód   — d}t          | j        d         ¦  «        D ]}|| |         z  }|||<   Œd S r   ©r   r   ©r   ÚresÚaccr   s       r   Ú	my_cumsumz'TestGUFunc.test_axis.<locals>.my_cumsumE   óF   € àˆCÝ˜1œ7 1œ:Ñ&Ô&ð ð �Ø�q˜”t‘�Ø��A‘�ðð r   ©é   é   r   ©Úaxis©r    rY   )r   r0   ÚonesÚcumsumr4   rJ   Ú
zeros_like)r6   rS   r   r   ÚexpectedÚout_kws         r   Ú	test_axiszTestGUFunc.test_axisC   s½   € å	�m�_ jÑ	1Ô	1ð	ð 	ñ 
2Ô	1ð	õ ŒG�HÑÔˆàˆI�a˜aÐ Ñ Ô ˆÝ”9˜Q QÐ'Ñ'Ô'ˆÝ
Œ
×Ò  8Ñ,Ô,Ð,å”˜qÑ!Ô!ˆØˆ	�!˜ aÐ(Ñ(Ô(Ð(Ý
Œ
×Ò ¨Ñ1Ô1Ð1Ð1Ð1r   c                 óV  — t          t          d d …         t          t          d d …         fgd¦  «        d„ ¦   «         }|                      d|j        ¦  «         |                      d|j        ¦  «         |                      d|j        ¦  «         |                      d|j        ¦  «         d S )Nú(n),()->(n)c                 ó\   — t          | j        d         ¦  «        D ]}| |         |z   ||<   ŒdS )údocstring for gufuncr   NrO   )r   r   rQ   r   s       r   r7   z)TestGUFunc.test_docstring.<locals>.gufuncW   s>   € õ ˜1œ7 1œ:Ñ&Ô&ð "ð "�Ø˜1œ ™��A‘�ð"ð "r   z numba.tests.npyufunc.test_gufuncr7   z)TestGUFunc.test_docstring.<locals>.gufuncrd   )r   r   ÚassertEqualÚ
__module__Ú__name__Ú__qualname__Ú__doc__rB   s     r   Útest_docstringzTestGUFunc.test_docstringV   s®   € Ý	•u˜Q˜Q˜Q”x¥­¨a¨a¨a¬Ð1Ð2°MÑ	BÔ	Bð	"ð 	"ñ 
CÔ	Bð	"ð
 	×ÒÐ;¸VÔ=NÑOÔOÐOØ×Ò˜ 6¤?Ñ3Ô3Ð3Ø×ÒÐDÀfÔFYÑZÔZÐZØ×ÒÐ/°´Ñ@Ô@Ð@Ð@Ð@r   N)
rg   rf   rh   r?   r:   rC   rE   rK   r`   rj   r   r   r   r#   r#      s{   € € € € € Ø€FðBð Bð Bð)ð )ð )ð)ð )ð )ð0ð 0ð 0ð2ð 2ð 2ð&
Að 
Að 
Að 
Að 
Ar   r#   c                   ó   — e Zd ZdZdZdS )ÚTestGUFuncParallelFÚparallelN©rg   rf   rh   Ú_numba_parallel_test_r?   r   r   r   rl   rl   c   ó   € € € € € Ø!ÐØ€F€F€Fr   rl   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestDynamicGUFuncr$   c                 ó–  — d„ }t          t          d| j        d¬¦  «        }d}t          j        |dz  dz  t          j        ¬¦  «                             |dd¦  «        }t          j        |dz  d	z  t          j        ¬¦  «                             |dd	¦  «        }t          j        |dz  d	z  t          j        ¬¦  «                             |dd	¦  «        } |||||¦  «         t          j        |dz  dz  t          j        ¬¦  «                             |dd¦  «        }t          j        |dz  d	z  t          j        ¬¦  «                             |dd	¦  «        }t          j        |dz  d	z  t          j        ¬¦  «                             |dd	¦  «        }	 |||||	¦  «         |                      t          |j
        ¦  «        d¦  «         d S )
Nc                 ó�   — t          j        ||¦  «        } | |||¦  «         t           j                             ||dd¬¦  «         d S )Nr+   r,   r-   )r0   r3   r4   r5   )r7   r   r   r   r9   s        r   r:   zBTestDynamicGUFunc.test_dynamic_matmul.<locals>.check_matmul_gufuncm   sG   € Ý”9˜Q ‘?”?ˆDØˆF�1�a˜‰OŒOˆOÝŒJ×&Ò& q¨$°TÀÐ&ÑEÔEÐEÐEÐEr   r=   T©r?   Ú
is_dynamicrH   r&   r'   r(   r*   )r   r   r?   r0   r1   r   r2   r   re   ÚlenÚtypes)
r6   r:   r7   r8   ÚAi64ÚBi64ÚCi64r   r   r   s
             r   Útest_dynamic_matmulz%TestDynamicGUFunc.test_dynamic_matmulk   s¾  € ð	Fð 	Fð 	Fõ
 �ZÐ)=Ø$(¤K¸DðBñ Bô Bˆàˆ	ÝŒy˜ Q™¨Ñ*µ"´(Ð;Ñ;Ô;×CÒCÀIÈqÐRSÑTÔTˆÝŒy˜ Q™¨Ñ*µ"´(Ð;Ñ;Ô;×CÒCÀIÈqÐRSÑTÔTˆÝŒy˜ Q™¨Ñ*µ"´(Ð;Ñ;Ô;×CÒCÀIÈqÐRSÑTÔTˆØÐ˜F D¨$°Ñ5Ô5Ð5åŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaÐQRÑSÔSˆÝŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaÐQRÑSÔSˆÝŒI�i !‘m aÑ'­r¬zÐ:Ñ:Ô:×BÒBÀ9ÈaÐQRÑSÔSˆØÐ˜F A q¨!Ñ,Ô,Ð,à×Ò�˜Vœ\Ñ*Ô*¨AÑ.Ô.Ð.Ð.Ð.r   c                 óž   — d„ }t          t          d| j        d¬¦  «        }t          j        dt          j        ¬¦  «        } |||¦  «         d S )Nc                 ó<  — t          j        d|j        ¬¦  «        }t          j        d|j        ¬¦  «        } | ||||¦  «          | ||||¬¦  «         ||z  |z   }t           j                             ||¦  «         t           j                             ||¦  «         d S )NrH   r(   ©r    )r0   Úzerosr)   r4   rJ   )r7   r   r    r_   Úgoldens        r   Úcheck_ufunc_outputzETestDynamicGUFunc.test_dynamic_ufunc_like.<locals>.check_ufunc_output„   s    € Ý”(˜2 Q¤WÐ-Ñ-Ô-ˆCÝ”X˜b¨¬Ð0Ñ0Ô0ˆFØˆF�1�a˜˜CÑ Ô Ð ØˆF�1�a˜ Ð'Ñ'Ô'Ð'Ø˜‘U˜Q‘YˆFÝŒJ×#Ò# C¨Ñ0Ô0Ð0ÝŒJ×#Ò# F¨FÑ3Ô3Ð3Ð3Ð3r   rG   Tru   rH   r(   )r   r!   r?   r0   r1   rI   )r6   r‚   r7   r   s       r   Útest_dynamic_ufunc_likez)TestDynamicGUFunc.test_dynamic_ufunc_like‚   sb   € ð	4ð 	4ð 	4õ �TÐ#5¸d¼kØ(,ð.ñ .ô .ˆåŒI�b¥¤Ð(Ñ(Ô(ˆØÐ˜6 1Ñ%Ô%Ð%Ð%Ð%r   c                 ó^  — t          d| j        d¬¦  «        d„ ¦   «         }|                      |j        ¦  «         t	          j        dt          j        ¬¦  «                             dd¦  «        }t	          j        dt          j        ¬¦  «        } |||¦  «         t          |j
        d	         ¦  «        D ]6}|                      ||         ||                              ¦   «         ¦  «         Œ7d
}|                      t          |¦  «        5   ||¦  «         ddd¦  «         dS # 1 swxY w Y   dS )úw
        Note that scalar output is a 0-dimension array that acts as
        a pointer to the output location.
        ú(n)->()T©r?   Únopythonc                 ód   — d}t          | j        d         ¦  «        D ]}|| |         z  }Œ||d<   d S ©Ng        r   r   rO   ©Úinpr    Útmpr   s       r   Úsum_rowz=TestDynamicGUFunc.test_dynamic_scalar_output.<locals>.sum_rowœ   s@   € àˆCÝ˜3œ9 Qœ<Ñ(Ô(ð ð �Ø�s˜1”v‘��ØˆC�‰GˆGˆGr   é0u  r(   é'  é   r   z)Too few arguments for function 'sum_row'.N)r   r?   Ú
assertTruerv   r0   r1   Úint32r2   r€   r   r   re   ÚsumÚassertRaisesRegexÚ	TypeError)r6   rŽ   rŒ   r    r   Úmsgs         r   Útest_dynamic_scalar_outputz,TestDynamicGUFunc.test_dynamic_scalar_output–   si  € õ 
�Y t¤{¸TÐ	BÑ	BÔ	Bð	ð 	ñ 
CÔ	Bð	ð 	�Š˜Ô*Ñ+Ô+Ð+ÝŒi˜¥R¤XÐ.Ñ.Ô.×6Ò6°u¸aÑ@Ô@ˆÝŒh�u¥B¤HÐ-Ñ-Ô-ˆØˆ��SÑÔÐõ �s”y ”|Ñ$Ô$ð 	3ð 	3ˆAØ×Ò˜S œV S¨¤V§Z¢Z¡\¤\Ñ2Ô2Ð2Ð2à9ˆØ×#Ò#¥I¨sÑ3Ô3ð 	ð 	ØˆG�C‰LŒLˆLð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Ä	D"Ä"D&Ä)D&c                 ó’  — t          d¦  «        d„ ¦   «         }t          j        d¦  «        }t          j        |d¬¦  «        }t          j        |¦  «        } |||d¬¦  «         t          j                             ||¦  «         t          j        |¦  «        } |||d¬¦  «         t          j                             ||¦  «         d S )NrM   c                 ód   — d}t          | j        d         ¦  «        D ]}|| |         z  }|||<   Œd S r   rO   rP   s       r   rS   z.TestDynamicGUFunc.test_axis.<locals>.my_cumsum¶   rT   r   rU   r   rX   rZ   )r   r0   r[   r\   r]   r4   rJ   )r6   rS   r   r^   r   r_   s         r   r`   zTestDynamicGUFunc.test_axis´   sË   € å	�ZÑ	 Ô	 ð	ð 	ñ 
!Ô	 ð	õ ŒG�HÑÔˆÝ”9˜Q QÐ'Ñ'Ô'ˆåŒM˜(Ñ#Ô#ˆØˆ	�!�Q˜QÐÑÔÐÝ
Œ
×Ò  8Ñ,Ô,Ð,å”˜qÑ!Ô!ˆØˆ	�!˜ aÐ(Ñ(Ô(Ð(Ý
Œ
×Ò ¨Ñ1Ô1Ð1Ð1Ð1r   c                 ó  — t          d¦  «        d„ ¦   «         }g d¢}|D ],}t          ||¦  «        }|                      |d|›d�¦  «         Œ-t          j        g d¢¦  «        }t          j        g d¢¦  «        } |||¦  «         |                      |t          j        g d¢¦  «        ¦  «         |                      |j        d¦  «         |                      t          ¦  «        5 }| 
                    |¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d	¦  «         |                      t          ¦  «        5 }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d	¦  «         |                      t          ¦  «        5 }|                     |d
dg¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d	¦  «         |                      t          ¦  «        5 }|                     ||¦  «         d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d¦  «         d S )NrM   c                 ód   — d}t          | j        d         ¦  «        D ]}|| |         z  }|||<   Œd S r   rO   rP   s       r   r7   z8TestDynamicGUFunc.test_gufunc_attributes.<locals>.gufuncÉ   rT   r   )Ú	signatureÚ
accumulateÚatÚouterÚreduceÚreduceatzdynamic gufunc not exporting "ú"©é   r&   r‘   r'   ©r   r   r   r   ©r¥   r‘   é   rH   z-Reduction not defined on ufunc with signaturer   r&   z?method outer is not allowed in ufunc with non-trivial signature)r   Úhasattrr’   r0   ÚarrayÚassertPreciseEqualre   r�   ÚassertRaisesÚRuntimeErrorrž   ÚstrÚ	exceptionr¡   r¢   r–   r    )r6   r7   ÚattrsÚattrÚcontainsr   rQ   Úraisess           r   Útest_gufunc_attributesz(TestDynamicGUFunc.test_gufunc_attributesÈ   s^  € Ý	�ZÑ	 Ô	 ð	ð 	ñ 
!Ô	 ð	ð QÐPÐPˆØð 	Uð 	UˆDÝ˜v tÑ,Ô,ˆHØ�OŠO˜H˜HÈTÈTÈTÐ&SÑTÔTÐTÐTåŒH�\�\�\Ñ"Ô"ˆÝŒh�|�|�|Ñ$Ô$ˆØˆˆq�#‰ŒˆØ×Ò ¥R¤X¨m¨m¨mÑ%<Ô%<Ñ=Ô=Ð=ð
 	×Ò˜Ô)¨:Ñ6Ô6Ð6à×Ò�|Ñ,Ô,ð 	!°Ø×Ò˜aÑ Ô Ð ð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!à×Ò�˜VÔ-Ñ.Ô.Ð0_Ñ`Ô`Ð`à×Ò�|Ñ,Ô,ð 	°Ø�MŠM˜!ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×Ò�˜VÔ-Ñ.Ô.Ð0_Ñ`Ô`Ð`à×Ò�|Ñ,Ô,ð 	'°Ø�OŠO˜A  1˜vÑ&Ô&Ð&ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'à×Ò�˜VÔ-Ñ.Ô.Ð0_Ñ`Ô`Ð`à×Ò�yÑ)Ô)ð 	¨VØ�LŠL˜˜AÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×Ò�˜VÔ-Ñ.Ô.Ð0qÑrÔrÐrÐrÐrsH   Ã#DÄD	ÄD	ÅE4Å4E8Å;E8ÇG&Ç&G*Ç-G*È3IÉIÉIc                 óF  — t          d¦  «        d„ ¦   «         }|                      |j        ¦  «         t          j        g d¢¦  «        }t          j        g d¢¦  «        }t          j        g d¢¦  «        } ||||¦  «         |                      |t          j        g d¢¦  «        ¦  «         |                      |j        ¦  «         |                      |                     |¦  «        d¦  «         |                      |                     |¦  «        t          j        g d¢¦  «        ¦  «         |                      | 	                    d	d
gd
dg¦  «        t          j        d
dgddgg¦  «        ¦  «         |                      | 
                    |d	dg¦  «        t          j        ddg¦  «        ¦  «         t          j        g d¢¦  «        }t          j        d
dg¦  «        }|                     |d	d
g|¦  «         |                      |t          j        g d¢¦  «        ¦  «         d S )Nz	(),()->()c                 ó   — | |z   |d<   d S r   r   )r   r   rQ   s      r   r@   z6TestDynamicGUFunc.test_gufunc_attributes2.<locals>.addñ   s   € à˜‘UˆC�‰FˆFˆFr   r¤   )r'   r‘   r&   r¥   r¦   )r*   r*   r*   r*   rH   r§   r   r¥   r&   r‘   é   )r&   r'   r‘   r'   )r   ÚassertIsNoner�   r0   rª   r«   re   r¡   rž   r    r¢   rŸ   )r6   r@   r   ÚbrQ   r   r   s          r   Útest_gufunc_attributes2z)TestDynamicGUFunc.test_gufunc_attributes2ð   sö  € Ý	�[Ñ	!Ô	!ð	ð 	ñ 
"Ô	!ð	ð 	×Ò˜#œ-Ñ(Ô(Ð(åŒH�\�\�\Ñ"Ô"ˆÝŒH�\�\�\Ñ"Ô"ˆÝŒh�|�|�|Ñ$Ô$ˆØˆˆAˆq�#‰ŒˆØ×Ò ¥R¤X¨l¨l¨lÑ%;Ô%;Ñ<Ô<Ð<ð 	×Ò˜#œ-Ñ(Ô(Ð(Ø×Ò˜Ÿš A™œ¨Ñ+Ô+Ð+Ø×Ò §¢¨qÑ 1Ô 1µ2´8¸M¸M¸MÑ3JÔ3JÑKÔKÐKØ×Ò §	¢	¨1¨a¨&°1°a°&Ñ 9Ô 9½2¼8ÀaÈÀVÈaÐQRÈVÐDTÑ;UÔ;UÑVÔVÐVØ×Ò §¢¨Q°°A°Ñ 7Ô 7½¼À1ÀaÀ&Ñ9IÔ9IÑJÔJÐJåŒH�\�\�\Ñ"Ô"ˆÝŒH�a˜�VÑÔˆØ�Šˆq�1�a�&˜!ÑÔÐØ×Ò ¥2¤8¨L¨L¨LÑ#9Ô#9Ñ:Ô:Ð:Ð:Ð:r   N)
rg   rf   rh   r?   r|   rƒ   r˜   r`   r´   rº   r   r   r   rr   rr   h   sw   € € € € € Ø€Fð/ð /ð /ð.&ð &ð &ð(ð ð ð<2ð 2ð 2ð(&sð &sð &sðP;ð ;ð ;ð ;ð ;r   rr   c                   ó4   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestGUVectorizeScalarz<
    Nothing keeps user from out-of-bound memory access
    r$   c                 ój  — t          dgd| j        d¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «                             dd	¦  «        } ||¦  «        }t          |j        d
         ¦  «        D ]6}|                      ||         ||          	                    ¦   «         ¦  «         Œ7dS )r…   zvoid(int32[:], int32[:])r†   Tr‡   c                 ód   — d}t          | j        d         ¦  «        D ]}|| |         z  }Œ||d<   d S rŠ   rO   r‹   s       r   rŽ   z9TestGUVectorizeScalar.test_scalar_output.<locals>.sum_row  sB   € ð ˆCÝ˜3œ9 Qœ<Ñ(Ô(ð ð �Ø�s˜1”v‘��ØˆC�‰GˆGˆGr   r�   r(   r�   r‘   r   N)
r   r?   r0   r1   r“   r2   r   r   re   r”   )r6   rŽ   rŒ   r    r   s        r   Útest_scalar_outputz(TestGUVectorizeScalar.test_scalar_output  sÅ   € õ 
Ð0Ð1°9Ø œK°$ð
8ñ 
8ô 
8ð	ð 	ñ
8ô 
8ð	õ Œi˜¥R¤XÐ.Ñ.Ô.×6Ò6°u¸aÑ@Ô@ˆØˆg�c‰lŒlˆõ �s”y ”|Ñ$Ô$ð 	3ð 	3ˆAØ×Ò˜S œV S¨¤V§Z¢Z¡\¤\Ñ2Ô2Ð2Ð2ð	3ð 	3r   c                 óü   — t          dgd| j        d¬¦  «        d„ ¦   «         }t          j        dt          j        ¬¦  «                             dd	¦  «        } ||d
¦  «        }|                      |d
z  |¦  «         d S )Nzint32[:], int32[:], int32[:]rb   Tr‡   c                 óh   — t          | j        d         ¦  «        D ]}| |         |d         z  ||<   Œd S r   rO   ©rŒ   r   r    r   s       r   Úfooz4TestGUVectorizeScalar.test_scalar_input.<locals>.foo,  sB   € õ ˜3œ9 Qœ<Ñ(Ô(ð 'ð '�Ø˜Qœ ! A¤$™��A‘�ð'ð 'r   rW   r(   rH   r‘   r&   )r   r?   r0   r1   r“   r2   r«   )r6   rÃ   rŒ   r    s       r   Útest_scalar_inputz'TestGUVectorizeScalar.test_scalar_input*  s•   € å	Ð4Ð5°}Ø œK°$ð
8ñ 
8ô 
8ð	'ð 	'ñ
8ô 
8ð	'õ Œi˜¥b¤hÐ/Ñ/Ô/×7Ò7¸¸AÑ>Ô>ˆàˆc�#�q‰kŒkˆð 	×Ò  a¡¨Ñ-Ô-Ð-Ð-Ð-r   c                 óÀ  — d„ } t          dgd| j        ¬¦  «        |¦  «        }t          j        d¦  «                             t          j        ¦  «        } ||d¦  «        }t          j        |¦  «        } ||d|¦  «         t          j                             ||¦  «         t          j        d¦  «                             t          j        ¦  «         	                    dd¦  «        } ||d¦  «        }t          j        |¦  «        }t          |j        d         ¦  «        D ]} |||         d||         ¦  «         Œt          j                             ||¦  «         d S )	Nc                 óV   — t          | j        ¦  «        D ]}|| |         dz   z  ||<   Œd S )Nr¥   )r   ÚsizerÂ   s       r   ÚpyfunczATestGUVectorizeScalar.test_scalar_input_core_type.<locals>.pyfunc:  s;   € Ý˜3œ8‘_”_ð *ð *�Ø˜c !œf q™jÑ)��A‘�ð*ð *r   úint32[:], int32, int32[:]rb   r>   rH   r&   rV   r   )r   r?   r0   r1   Úastyper“   r]   r4   rJ   r2   r   r   )r6   rÈ   Ú	my_gufuncÚarrÚgotr^   Úaxs          r   Útest_scalar_input_core_typez1TestGUVectorizeScalar.test_scalar_input_core_type9  sY  € ð	*ð 	*ð 	*ð4•KÐ!<Ð =Ø -Ø'+¤{ð4ñ 4ô 4à4:ñ<ô <ˆ	õ
 Œi˜‰mŒm×"Ò"¥2¤8Ñ,Ô,ˆØˆi˜˜QÑÔˆå”= Ñ%Ô%ˆØˆˆs�A�xÑ Ô Ð å
Œ
×Ò  XÑ.Ô.Ð.õ Œi˜‰mŒm×"Ò"¥2¤8Ñ,Ô,×4Ò4°R¸Ñ;Ô;ˆØˆi˜˜QÑÔˆå”= Ñ%Ô%ˆÝ˜œ qÔ)Ñ*Ô*ð 	-ð 	-ˆBØˆF�3�r”7˜A˜x¨œ|Ñ,Ô,Ð,Ð,å
Œ
×Ò  XÑ.Ô.Ð.Ð.Ð.r   c                 óü   — |                       t          ¦  «        5 }t          dgd| j        ¬¦  «        d„ ¦   «         }d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         d S )NrÉ   z(n),(n)->(n)r>   c                 ó   — d S ©Nr   )r   r¹   Úcs      r   rÈ   zGTestGUVectorizeScalar.test_scalar_input_core_type_error.<locals>.pyfuncW  ó	   € ð �r   z2scalar type int32 given for non scalar argument #2©r¬   r–   r   r?   re   r®   r¯   ©r6   r³   rÈ   s      r   Ú!test_scalar_input_core_type_errorz7TestGUVectorizeScalar.test_scalar_input_core_type_errorU  sÕ   € Ø×Ò�yÑ)Ô)ð 	¨VÝÐ5Ð6¸Ø $¤ð-ñ -ô -ðð ñ-ô -ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
 	×ÒÐMÝ˜VÔ-Ñ.Ô.ñ	0ô 	0ð 	0ð 	0ð 	0ó   ›"A	Á	AÁAc                 óü   — |                       t          ¦  «        5 }t          dgd| j        ¬¦  «        d„ ¦   «         }d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         d S )Nzint32[:], int32[:]z
(m,n)->(n)r>   c                 ó   — d S rÒ   r   )r   r¹   s     r   rÈ   z8TestGUVectorizeScalar.test_ndim_mismatch.<locals>.pyfunc`  rÔ   r   z,type and shape signature mismatch for arg #1rÕ   rÖ   s      r   Útest_ndim_mismatchz(TestGUVectorizeScalar.test_ndim_mismatch^  sÕ   € Ø×Ò�yÑ)Ô)ð 	¨VÝÐ.Ð/°Ø $¤ð-ñ -ô -ðð ñ-ô -ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
 	×ÒÐGÝ˜VÔ-Ñ.Ô.ñ	0ô 	0ð 	0ð 	0ð 	0rØ   N)
rg   rf   rh   ri   r?   r¿   rÄ   rÏ   r×   rÛ   r   r   r   r¼   r¼     sp   € € € € € ðð ð €Fð3ð 3ð 3ð2.ð .ð .ð/ð /ð /ð80ð 0ð 0ð0ð 0ð 0ð 0ð 0r   r¼   c                   ó   — e Zd ZdZdZdS )ÚTestGUVectorizeScalarParallelFrm   Nrn   r   r   r   rÝ   rÝ   h  rp   r   rÝ   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚTestGUVectorizePicklingc                 óö  — t          dgd¦  «        d„ ¦   «         }t          j        |¦  «        }t          j        |¦  «        }|                      |j        |j        ¦  «         |                      |j        |j        ¦  «         |                      |j        |j        ¦  «         |                      |j        j	        |j        j	        ¦  «         |  
                    |j        ¦  «         |                     ¦   «          |  
                    |j        ¦  «         |                       |d¦  «         |d¦  «        ¦  «         t          j        d¦  «        }|                       ||¦  «         ||¦  «        ¦  «         dS )zNon-dynamic gufunc.
        zf8,f8[:]ú()->()c                 ó   — | dz  |d d …<   d S ©Nr&   r   ©r   r    s     r   ÚdoublezFTestGUVectorizePickling.test_pickle_gufunc_non_dyanmic.<locals>.doubleq  ó   € à˜‘UˆC���‰FˆFˆFr   ç      à?rH   N)r   ÚpickleÚdumpsÚloadsre   Ú_frozenÚidentityrv   Úgufunc_builderÚ_sigsr’   Údisable_compiler«   r0   r1   )r6   rå   ÚserÚclonedrÌ   s        r   Útest_pickle_gufunc_non_dyanmicz6TestGUVectorizePickling.test_pickle_gufunc_non_dyanmicn  sb  € õ 
�j�\ 8Ñ	,Ô	,ð	ð 	ñ 
-Ô	,ð	õ Œl˜6Ñ"Ô"ˆÝ”˜cÑ"Ô"ˆð 	×Ò˜œ¨¬Ñ8Ô8Ð8Ø×Ò˜œ¨&¬/Ñ:Ô:Ð:Ø×Ò˜Ô*¨FÔ,=Ñ>Ô>Ð>Ø×Ò˜Ô.Ô4ØÔ.Ô4ñ	6ô 	6ð 	6ð 	�Š˜œÑ'Ô'Ð'à×ÒÑ Ô Ð Ø�Š˜œÑ'Ô'Ð'ð 	×Ò   s¡¤¨V¨V°C©[¬[Ñ9Ô9Ð9åŒi˜‰mŒmˆØ×Ò   s¡¤¨V¨V°C©[¬[Ñ9Ô9Ð9Ð9Ð9r   c                 óZ  — t          dd¬¦  «        d„ ¦   «         }t          j        |¦  «        }t          j        |¦  «        }|                      |j        |j        ¦  «         |                      |j        |j        ¦  «         |                      |j        |j        ¦  «         |                      |j        j	        |j        j	        ¦  «         |  
                    |j        ¦  «         t          j        d¦  «        }t          j        d¦  «        } |d|¬¦  «          |d|¬¦  «         |                      ||¦  «         t          j        d¦  «        }t          j        |¦  «        }t          j        |¦  «        } |||¬¦  «          |||¬¦  «         |                      ||¦  «         dS )	z:Dynamic gufunc w/o prepopulating before pickling.
        rá   r¥   ©rì   c                 ó   — | dz  |d d …<   d S rã   r   rä   s     r   rå   zLTestGUVectorizePickling.test_pickle_gufunc_dyanmic_null_init.<locals>.doubleŽ  ræ   r   rç   r   rH   N)r   rè   ré   rê   re   rë   rì   rv   rí   rî   ÚassertFalser0   r€   r«   r1   r]   )r6   rå   rð   rñ   ÚexpectrÍ   rÌ   s          r   Ú$test_pickle_gufunc_dyanmic_null_initz<TestGUVectorizePickling.test_pickle_gufunc_dyanmic_null_init‹  s«  € õ 
�X¨Ð	*Ñ	*Ô	*ð	ð 	ñ 
+Ô	*ð	õ Œl˜6Ñ"Ô"ˆÝ”˜cÑ"Ô"ˆð 	×Ò˜œ¨¬Ñ8Ô8Ð8Ø×Ò˜œ¨&¬/Ñ:Ô:Ð:Ø×Ò˜Ô*¨FÔ,=Ñ>Ô>Ð>Ø×Ò˜Ô.Ô4ØÔ.Ô4ñ	6ô 	6ð 	6ð 	×Ò˜œÑ(Ô(Ð(õ ”˜!‘”ˆÝŒh�q‰kŒkˆØˆˆs˜ÐÑÔÐØˆˆs˜ÐÑÔÐØ×Ò ¨Ñ,Ô,Ð,åŒi˜‰mŒmˆÝ”˜sÑ#Ô#ˆÝŒm˜CÑ Ô ˆØˆˆs˜ÐÑÔÐØˆˆs˜ÐÑÔÐØ×Ò ¨Ñ,Ô,Ð,Ð,Ð,r   c                 óŠ  — t          dd¬¦  «        d„ ¦   «         }t          j        d¦  «        }t          j        d¦  «        } |d|¬¦  «         t          j        d¦  «        }t          j        |¦  «        }t          j        |¦  «        } |||¬¦  «         t          j        |¦  «        }t          j        |¦  «        }|                      |j	        |j	        ¦  «         |                      |j
        |j
        ¦  «         |                      |j        |j        ¦  «         |                      |j        j        |j        j        ¦  «         |                      |j	        ¦  «         |                     ¦   «          |                      |j	        ¦  «         t          j        d¦  «        }t          j        d¦  «        } |d|¬¦  «          |d|¬¦  «         |                      ||¦  «         t          j        |¦  «        }t          j        |¦  «        } |||¬¦  «          |||¬¦  «         |                      ||¦  «         dS )	zªDynamic gufunc prepopulated before pickling.

        Once unpickled, we disable compilation to verify that the gufunc
        compilation state is carried over.
        rá   r¥   rô   c                 ó   — | dz  |d d …<   d S rã   r   rä   s     r   rå   zNTestGUVectorizePickling.test_pickle_gufunc_dynamic_initialized.<locals>.double³  ræ   r   rç   r   rH   N)r   r0   r€   r1   r]   rè   ré   rê   re   rë   rì   rv   rí   rî   rö   rï   r’   r«   )r6   rå   r÷   rÍ   rÌ   rð   rñ   s          r   Ú&test_pickle_gufunc_dynamic_initializedz>TestGUVectorizePickling.test_pickle_gufunc_dynamic_initialized­  s5  € õ 
�X¨Ð	*Ñ	*Ô	*ð	ð 	ñ 
+Ô	*ð	õ ”˜!‘”ˆÝŒh�q‰kŒkˆØˆˆs˜ÐÑÔÐåŒi˜‰mŒmˆÝ”˜sÑ#Ô#ˆÝŒm˜CÑ Ô ˆØˆˆs˜ÐÑÔÐõ Œl˜6Ñ"Ô"ˆÝ”˜cÑ"Ô"ˆð 	×Ò˜œ¨¬Ñ8Ô8Ð8Ø×Ò˜œ¨&¬/Ñ:Ô:Ð:Ø×Ò˜Ô*¨FÔ,=Ñ>Ô>Ð>Ø×Ò˜Ô.Ô4ØÔ.Ô4ñ	6ô 	6ð 	6ð 	×Ò˜œÑ(Ô(Ð(ð 	×ÒÑ Ô Ð Ø�Š˜œÑ'Ô'Ð'å”˜!‘”ˆÝŒh�q‰kŒkˆØˆˆs˜ÐÑÔÐØˆˆs˜ÐÑÔÐØ×Ò ¨Ñ,Ô,Ð,å”˜sÑ#Ô#ˆÝŒm˜CÑ Ô ˆØˆˆs˜ÐÑÔÐØˆˆs˜ÐÑÔÐØ×Ò ¨Ñ,Ô,Ð,Ð,Ð,r   N)rg   rf   rh   rò   rø   rû   r   r   r   rß   rß   m  sB   € € € € € ð:ð :ð :ð: -ð  -ð  -ðD/-ð /-ð /-ð /-ð /-r   rß   Ú__main__)Úunittestrè   Únumpyr0   Únumbar   r   r   r   r   Únumba.np.ufuncr   Únumba.tests.supportr	   r
   r   r!   r#   rl   rr   r¼   rÝ   rß   rg   Úmainr   r   r   ú<module>r     sä  ðØ €€€Ø €€€à Ð Ð Ð à 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø &Ð &Ð &Ð &Ð &Ð &Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ð-ð -ð -ðð ð ðFAð FAð FAð FAð FA�ñ FAô FAð FAðRð ð ð ð ˜ñ ô ð ð
`;ð `;ð `;ð `;ð `;˜ñ `;ô `;ð `;ðFZ0ð Z0ð Z0ð Z0ð Z0˜Hñ Z0ô Z0ð Z0ðzð ð ð ð Ð$9ñ ô ð ð
o-ð o-ð o-ð o-ð o-˜hñ o-ô o-ð o-ðd ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   