43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import os
 | 
						|
import platform
 | 
						|
 | 
						|
import numpy as np
 | 
						|
import pytest
 | 
						|
 | 
						|
from scipy._lib._testutils import IS_EDITABLE, _test_cython_extension, cython
 | 
						|
from scipy.linalg.blas import cdotu  # type: ignore[attr-defined]
 | 
						|
from scipy.linalg.lapack import dgtsv  # type: ignore[attr-defined]
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.fail_slow(60)
 | 
						|
# essential per https://github.com/scipy/scipy/pull/20487#discussion_r1567057247
 | 
						|
@pytest.mark.skipif(IS_EDITABLE,
 | 
						|
                    reason='Editable install cannot find .pxd headers.')
 | 
						|
@pytest.mark.skipif(platform.machine() in ["wasm32", "wasm64"],
 | 
						|
                    reason="Can't start subprocess")
 | 
						|
@pytest.mark.skipif(cython is None, reason="requires cython")
 | 
						|
def test_cython(tmp_path):
 | 
						|
    srcdir = os.path.dirname(os.path.dirname(__file__))
 | 
						|
    extensions, extensions_cpp = _test_cython_extension(tmp_path, srcdir)
 | 
						|
    # actually test the cython c-extensions
 | 
						|
    a = np.ones(8) * 3
 | 
						|
    b = np.ones(9)
 | 
						|
    c = np.ones(8) * 4
 | 
						|
    x = np.ones(9)
 | 
						|
    _, _, _, x, _ = dgtsv(a, b, c, x)
 | 
						|
    a = np.ones(8) * 3
 | 
						|
    b = np.ones(9)
 | 
						|
    c = np.ones(8) * 4
 | 
						|
    x_c = np.ones(9)
 | 
						|
    extensions.tridiag(a, b, c, x_c)
 | 
						|
    a = np.ones(8) * 3
 | 
						|
    b = np.ones(9)
 | 
						|
    c = np.ones(8) * 4
 | 
						|
    x_cpp = np.ones(9)
 | 
						|
    extensions_cpp.tridiag(a, b, c, x_cpp)
 | 
						|
    np.testing.assert_array_equal(x, x_cpp)
 | 
						|
    cx = np.array([1-1j, 2+2j, 3-3j], dtype=np.complex64)
 | 
						|
    cy = np.array([4+4j, 5-5j, 6+6j], dtype=np.complex64)
 | 
						|
    np.testing.assert_array_equal(cdotu(cx, cy), extensions.complex_dot(cx, cy))
 | 
						|
    np.testing.assert_array_equal(cdotu(cx, cy), extensions_cpp.complex_dot(cx, cy))
 |