Ë
    èÿæi'  ã                   óÔ   — d dl Z d dlZd dlmZmZ d dlmc mc m	Z
 d dlmZmZ d dlmZmZ d dlmc mZ d dlZddiZddiZe G d„ d	e«      «       Zed
k(  r ej4                  «        yy)é    N)ÚjitÚnjit)ÚtypesÚerrors)ÚTestCaseÚskip_unless_cffiÚforceobjTÚnopythonc                   ó–   — e Zd ZdZd„ Zd„ Zefd„Zd„ Zd„ Z	d„ Z
ef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y)ÚTestCFFIFc                 óT   — t        j                  «        t        j                  «        y ©N)ÚmodÚinitÚinit_ool©Úselfs    új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_cffi.pyÚsetUpzTestCFFI.setUp   s   € Ü�‰Œ
Ü�‰�ó    c                 ó(  — t        j                  t        j                  j	                  t        j
                  «      «      }| j                  t        |j                  «      d«       | j                  |j                  d   t        j                  «       y )Né   r   )Úcffi_supportÚmap_typer   ÚffiÚtypeofÚcffi_sinÚassertEqualÚlenÚargsr   Údouble)r   Ú	signatures     r   Útest_type_mapzTestCFFI.test_type_map   sY   € Ü ×)Ñ)¬#¯'©'¯.©.¼¿¹Ó*FÓGˆ	Ø×Ñœ˜YŸ^™^Ó,¨aÔ0Ø×Ñ˜Ÿ™¨Ñ*¬E¯L©LÕ9r   c                 ó�   —  t        t        j                  ffi |¤Ž|«      }dD ]   }| j                   ||«       ||«      «       Œ" y )N)g333333ó¿éÿÿÿÿr   gš™™™™™¹?g…ëQ¸	@)r   r   r!   ÚassertPreciseEqual)r   ÚpyfuncÚflagsÚcfuncÚxs        r   Ú_test_functionzTestCFFI._test_function"   s@   € Ø-””U—\‘\�OÑ- uÑ-¨fÓ5ˆã)ˆAØ×#Ñ#¡F¨1£I©u°Q«xÕ8ñ *r   c                 óB   — | j                  t        j                  «       y r   )r+   r   Úuse_cffi_sinr   s    r   Útest_sin_functionzTestCFFI.test_sin_function(   s   € Ø×ÑœC×,Ñ,Õ-r   c                 ó¢   — t         j                  } t        d«      |«      }| j                   |«       d«       | j                   |«       d«       y )N© T)r   Úuse_cffi_boolean_truer   r   ©r   r'   r)   s      r   Útest_bool_function_oolzTestCFFI.test_bool_function_ool+   sA   € Ü×*Ñ*ˆØ”�R“	˜&Ó!ˆØ×Ñ™› 4Ô(Ø×Ñ™› $Õ'r   c                 óN   — | j                  t        j                  t        ¬«       y ©N)r(   )r+   r   r-   Úno_pyobj_flagsr   s    r   Útest_sin_function_npmzTestCFFI.test_sin_function_npm1   s   € Ø×ÑœC×,Ñ,´NÐÕCr   c                 óB   — | j                  t        j                  «       y r   )r+   r   Úuse_cffi_sin_ool)r   r(   s     r   Útest_sin_function_oolzTestCFFI.test_sin_function_ool4   s   € Ø×ÑœC×0Ñ0Õ1r   c                 óN   — | j                  t        j                  t        ¬«       y r5   )r+   r   r9   r6   r   s    r   Útest_sin_function_npm_oolz"TestCFFI.test_sin_function_npm_ool7   s   € Ø×ÑœC×0Ñ0¼ÐÕGr   c                 óB   — | j                  t        j                  «       y r   )r+   r   Úuse_two_funcsr   s    r   Útest_two_funcszTestCFFI.test_two_funcs:   s   € à×ÑœC×-Ñ-Õ.r   c                 óB   — | j                  t        j                  «       y r   )r+   r   Úuse_two_funcs_oolr   s    r   Útest_two_funcs_oolzTestCFFI.test_two_funcs_ool>   s   € Ø×ÑœC×1Ñ1Õ2r   c                 ó
  — t         j                  } t        d¬«      |«      }t         j                  t         j                  dft         j                  t         j                  dft         j                  t         j                  dft         j                  t         j                  dft         j
                  t         j                  dft         j
                  t         j                  dft         j                  t         j
                  dft         j                  t         j
                  dft         j                  t         j                  dft         j                  t         j                  dft         j                  t         j
                  dft         j                  t         j
                  dffD ],  \  }}} ||||«      } ||||«      }| j                  ||«       Œ. | j                  t        |j                  «      d|j                  «       y )NT©r
   g      ð?g      ð¿r   )
r   Úuse_func_pointerr   r   Úcffi_cosÚcffi_sin_oolÚcffi_cos_oolr   r   Ú	overloads)r   r'   r)   ÚfaÚfbr*   ÚexpectedÚgots           r   Útest_function_pointerzTestCFFI.test_function_pointerA   so  € Ü×%Ñ%ˆØ"”˜TÔ" 6Ó*ˆä�\‰\œ3Ÿ<™<¨Ð-Ü�\‰\œ3Ÿ<™<¨Ð.Ü�\‰\œ3Ÿ<™<¨Ð-Ü�\‰\œ3Ÿ<™<¨Ð.Ü×Ñœs×/Ñ/°Ð5Ü×Ñœs×/Ñ/°Ð6Ü×Ñœs×/Ñ/°Ð5Ü×Ñœs×/Ñ/°Ð6Ü�\‰\œ3×+Ñ+¨SÐ1Ü�\‰\œ3×+Ñ+¨TÐ2Ü�\‰\œ3×+Ñ+¨SÐ1Ü�\‰\œ3×+Ñ+¨TÐ2ó4‰KˆR��Qñ ˜b " aÓ(ˆHÙ˜˜B Ó"ˆCØ×Ñ˜S (Õ+ð4ð" 	×Ñœ˜UŸ_™_Ó-¨q°%·/±/ÕBr   c                 ó€   — t         j                  } t        d¬«      |«      }| j                   |«        |«       «       y )NTrD   )r   Úuse_user_defined_symbolsr   r   r2   s      r   Útest_user_defined_symbolsz"TestCFFI.test_user_defined_symbolsW   s2   € Ü×-Ñ-ˆØ"”˜TÔ" 6Ó*ˆØ×Ñ™›¡5£7Õ+r   c                 ó|   —  |||«       t         j                  j                  |t        j                  |«      «       y r   )ÚnpÚtestingÚassert_allcloseÚsin)r   r)   r*   Úys       r   Úcheck_vector_sinzTestCFFI.check_vector_sin\   s'   € Ùˆa�ŒÜ
�
‰
×"Ñ" 1¤b§f¡f¨Q£iÕ0r   c                 óÀ   — t        j                  d«      j                  |«      }t        j                  |«      } t	        d¬«      |«      }| j                  |||«       y )Né
   TrD   )rS   ÚarangeÚastypeÚ
zeros_liker   rX   )r   r'   Údtyper*   rW   r)   s         r   Ú_test_from_buffer_numpy_arrayz&TestCFFI._test_from_buffer_numpy_array`   sK   € Ü�I‰I�b‹M× Ñ  Ó'ˆÜ�M‰M˜!ÓˆØ"”˜TÔ" 6Ó*ˆØ×Ñ˜e Q¨Õ*r   c                 ó`   — | j                  t        j                  t        j                  «       y r   )r_   r   Úvector_sin_float32rS   Úfloat32r   s    r   Útest_from_buffer_float32z!TestCFFI.test_from_buffer_float32f   ó   € Ø×*Ñ*¬3×+AÑ+AÄ2Ç:Á:ÕNr   c                 ó`   — | j                  t        j                  t        j                  «       y r   )r_   r   Úvector_sin_float64rS   Úfloat64r   s    r   Útest_from_buffer_float64z!TestCFFI.test_from_buffer_float64i   rd   r   c                 óè  — d}t        j                  |«      t        j                  |dz  |dz  «      dz  z   }t        j                  |«      } t        d¬«      t        j
                  «      } |||«       t         j                  j                  |j                  |«        t        d¬«      t        j                  «      } |||«       t         j                  j                  |j                  |«       y )NrZ   é   é   y              ð?TrD   )rS   r[   Úzerosr   r   Úvector_extract_realrT   Úassert_equalÚrealÚvector_extract_imagÚimag)r   Únr*   rW   Ú
real_cfuncÚ
imag_cfuncs         r   Útest_from_buffer_structz TestCFFI.test_from_buffer_structl   s°   € ØˆÜ�I‰I�a‹Lœ2Ÿ9™9 Q¨¡U¨A°©EÓ2°RÑ7Ñ7ˆÜ�H‰H�Q‹KˆØ'”S $Ô'¬×(?Ñ(?Ó@ˆ
Ù�1�aÔÜ
�
‰
×Ñ §¡¨Ô*Ø'”S $Ô'¬×(?Ñ(?Ó@ˆ
Ù�1�aÔÜ
�
‰
×Ñ §¡¨Õ*r   c                 óò   — t         j                  } t        d¬«      |«      }t        j                  dt	        d«      «      }t        j                  ddgt        |«      z  «      }| j                  |||«       y )NTrD   ÚfrZ   r   )r   ra   r   ÚarrayÚranger   rX   )r   r'   r)   r*   rW   s        r   Útest_from_buffer_pyarrayz!TestCFFI.test_from_buffer_pyarrayw   s^   € Ü×'Ñ'ˆØ"”˜TÔ" 6Ó*ˆÜ�K‰K˜œU 2›YÓ'ˆÜ�K‰K˜˜a˜S¤3 q£6™\Ó*ˆØ×Ñ˜e Q¨Õ*r   c                 ó¦  — t         j                  } t        d¬«      |«      }t        j                  d«      j                  t        j                  «      d d d…   }t        j                  |«      }| j                  t        j                  «      5 } |||«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)NTrD   rZ   rj   z3from_buffer() unsupported on non-contiguous buffers)r   ra   r   rS   r[   r\   rb   r]   ÚassertRaisesr   ÚTypingErrorÚassertInÚstrÚ	exception)r   r'   r)   r*   rW   Úraisess         r   Útest_from_buffer_errorzTestCFFI.test_from_buffer_error~   s›   € Ü×'Ñ'ˆØ"”˜TÔ" 6Ó*ˆä�I‰I�b‹M× Ñ ¤§¡Ó,©S¨q¨SÑ1ˆÜ�M‰M˜!ÓˆØ×Ñœv×1Ñ1Ô2°fÙ�!�QŒK÷ 3à�‰ÐKÜ˜&×*Ñ*Ó+õ	-÷ 3Ð2ús   Â
CÃCc                 ó<  — t        j                  ddgdt         j                  ¬«      }t        j                  |«      }t        j                  ddgddggdt         j                  ¬«      }t        j                  |«      }t        j                  ddgdt         j                  ¬«      }t        j                  |«      }t        j                  ddgddggdt         j                  ¬«      }t        j                  |«      }|j	                  d«      }	t
        j                  }
 t        d	¬
«      |
«      }| j                  |||«        |||«       t        j                  |«      }ddg|d<   t         j                  j                  ||«       | j                  |||«       | j                  t        j                  «      5 } |||«       d d d «       t         j                  j                  ||	«       | j                  dt!        j"                  «      «       y # 1 sw Y   ŒOxY w)Nr   rj   ÚC)Úorderr^   rk   é   ÚFÚKTrD   r   zAfrom_buffer() only supports multidimensional arrays with C layout)rS   rx   rb   r]   Úcopyr   ra   r   rX   rV   rT   rU   r|   r   r}   r~   r   r€   )r   Úc1Úc1_zerosÚc2Úc2_zerosÚf1Úf1_zerosÚf2Úf2_zerosÚf2_copyr'   r)   Úsin_c2r�   s                 r   Ú"test_from_buffer_numpy_multi_arrayz+TestCFFI.test_from_buffer_numpy_multi_array‰   s˜  € Ü�X‰X�q˜!�f C¬r¯z©zÔ:ˆÜ—=‘= Ó$ˆÜ�X‰X˜˜1�v  1˜vÐ&¨c¼¿¹ÔDˆÜ—=‘= Ó$ˆÜ�X‰X�q˜!�f C¬r¯z©zÔ:ˆÜ—=‘= Ó$ˆÜ�X‰X˜˜1�v  1˜vÐ&¨c¼¿¹ÔDˆÜ—=‘= Ó$ˆØ—'‘'˜#“,ˆÜ×'Ñ'ˆØ"”˜TÔ" 6Ó*ˆà×Ñ˜e R¨Ô2áˆb�(ÔÜ—‘˜“ˆØ˜�Fˆˆq‰	Ü
�
‰
×"Ñ" 8¨VÔ4à×Ñ˜e R¨Ô2à×Ñœv×1Ñ1Ô2°fÙ�"�hÔ÷ 3ä
�
‰
×"Ñ" 2 wÔ/Ø�‰ÐYÜ˜&×*Ñ*Ó+õ	-÷ 3Ð2ús   Æ:
HÈHc                 óÒ   ‡‡— t         j                  Št        d¬«      ˆfd„«       Št        d¬«      ˆˆfd„«       }d}| j                   ||«       ‰|«       ‰|dz   «      z   «       y)zj
        Issue #2263

        Linkage error due to multiple definition of global tracking symbol.
        TrD   c                 ó   •—  ‰| «      S r   r0   )r*   Úmy_sins    €r   Úinnerz2TestCFFI.test_indirect_multiple_use.<locals>.inner¯   s   ø€ á˜!“9Ðr   c                 ó,   •—  ‰| «       ‰| dz   «      z   S )Nr   r0   )r*   r˜   r—   s    €€r   Úfooz0TestCFFI.test_indirect_multiple_use.<locals>.foo³   s   ø€ á˜“8™f Q¨¡U›mÑ+Ð+r   g+‡ÙÎ÷ñ?r   N)r   r   r   r   )r   rš   r*   r˜   r—   s      @@r   Útest_indirect_multiple_usez#TestCFFI.test_indirect_multiple_use¥   sl   ù€ ô —‘ˆô 
�dÔ	ó	ó 
ð	ô 
�dÔ	ô	,ó 
ð	,ð ˆØ×Ñ™˜Q›¡¨£©V°A¸±E«]Ñ!:Õ;r   N)Ú__name__Ú
__module__Ú__qualname__Ú_numba_parallel_test_r   r#   Úenable_pyobj_flagsr+   r.   r3   r7   r:   r<   r?   rB   rN   rQ   rX   r_   rc   rh   ru   rz   r‚   r”   r›   r0   r   r   r   r      s‚   „ ð
 "Ðòò:ð
 ,>ó 9ò.ò(òDð +=ó 2òHò/ò3òCò,,ò
1ò+òOòOò	+ò+ò	-ò-ó8<r   r   Ú__main__)rx   ÚnumpyrS   Únumbar   r   Únumba.core.typing.cffi_utilsÚcoreÚtypingÚ
cffi_utilsr   Ú
numba.corer   r   Únumba.tests.supportr   r   Únumba.tests.cffi_usecasesÚtestsÚcffi_usecasesr   Úunittestr    r6   r   rœ   Úmainr0   r   r   Ú<module>r¯      su   ðÛ Û ç ß 3Ó 3ß $ß :÷ (Ð 'Û ð ! $Ð'Ð Ø˜dÐ#€ð ôf<ˆxó f<ó ðf<ðR ˆzÒØ€H‡M�M…Oð r   