
    xKg'                         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    Y/home/alanp/www/video.onchill/myenv/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*ELL9r   c                      t        t        j                  ffi ||      }dD ]   }| j                   ||       ||             " y )N)g333333r   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##F1IuQx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4KR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*57+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


""1bffQi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    IIbM  'MM!"T"6*eQ*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+A2::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    IIaL299QUAE2R77HHQK'S$'(?(?@
1a


*'S$'(?(?@
1a


*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*KKU2Y'KKaS3q6\*eQ*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*IIbM  ,SqS1MM!v112f!QK 3K&**+	- 32s   
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   XXq!fCrzz:==$XX1v1v&cD==$XXq!fCrzz:==$XX1v1v&cD==$''#,''"T"6*eR2b(Fq	


""8V4eR2v112f"h 3


""2w/Y&**+	- 32s   :
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    8fQUm++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VA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HMMO r   