
    wg^
                         d dl Z d dlmZmZ d dlmZ e ed       G d de                    Zedk(  r e j                          yy)    N)CUDATestCaseskip_on_cudasim)skip_unless_cffiz4cudasim doesn't support cuda import at non-top-levelc                       e Zd Zd Zd Zy)TestFFIc                   
 ddl m
 dd l}dd l}
j	                  dd      |j
                  j                  |j
                  j                  t                    }|j
                  j                  |dd      }
j                  |g      
fd       }d	}|j                  j                  d
       |j                  j                  |      j                  |j                        }|j                  j                  |      j                  |j                        }|j!                  |      }	 |d   |	||       |j"                  j%                  |	||z         y )Nr   cudamul_f32_f32zfloat32(float32, float32)ffifunctions.culinkc                 j    j                  d      }|t        |       k  r ||   ||         | |<   y y )N   )gridlen)rxyir
   muls       k/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/numba/cuda/tests/doc_examples/test_ffi.pymultiply_vectorsz4TestFFI.test_ex_linking_cu.<locals>.multiply_vectors   s7    		!A3q6z1Q41!         r   )r   r   )numbar
   numpyosdeclare_devicepathdirnameabspath__file__joinjitrandomseedrandastypefloat32
zeros_liketestingassert_array_equal)selfnpr   basedirfunctions_cur   Nr   r   r   r
   r   s             @@r   test_ex_linking_cuzTestFFI.test_ex_linking_cu   s    !!-1LM ''//"''//(";<ww||GUNC 
~	&	' 
'	' 
		qIINN1$$RZZ0IINN1$$RZZ0MM! 	 1a( 	

%%aQ/r   c                 `   ddl m} dd l}|j                  j	                  |j                  j                  t                    }|j                  j                  |dd      }d}|j                  d|      dd l	}|j                         |j                  |g      fd       }dd l}|j                  d	      j                  |j                        }	|j!                  d
|j                        }
 |d   |
|	       |j#                  |	      }|
d
   }|j$                  j'                  ||       y )Nr   r	   r   r   z!float32(CPointer(float32), int32)
sum_reducer   c                 R    j                  |      } |t        |            | d<   y )N )from_bufferr   )resultarray	array_ptrr   r6   s      r   reduction_callerz5TestFFI.test_ex_from_buffer.<locals>.reduction_caller@   s%    .I#Is5z:F2Jr   
   r8   )dtype)r   r   )r   r
   r   r!   r"   r#   r$   r%   r    cffiFFIr&   r   aranger*   r+   ndarraysumr-   assert_allclose)r/   r
   r   r1   r2   	signaturer@   r=   r0   r   r   expectedactualr   r6   s                @@r   test_ex_from_bufferzTestFFI.test_ex_from_buffer0   s    ''//"''//(";<ww||GUNC 8	((yA
 	hhj	~	&	; 
'	;
 	IIbM  ,JJrJ,q!$66!92


""8V4r   N)__name__
__module____qualname__r4   rI   r8   r   r   r   r   	   s    !0H5r   r   __main__)	unittestnumba.cuda.testingr   r   numba.tests.supportr   r   rJ   mainr8   r   r   <module>rR      sX     > 0 GHC5l C5 I C5L zHMMO r   