§
    2@Äj¯4  ã                   ó&  — d Z ddlZddlZddlZddlZddlmZ ddlZddl	m
Z
mZmZmZ ddlmZmZmZ ddlmc mc mZ ddlmZmZmZmZ ddlZddlmZ d„ Zd	„ Zd
„ Z dZ!dZ"dZ#d„ Z$dZ%d„ Z& e&e¦  «        Z' e&e¦  «        Z(d„ Z) e)e¦  «        Z* e)e¦  «        Z+ ej,         ej-        ej.        ¦  «         ej-        ej.        ¦  «        ej/        ej/        ¦  «        Z0 ej,         ej-        ej1        ¦  «         ej-        ej1        ¦  «        ej/        ej/        ¦  «        Z2 ej,        ej3        ej3        ej/        ej/        ¦  «        Z4 G d„ de¦  «        Z5 G d„ de¦  «        Z6e G d„ de¦  «        ¦   «         Z7e8dk    r ej9        ¦   «          dS dS )z
Tests for @cfunc and friends.
é    N)Ú
namedtuple)ÚcfuncÚcarrayÚfarrayÚnjit)ÚtypesÚtypingÚutils)ÚTestCaseÚskip_unless_cffiÚtagÚcaptured_stderr)Únumpy_supportc                 ó   — | |z   S ©N© ©ÚaÚbs     úGC:\Projects\Historical\venv\Lib\site-packages\numba/tests/test_cfunc.pyÚadd_usecaser      s   € Øˆq‰5€Ló    c                 ó   — | |z  }|S r   r   )r   r   Úcs      r   Údiv_usecaser      s   € Ø	ˆA‰€AØ€Hr   c                 ó   — | dz  S )Né   r   )r   s    r   Úsquare_usecaser      s   € Ø�‰6€Mr   zfloat64(float64, float64)zfloat64(int64, int64)zfloat64(float64)c                 ó(   — t          ¦   «          | |z   S r   )Úobjectr   s     r   Úobjmode_usecaser!   '   s   € Ý
�H„H€HØˆq‰5€Lr   é   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó0  •—  ‰	| ||f¦  «        } ‰	|t           ¦  «        }|j        |d<   |j        |dd…<   |j        |dd…<   |j        j        |d<   |j        j        |d<   d}t          j        ||¦  «        D ]\  }}||||f         ||z
  z  z  }Œ||d<   d S )Nr   é   é   é   é   é   )	ÚCARRAY_USECASE_OUT_LENÚndimÚshapeÚstridesÚflagsÚc_contiguousÚf_contiguousÚnpÚndindex©
Úin_ptrÚout_ptrÚmÚnÚin_ÚoutÚsÚiÚjÚfuncs
            €r   Úcfarray_usecasez-make_cfarray_usecase.<locals>.cfarray_usecase1   s½   ø€ àˆd�6˜A˜q˜6Ñ"Ô"ˆàˆd�7Õ2Ñ3Ô3ˆØ”ˆˆA‰Ø”9ˆˆAˆaˆC‰Ø”;ˆˆAˆaˆC‰Ø”Ô'ˆˆA‰Ø”Ô'ˆˆA‰ØˆÝ”J˜q !Ñ$Ô$ð 	%ð 	%‰DˆAˆqØ��Q˜�T”˜a !™eÑ$Ñ$ˆAˆAØˆˆA‰ˆˆr   r   ©r=   r>   s   ` r   Úmake_cfarray_usecaser@   /   s$   ø€ ðð ð ð ð ð Ðr   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó^  •—  ‰	| ||ft           j        ¬¦  «        } ‰	|t          t           j        ¦  «        }|j        |d<   |j        |dd…<   |j        |dd…<   |j        j        |d<   |j        j        |d<   d}t          j	        ||¦  «        D ]\  }}||||f         ||z
  z  z  }Œ||d<   d S )N©Údtyper   r%   r&   r'   r(   r)   )
r1   Úfloat32r*   r+   r,   r-   r.   r/   r0   r2   r3   s
            €r   r>   z3make_cfarray_dtype_usecase.<locals>.cfarray_usecaseI   sÈ   ø€ àˆd�6˜A˜q˜6­¬Ð4Ñ4Ô4ˆàˆd�7Õ2µB´JÑ?Ô?ˆØ”ˆˆA‰Ø”9ˆˆAˆaˆC‰Ø”;ˆˆAˆaˆC‰Ø”Ô'ˆˆA‰Ø”Ô'ˆˆA‰ØˆÝ”J˜q !Ñ$Ô$ð 	%ð 	%‰DˆAˆqØ��Q˜�T”˜a !™eÑ$Ñ$ˆAˆAØˆˆA‰ˆˆr   r   r?   s   ` r   Úmake_cfarray_dtype_usecaserF   F   s$   ø€ ðð ð ð ð ð Ðr   c                   óB   — e Zd Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Z	dS )Ú	TestCFuncc                 óh  —  t          t          ¦  «        t          ¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        t          ¦  «         |j        }|  	                    |t          ¦  «         |                      d|¦  «         |j        }|  	                    |t          ¦  «         |j        }|                      t          j        |t          j        ¦  «        j        |¦  «         |                       |dd¦  «        d¦  «         dS )z8
        Basic usage and properties of a cfunc.
        r   ç       @g      @g      @N)r   Úadd_sigr   ÚassertEqualÚ__name__Ú__qualname__ÚassertIsÚ__wrapped__Únative_nameÚassertIsInstanceÚstrÚassertInÚaddressÚintÚctypesÚcastÚc_void_pÚvalueÚassertPreciseEqual)ÚselfÚfÚsymbolÚaddrÚcts        r   Ú
test_basiczTestCFunc.test_basick   s  € ð �E•'‰NŒN�;Ñ'Ô'ˆà×Ò˜œ ]Ñ3Ô3Ð3Ø×Ò˜œ¨Ñ7Ô7Ð7Ø�Š�a”m¥[Ñ1Ô1Ð1à”ˆØ×Ò˜f¥cÑ*Ô*Ð*Ø�Š�m VÑ,Ô,Ð,àŒyˆØ×Ò˜d¥CÑ(Ô(Ð(àŒXˆØ×Ò�œ R­¬Ñ9Ô9Ô?ÀÑFÔFÐFà×Ò   3¨¡¤¨cÑ2Ô2Ð2Ð2Ð2r   c                 óä   — ddl m} |                     ¦   «         \  }} t          t          ¦  «        t
          ¦  «        }|                     |j        ¦  «        }|                      |d¦  «         d S )Nr   )Úcffi_usecasesg      @)	Únumba.testsrc   Úload_inline_moduler   Ú
square_sigr   Ú_numba_test_funcptrÚcffir[   )r\   rc   ÚffiÚlibr]   Úress         r   Ú	test_cffizTestCFunc.test_cffi�   sq   € à-Ð-Ð-Ð-Ð-Ð-Ø ×3Ò3Ñ5Ô5‰ˆˆSà�E•*ÑÔ�nÑ-Ô-ˆà×%Ò% a¤fÑ-Ô-ˆØ×Ò  TÑ*Ô*Ð*Ð*Ð*r   c                 óº   —  t          t          dt          j        i¬¦  «        t          ¦  «        }|                      |                     dd¦  «        d¦  «         d S )Nr   )Úlocalsr"   r&   rJ   )r   Údiv_sigr   Úint64r   r[   rW   )r\   r]   s     r   Útest_localszTestCFunc.test_locals‹   sO   € ð 6�E•' 3­¬Ð"4Ð5Ñ5Ô5µkÑBÔBˆØ×Ò §¢¨¨A¡¤°Ñ4Ô4Ð4Ð4Ð4r   c                 ó^  —  t          t          ¦  «        t          ¦  «        }t          ¦   «         5 }|                      |                     dd¦  «        d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |                     ¦   «         d¦  «         t          ¦   «         5 }|                     dd¦  «        }|                      |d¦  «         d d d ¦  «         n# 1 swxY w Y   |                     ¦   «         }|                      d|¦  «         |                      d|¦  «         d S )	Nr'   r   g      @Ú r   g        zZeroDivisionError:zException ignored)	r   ro   r   r   r[   rW   rL   ÚgetvaluerT   )r\   r]   Úerrrk   s       r   Útest_errorszTestCFunc.test_errors‘   s{  € Ø�E•'‰NŒN�;Ñ'Ô'ˆåÑÔð 	9 #Ø×#Ò# A§H¢H¨Q°¡N¤N°CÑ8Ô8Ð8ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9à×Ò˜Ÿš™œ¨Ñ,Ô,Ð,åÑÔð 	. #Ø—(’(˜1˜a‘.”.ˆCð ×#Ò# C¨Ñ-Ô-Ð-ð		.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð
 �lŠl‰nŒnˆØ�ŠÐ*¨CÑ0Ô0Ð0Ø�ŠÐ)¨3Ñ/Ô/Ð/Ð/Ð/s#   ±+A(Á(A,Á/A,Â)-C"Ã"C&Ã)C&c                 óÔ   —  t          t          ¦  «        t          ¦  «        }|                     ¦   «         }|                      |j        |¦  «         |                      d|¦  «         d S )Nzfadd double)r   rK   r   Úinspect_llvmrT   rQ   )r\   r]   Úirs      r   Útest_llvm_irzTestCFunc.test_llvm_ir¡   sV   € Ø�E•'‰NŒN�;Ñ'Ô'ˆØ�^Š^ÑÔˆØ�Š�a”m RÑ(Ô(Ð(Ø�Š�m RÑ(Ô(Ð(Ð(Ð(r   c                 óž  — |                       t          ¦  «        5   t          t          d¬¦  «        t          ¦  «         ddd¦  «         n# 1 swxY w Y   |                      ¦   «         5 } t          t          ¦  «        t          ¦  «         ddd¦  «         n# 1 swxY w Y   |                      dt          |j	        ¦  «        ¦  «         dS )z7
        Object mode is currently unsupported.
        T)ÚforceobjNzUntyped global name 'object')
ÚassertRaisesÚNotImplementedErrorr   rK   r   ÚassertTypingErrorr!   rT   rS   Ú	exception)r\   Úraisess     r   Útest_object_modezTestCFunc.test_object_mode§   s+  € ð ×ÒÕ2Ñ3Ô3ð 	7ð 	7Ø)�E•' DÐ)Ñ)Ô)­+Ñ6Ô6Ð6ð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7à×#Ò#Ñ%Ô%ð 	,¨Ø�E•'‰NŒN�?Ñ+Ô+Ð+ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,à�ŠÐ4µc¸&Ô:JÑ6KÔ6KÑLÔLÐLÐLÐLs#   ›%AÁAÁAÁ+#BÂBÂ!BN)
rM   Ú
__module__rN   ra   r   rl   rq   rv   rz   r‚   r   r   r   rH   rH   i   s€   € € € € € ð3ð 3ð 3ð, ð+ð +ñ Ôð+ð5ð 5ð 5ð0ð 0ð 0ð )ð )ð )ðMð Mð Mð Mð Mr   rH   c                   óZ   — 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S )Ú
TestCArrayz*
    Tests for carray() and farray().
    c                 ó  — t          j        dd¦  «                             d¦  «                             t           j        ¦  «        }t          j        t          t           j        ¬¦  «        } | ||¦  «         ||¦  «        g|j        ¢R Ž  |S )Né
   é   ©r   r&   rC   )r1   ÚarangeÚreshapeÚastyperE   Úemptyr*   r,   )r\   Úpointer_factoryr=   r   r9   s        r   Úrun_carray_usecasezTestCArray.run_carray_usecase·   s}   € ÝŒI�b˜"ÑÔ×%Ò% fÑ-Ô-×4Ò4µR´ZÑ@Ô@ˆÝŒhÕ-µR´ZÐ@Ñ@Ô@ˆØˆˆ_ˆ_˜QÑÔ  °Ñ!5Ô!5Ð@¸¼Ð@Ð@Ð@Ð@Øˆ
r   c                 óŠ   — |                       ||¦  «        }|                       ||¦  «        }|                      ||¦  «         d S r   )r�   r[   )r\   rŽ   Úpyfuncr   ÚexpectedÚgots         r   Úcheck_carray_usecasezTestCArray.check_carray_usecase½   sH   € Ø×*Ò*¨?¸FÑCÔCˆØ×%Ò% o°uÑ=Ô=ˆØ×Ò ¨#Ñ.Ô.Ð.Ð.Ð.r   c                 óJ   — |j                              t           j        ¦  «        S r   )rW   Údata_asrY   ©r\   Úarrs     r   Úmake_voidptrzTestCArray.make_voidptrÂ   s   € ØŒz×!Ò!¥&¤/Ñ2Ô2Ð2r   c                 ón   — |j                              t          j        t           j        ¦  «        ¦  «        S r   )rW   r–   ÚPOINTERÚc_floatr—   s     r   Úmake_float32_pointerzTestCArray.make_float32_pointerÅ   s$   € ØŒz×!Ò!¥&¤.µ´Ñ"@Ô"@ÑAÔAÐAr   c                 ón   — |j                              t          j        t           j        ¦  «        ¦  «        S r   )rW   r–   r›   Úc_doubler—   s     r   Úmake_float64_pointerzTestCArray.make_float64_pointerÈ   s$   € ØŒz×!Ò!¥&¤.µ´Ñ"AÔ"AÑBÔBÐBr   c                 óþ  ‡ — ˆ fd„}t          j        d¦  «                             d¦  «                             t           j        ¦  «                             |¬¦  «        } |‰                      |¦  «        |j        ¦  «        } |||¦  «          |‰                      |¦  «        |j        ¦  «        } ||| 	                    d¦  «        ¦  «          |‰                      |¦  «        |j        |j
        ¦  «        } |||¦  «          |‰                      |¦  «        |j        t           j        ¦  «        } |||¦  «          |‰                      |¦  «        |j        |j
        ¦  «        } |||¦  «          |‰                      |¦  «        |j        t           j        ¦  «        } |||                     t           j        ¦  «        ¦  «         ‰                      t          ¦  «        5   |‰                      |¦  «        |j        ¦  «         d d d ¦  «         n# 1 swxY w Y   ‰                      t          ¦  «        5   ||j        j        |j        ¦  «         d d d ¦  «         n# 1 swxY w Y   ‰                      t          ¦  «        5 } |‰                      |¦  «        |j        t           j        ¦  «         d d d ¦  «         n# 1 swxY w Y   ‰                      dt'          |j        ¦  «        ¦  «         d S )Nc                 óˆ   •— ‰                      | |¦  «         ‰                     | j        j        |j        j        ¦  «         d S r   )r[   rL   rW   Údata)r“   r’   r\   s     €r   Úeqz*TestCArray.check_carray_farray.<locals>.eqÌ   s>   ø€ à×#Ò# C¨Ñ2Ô2Ð2à×Ò˜SœZœ_¨h¬oÔ.BÑCÔCÐCÐCÐCr   r(   r‰   )ÚorderÚKz%mismatching dtype 'int32' for pointer)r1   rŠ   r‹   rŒ   rE   Úcopyr�   r,   ÚsizeÚravelrD   r™   Úint32Úviewr}   Ú	TypeErrorrW   r£   rT   rS   r€   )r\   r=   r¥   r¤   Úbaser   r�   s   `      r   Úcheck_carray_farrayzTestCArray.check_carray_farrayË   s“  ø€ ð	Dð 	Dð 	Dð 	Dð 	Dõ Œy˜‰|Œ|×#Ò# FÑ+Ô+×2Ò2µ2´:Ñ>Ô>×CÒCÈ%ÐCÑPÔPˆð ˆD�×*Ò*¨4Ñ0Ô0°$´*Ñ=Ô=ˆØ
ˆˆ1ˆd‰ŒˆàˆD�×*Ò*¨4Ñ0Ô0°$´)Ñ<Ô<ˆØ
ˆˆ1ˆd�jŠj˜‰oŒoÑÔÐð ˆD�×*Ò*¨4Ñ0Ô0°$´*¸d¼jÑIÔIˆØ
ˆˆ1ˆd‰ŒˆØˆD�×*Ò*¨4Ñ0Ô0°$´*½b¼jÑIÔIˆØ
ˆˆ1ˆd‰Œˆð ˆD�×"Ò" 4Ñ(Ô(¨$¬*°d´jÑAÔAˆØ
ˆˆ1ˆd‰ŒˆØˆD�×"Ò" 4Ñ(Ô(¨$¬*µb´hÑ?Ô?ˆØ
ˆˆ1ˆd�iŠi�œÑ!Ô!Ñ"Ô"Ð"ð ×Ò�yÑ)Ô)ð 	6ð 	6ØˆD�×"Ò" 4Ñ(Ô(¨$¬*Ñ5Ô5Ð5ð	6ð 	6ð 	6ñ 	6ô 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6øøøð 	6ð 	6ð 	6ð 	6ð ×Ò�yÑ)Ô)ð 	/ð 	/ØˆD�”Ô! 4¤:Ñ.Ô.Ð.ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð ×Ò�yÑ)Ô)ð 	H¨VØˆD�×*Ò*¨4Ñ0Ô0°$´*½b¼hÑGÔGÐGð	Hð 	Hð 	Hñ 	Hô 	Hð 	Hð 	Hð 	Hð 	Hð 	Hð 	Høøøð 	Hð 	Hð 	Hð 	Hà�ŠÐ=Ý˜&Ô*Ñ+Ô+ñ	-ô 	-ð 	-ð 	-ð 	-s6   Ç+%HÈH È#H ÉI)É)I-É0I-Ê0K
Ë
KËKc                 ó<   — |                       t          d¦  «         dS )z,
        Test pure Python carray().
        ÚCN)r®   r   ©r\   s    r   Útest_carrayzTestCArray.test_carrayó   ó    € ð 	× Ò ¥¨Ñ-Ô-Ð-Ð-Ð-r   c                 ó<   — |                       t          d¦  «         dS )z,
        Test pure Python farray().
        ÚFN)r®   r   r±   s    r   Útest_farrayzTestCArray.test_farrayù   r³   r   c              #   óò   ‡K  — t           j        t           j        t           j        t           j        t           j        t           j        fD ].Št          ˆfd„|j        D ¦   «         ¦  «        } |j	        |Ž V — Œ/dS )zŠ
        Generate a bunch of concrete signatures by varying the width
        and signedness of size arguments (see issue #1923).
        c              3   ó@   •K  — | ]}|t           j        k    r‰n|V — Œd S r   )r   Úintp)Ú.0r   Úactual_sizes     €r   ú	<genexpr>z.TestCArray.make_carray_sigs.<locals>.<genexpr>  sE   øè è € ð 3ð 3Øð )*­U¬Zª¨˜˜¸Qð 3ð 3ð 3ð 3ð 3ð 3r   N)
r   r¹   rª   ÚintcÚuintpÚuint32ÚuintcÚtupleÚargsÚreturn_type)r\   Ú
formal_sigrÂ   r»   s      @r   Úmake_carray_sigszTestCArray.make_carray_sigsÿ   s�   øè è € õ
 "œJ­¬µU´ZÝ!œK­¬µu´{ðDð 	0ð 	0ˆKåð 3ð 3ð 3ð 3Ø",¤/ð3ñ 3ô 3ñ 3ô 3ˆDà(�*Ô(¨$Ð/Ð/Ð/Ð/Ð/ð		0ð 	0r   c                 óø  — |}|                       t          ¦  «        D ];} t          |¦  «        |¦  «        }|                      | j        ||j        ¦  «         Œ<|}|                       t          ¦  «        D ];} t          |¦  «        |¦  «        }|                      | j        ||j        ¦  «         Œ<|                      ¦   «         5 } t          t          ¦  «        |¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      dt          |j
        ¦  «        ¦  «         |}|                       t          ¦  «        D ];} t          |¦  «        |¦  «        }|                      | j        ||j        ¦  «         Œ<d S )Nz7mismatching dtype 'float32' for pointer type 'float64*')rÅ   Úcarray_float32_usecase_sigr   r”   r�   rW   r   Úcarray_float64_usecase_sigrT   rS   r€   Úcarray_voidptr_usecase_sig)r\   ÚusecaseÚdtype_usecaser‘   Úsigr]   r�   s          r   Úcheck_numba_carray_farrayz$TestCArray.check_numba_carray_farray
  sÃ  € àˆØ×(Ò(Õ)CÑDÔDð 	Sð 	SˆCØ•�c‘
”
˜6Ñ"Ô"ˆAØ×%Ò% dÔ&?ÀÈÌÑRÔRÐRÐRð ˆØ×(Ò(Õ)CÑDÔDð 	Sð 	SˆCØ•�c‘
”
˜6Ñ"Ô"ˆAØ×%Ò% dÔ&?ÀÈÌÑRÔRÐRÐRà×#Ò#Ñ%Ô%ð 	:¨Ø1•Õ0Ñ1Ô1°&Ñ9Ô9ˆAð	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:à�ŠÐOÝ˜&Ô*Ñ+Ô+ñ	-ô 	-ð 	-ð ˆØ×(Ò(Õ)CÑDÔDð 	Sð 	SˆCØ•�c‘
”
˜6Ñ"Ô"ˆAØ×%Ò% dÔ&?ÀÈÌÑRÔRÐRÐRð	Sð 	Ss   ÃC/Ã/C3Ã6C3c                 óF   — |                       t          t          ¦  «         dS )zK
        Test Numba-compiled carray() against pure Python carray()
        N)rÍ   Úcarray_usecaseÚcarray_dtype_usecaser±   s    r   Útest_numba_carrayzTestCArray.test_numba_carray"  ó!   € ð 	×&Ò&¥~Õ7KÑLÔLÐLÐLÐLr   c                 óF   — |                       t          t          ¦  «         dS )zK
        Test Numba-compiled farray() against pure Python farray()
        N)rÍ   Úfarray_usecaseÚfarray_dtype_usecaser±   s    r   Útest_numba_farrayzTestCArray.test_numba_farray(  rÒ   r   N)rM   rƒ   rN   Ú__doc__r�   r”   r™   r�   r    r®   r²   r¶   rÅ   rÍ   rÑ   rÖ   r   r   r   r…   r…   ²   sä   € € € € € ðð ðð ð ð/ð /ð /ð
3ð 3ð 3ðBð Bð BðCð Cð Cð&-ð &-ð &-ðP.ð .ð .ð.ð .ð .ð	0ð 	0ð 	0ðSð Sð Sð0Mð Mð MðMð Mð Mð Mð Mr   r…   c                   ó.   — e Zd ZdZefd„Zd„ Zd„ Zd„ ZdS )ÚTestCffiStructzÎ
typedef struct _big_struct {
    int    i1;
    float  f2;
    double d3;
    float  af4[9];
} big_struct;

typedef struct _error {
    int bits:4;
} error;

typedef double (*myfunc)(big_struct*, size_t);
c                 óP   — ddl m}  |¦   «         }|                     |¦  «         |S )Nr   )ÚFFI)rh   rÛ   Úcdef)r\   ÚsrcrÛ   ri   s       r   Úget_ffizTestCffiStruct.get_ffi@  s3   € ØÐÐÐÐÐàˆc‰eŒeˆØ�Š�‰ŒˆØˆ
r   c                 óf  — |                       ¦   «         }|                     d¦  «        }t          j        |d¬¦  «        }|                      |t
          j        ¦  «         |                      t          |¦  «        d¦  «         |                      |                     d¦  «        t
          j	        ¦  «         |                      |                     d¦  «        t
          j
        ¦  «         |                      |                     d¦  «        t
          j        ¦  «         |                      |                     d¦  «        t          j        t
          j
        d	¬
¦  «        ¦  «         |                     d¦  «        }t          j        |d¬¦  «        }|                      |t          j        ¦  «         |                      |j        d         t          j        |¦  «        ¦  «         |                      |j        d         t
          j        ¦  «         |                      |j        t
          j        ¦  «         d S )NÚ
big_structT©Úuse_record_dtypeé   Úi1Úf2Úd3Úaf4)é	   )rD   r,   Úmyfuncr   r%   )rÞ   ÚtypeofÚcffi_supportÚmap_typerR   r   ÚRecordrL   Úlenrª   rE   Úfloat64ÚNestedArrayr	   Ú	SignaturerÂ   ÚCPointerr¾   rÃ   )r\   ri   rà   Únbtyperé   rÌ   s         r   Útest_type_parsingz TestCffiStruct.test_type_parsingG  s¶  € Ø�lŠl‰nŒnˆà—Z’Z Ñ-Ô-ˆ
ÝÔ& zÀDÐIÑIÔIˆØ×Ò˜f¥e¤lÑ3Ô3Ð3Ø×Ò�˜V™œ aÑ(Ô(Ð(Ø×Ò˜Ÿš tÑ,Ô,­e¬kÑ:Ô:Ð:Ø×Ò˜Ÿš tÑ,Ô,­e¬mÑ<Ô<Ð<Ø×Ò˜Ÿš tÑ,Ô,­e¬mÑ<Ô<Ð<Ø×ÒØ�MŠM˜%Ñ Ô ÝÔ¥E¤M¸Ð>Ñ>Ô>ñ	
ô 	
ð 	
ð —’˜HÑ%Ô%ˆÝÔ# F¸TÐBÑBÔBˆØ×Ò˜c¥6Ô#3Ñ4Ô4Ð4Ø×Ò˜œ !œ¥e¤n°VÑ&<Ô&<Ñ=Ô=Ð=Ø×Ò˜œ !œ¥e¤kÑ2Ô2Ð2Ø×Ò˜œ­%¬-Ñ8Ô8Ð8Ð8Ð8r   c                 óˆ  ‡— |                       ¦   «         }|                     d¦  «        }t          j        |d¬¦  «        }t          j        |                     d¦  «        d¬¦  «        }t          d„ ¦   «         Št          |¦  «        ˆfd„¦   «         }|                     d¦  «        }|                     d|¦  «        }t          d	¦  «        D ]]}|d
z  ||         _	        |dz  ||         _
        d|z   dz  ||         _        t          d¦  «        D ]}	|dz  |	z   ||         j        |	<   ŒŒ^t          |                     d|¦  «        ¦  «        }
|                     |
d	¦  «        }t          j        |                     |¦  «        t%          j        |¦  «        d	¬¦  «        } ‰|¦  «        }|                      ||¦  «         d S )Nrà   Trá   ré   c                 óÀ   — d}t          | j        ¦  «        D ]F}| |         }||j        |j        z  |j        z  z  }|| |         j                             ¦   «         z  }ŒG|S )Nr   )Úranger¨   rä   rå   ræ   rç   Úsum)r­   Útmpr;   Úelems       r   Úcalcz0TestCffiStruct.test_cfunc_callback.<locals>.calcd  sd   € àˆCÝ˜4œ9Ñ%Ô%ð )ð )�Ø˜A”w�Ø�t”w ¤Ñ(¨4¬7Ñ2Ñ2�Ø�t˜A”w”{—’Ñ(Ô(Ñ(��ØˆJr   c                 ó:   •— t          | |¦  «        } ‰|¦  «        S r   )r   )Úptrr7   r­   rû   s      €r   Úfooz/TestCffiStruct.test_cfunc_callback.<locals>.foom  s   ø€ å˜#˜q‘>”>ˆDØ�4˜‘:”:Ðr   zbig_struct[3]zbig_struct*r&   é{   éÕ   r%   rè   r‡   Úsize_t)ÚbufferrD   r,   )rÞ   rê   rë   rì   r   r   ÚnewrX   r÷   rä   rå   ræ   rç   rV   rW   r1   Úndarrayr  r   Úas_dtyperL   )r\   ri   rà   Únb_big_structrÌ   rþ   Úmydatarý   r;   r<   r_   r“   ÚarrayÚexpectrû   s                 @r   Útest_cfunc_callbackz"TestCffiStruct.test_cfunc_callback^  sÍ  ø€ Ø�lŠl‰nŒnˆØ—Z’Z Ñ-Ô-ˆ
Ý$Ô-¨jÈ4ÐPÑPÔPˆÝÔ# C§J¢J¨xÑ$8Ô$8È4ÐPÑPÔPˆå	ð	ð 	ñ 
Œð	õ 
ˆs‰Œð	ð 	ð 	ð 	ñ 
Œð	ð
 —’˜Ñ)Ô)ˆØ�hŠh�} fÑ-Ô-ˆÝ�q‘”ð 	+ð 	+ˆAØ˜C™ˆC�ŒFŒIØ˜C™ˆC�ŒFŒIØ˜Q™ #™ˆC�ŒFŒIÝ˜1‘X”Xð +ð +�Ø ! B¡¨¡
��A””
˜1‘�ð+õ �3—8’8˜H cÑ*Ô*Ñ+Ô+ˆØ�jŠj˜˜qÑ!Ô!ˆõ ”
Ø—:’:˜fÑ%Ô%ÝÔ(¨Ñ7Ô7Øðñ ô ˆð
 ��e‘”ˆØ×Ò˜˜fÑ%Ô%Ð%Ð%Ð%r   c                 ó4  — |                       ¦   «         }|                      t          ¦  «        5 }t          j        |                     d¦  «        d¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         d S )NÚerrorTrá   z0field 'bits' has bitshift, this is not supported)	rÞ   r}   Ú
ValueErrorrë   rì   rê   rL   rS   r€   )r\   ri   r�   s      r   Útest_unsupport_bitsizez%TestCffiStruct.test_unsupport_bitsize‰  sÖ   € Ø�lŠl‰nŒnˆØ×Ò�zÑ*Ô*ð 	¨fÝÔ!Ø—
’
˜7Ñ#Ô#Ø!%ðñ ô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×ÒØ>Ý�Ô Ñ!Ô!ñ	
ô 	
ð 	
ð 	
ð 	
s   ¯*A%Á%A)Á,A)N)rM   rƒ   rN   Úc_sourcerÞ   rô   r
  r  r   r   r   rÙ   rÙ   /  sb   € € € € € ð€Hð #ð ð ð ð ð9ð 9ð 9ð.)&ð )&ð )&ðV
ð 
ð 
ð 
ð 
r   rÙ   Ú__main__):r×   rW   ÚosÚ
subprocessÚsysÚcollectionsr   Únumpyr1   Únumbar   r   r   r   Ú
numba.corer   r	   r
   Únumba.core.typing.cffi_utilsÚcoreÚ
cffi_utilsrë   Únumba.tests.supportr   r   r   r   ÚunittestÚnumba.npr   r   r   r   rK   ro   rf   r!   r*   r@   rÏ   rÔ   rF   rÐ   rÕ   Úvoidrò   rE   r¹   rÇ   rï   rÈ   ÚvoidptrrÉ   rH   r…   rÙ   rM   Úmainr   r   r   ú<module>r!     sS  ððð ð
 €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 
€
€
€
Ø "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2à €€€Ø "Ð "Ð "Ð "Ð "Ð "ðð ð ðð ð ðð ð ð &€à
!€à€
ðð ð ð Ð ðð ð ð& &Ð% fÑ-Ô-€Ø%Ð% fÑ-Ô-€ðð ð ð( 2Ð1°&Ñ9Ô9Ð Ø1Ð1°&Ñ9Ô9Ð à'˜UœZ¨¨¬°u´}Ñ(EÔ(EØ(6¨¬°u´}Ñ(EÔ(EØ(-¬
°E´Jñ@ô @Ð ð (˜UœZ¨¨¬°u´}Ñ(EÔ(EØ(6¨¬°u´}Ñ(EÔ(EØ(-¬
°E´Jñ@ô @Ð ð (˜UœZ¨¬°u´}Ø(-¬
°E´Jñ@ô @Ð ðFMð FMð FMð FMð FM�ñ FMô FMð FMðRzMð zMð zMð zMð zM�ñ zMô zMð zMðz ðd
ð d
ð d
ð d
ð d
�Xñ d
ô d
ñ Ôðd
ðN ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   