![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/local/lib/python3.6/dist-packages/sympy/utilities/_compilation/tests/ |
Upload File : |
import shutil from sympy.external import import_module from sympy.testing.pytest import skip from sympy.utilities._compilation.compilation import compile_link_import_strings numpy = import_module('numpy') cython = import_module('cython') _sources1 = [ ('sigmoid.c', r""" #include <math.h> void sigmoid(int n, const double * const restrict in, double * const restrict out, double lim){ for (int i=0; i<n; ++i){ const double x = in[i]; out[i] = x*pow(pow(x/lim, 8)+1, -1./8.); } } """), ('_sigmoid.pyx', r""" import numpy as np cimport numpy as cnp cdef extern void c_sigmoid "sigmoid" (int, const double * const, double * const, double) def sigmoid(double [:] inp, double lim=350.0): cdef cnp.ndarray[cnp.float64_t, ndim=1] out = np.empty( inp.size, dtype=np.float64) c_sigmoid(inp.size, &inp[0], &out[0], lim) return out """) ] def npy(data, lim=350.0): return data/((data/lim)**8+1)**(1/8.) def test_compile_link_import_strings(): if not numpy: skip("numpy not installed.") if not cython: skip("cython not installed.") from sympy.utilities._compilation import has_c if not has_c(): skip("No C compiler found.") compile_kw = dict(std='c99', include_dirs=[numpy.get_include()]) info = None try: mod, info = compile_link_import_strings(_sources1, compile_kwargs=compile_kw) data = numpy.random.random(1024*1024*8) # 64 MB of RAM needed.. res_mod = mod.sigmoid(data) res_npy = npy(data) assert numpy.allclose(res_mod, res_npy) finally: if info and info['build_dir']: shutil.rmtree(info['build_dir'])