簡體   English   中英

scipy.weave.inline出現SyntaxError

[英]SyntaxError with scipy.weave.inline

我最近升級到了brian2的最新版本,並在運行神經模擬時開始看到以下警告:

WARNING  brian2.codegen.runtime.weave_rt.weave_rt.failed_compile_test: Cannot use weave, a test compilation failed: invalid syntax (<string>, line 1) (SyntaxError)

經過一番挖掘后,我發現此警告是由於brian2的模塊之一中的以下行引起的錯誤:

compiler, extra_compile_args = get_compiler_and_args()
weave.inline('int x=0;', [],
             compiler=compiler,
             headers=['<algorithm>', '<limits>'],
             extra_compile_args=extra_compile_args,
             verbose=0)

運行此代碼,我得到以下信息:

In [11]: from scipy import weave

In [12]: compiler
Out[12]: 'gcc'

In [13]: extra_compile_args 
Out[13]: ['-w', '-O3']

In [14]: weave.inline('int x=0;', [], compiler=compiler, headers=['<algorithm>', '<limits>'], extra_compile_args=extra_compile_args, verbose=0)
  File "<string>", line 1
    '\t\t\t\t// SUPPORT CODE\n\t//static py::object _namespace_numpy_rand;\n\t//#define BUFFER_SIZE 1024\n\t//// A rand() function that returns a single random number. Internally\n\t//// it asks numpy\'s rand function for BUFFER_SIZE\n\t//// random numbers at a time and then returns one number from this\n\t//// buffer.\n\t//// It needs a reference to the numpy_rand object (the original numpy\n\t//// function), because this is otherwise only available in\n\t//// compiled_function (where is is automatically handled by weave).\n\t////\n\t//double _rand(const int _vectorisation_idx) {\n\t//    // the _vectorisation_idx argument is unused for now, it could in\n\t//    // principle be used to get reproducible random numbers when using\n\t//    // OpenMP etc.\n\t//    static PyArrayObject *rand_buffer = NULL;\n\t//    static double *buf_pointer = NULL;\n\t//    static npy_int curbuffer = 0;\n\t//    if(curbuffer==0)\n\t//    {\n\t//        if(rand_buffer) Py_DECREF(rand_buffer);\n\t//        py::tuple args(1);\n\t//        args[0] = BUFFER_SIZE;\n\t//        rand_buffer = (PyArrayObject *)PyArray_FromAny(_namespace_numpy_rand.call(args),\n\t//                                                       NULL, 1, 1, 0, NULL);\n\t//        buf_pointer = (double*)PyArray_GETPTR1(rand_buffer, 0);\n\t//    }\n\t//    double number = buf_pointer[curbuffer];\n\t//    curbuffer = curbuffer+1;\n\t//    if (curbuffer == BUFFER_SIZE)\n\t//        // This seems to be safer then using (curbuffer + 1) % BUFFER_SIZE, we might run into\n\t//        // an integer overflow for big networks, otherwise.\n\t//        curbuffer = 0;\n\t//    return number;\n\t//}\n\n\n\t\t\t//// HANDLE DENORMALS ////\n\t\n\n\n\t\t\t//// HASH DEFINES ////\n\t\n\n\n\t\t\t//// POINTERS ////\n\tint* __restrict  _ptr_array_synapses_4_N_incoming = _array_synapses_4_N_incoming;\n\tint* __restrict  _ptr_array_poissongroup_i = _array_poissongroup_i;\n\tint* __restrict  _ptr_array_neurongroup_i = _array_neurongroup_i;\n\tint* __restrict  _ptr_array_synapses_4__synaptic_post = _array_synapses_4__synaptic_post;\n\tint* __restrict  _ptr_array_synapses_4_N_outgoing = _array_synapses_4_N_outgoing;\n\tint* __restrict  _ptr_array_synapses_4__synaptic_pre = _array_synapses_4__synaptic_pre;\n\t_namespace_numpy_rand = _numpy_rand;\n\n\n\n    srand((unsigned int)time(NULL));\n    const int _buffer_size = 1024;\n    int *const _prebuf = new int[_buffer_size];\n    int *const _postbuf = new int[_buffer_size];\n    int *const _synprebuf = new int[1];\n    int *const _synpostbuf = new int[1];\n    int _curbuf = 0;\n\n    // scalar code\n\tconst intrray_neurongroup_1_s_ext;\n\tdouble* __restrict  _ptr_array_neurongroup_1_s_gaba = _array_neurongroup_1_s_gaba;\n\tdouble* __restrict  _ptr_array_neurongroup_1_v = _array_neurongroup_1_v;\n\tdouble* __restrict  _ptr_array_neurongroup_1_s_tot_ampa = _array_neurongroup_1_s_tot_ampa;\n\n\n\n\t//// MAIN CODE ////////////\n\n\t// scalar code\n\tconst int _vectorisation_idx = 1;\n \t\n const double _lio_const_1 = - dt;\n const double _lio_const_2 = - G_ampa;\n const double _lio_const_3 = - E_ampa;\n const double _lio_const_4 = - E_gaba;\n const double _lio_const_5 = - E_nmda;\n const double _lio_const_6 = - a;\n const double _lio_const_7 = - El_i;\n\n\n\tfor(int _idx=0; _idx<N; _idx++)\n\t{\n\t    // vector code\n\t\tconst int _vectorisation_idx = _idx;\n      \t\t    \n      const double s_tot_ampa = _ptr_array_neurongroup_1_s_tot_ampa[_idx];\n      double s_ext = _ptr_array_neurongroup_1_s_ext[_idx];\n      double s_gaba = _ptr_array_neurongroup_1_s_gaba[_idx];\n      const double s_tot_nmda = _ptr_array_neurongroup_1_s_tot_nmda[_idx];\n      double v = _ptr_array_neurongroup_1_v[_idx];\n      const double lastspike = _ptr_array_neurongroup_1_lastspike[_idx];\n      bool not_refractory = _ptr_array_neurongroup_1_not_refractory[_idx];\n      not_refractory = (t - lastspike) > tr_i;\n      const double __k_s_ext = (_lio_const_1 * s_ext) / t_ampa;\n      const double __k_s_gaba = (_lio_const_1 * s_gaba) / t_gaba;\n      const double __k_v = ((dt * ((((((_lio_const_2 * s_tot_ampa) * (_lio_const_3 + v)) - ((G_ext * s_ext) * (_lio_const_3 + v))) - ((G_gaba * s_gaba) * (_lio_const_4 + v))) - (((G_nmda * s_tot_nmda) * (_lio_const_5 + v)) / ((b * exp(_lio_const_6 * v)) + 1.0))) - (gl_i * (_lio_const_7 + v)))) * int_(not_refractory)) / C_m;\n      const double _s_ext = ((_lio_const_1 * ((0.5 * __k_s_ext) + s_ext)) / t_ampa) + s_ext;\n      const double _s_gaba = ((_lio_const_1 * ((0.5 * __k_s_gaba) + s_gaba)) / t_gaba) + s_gaba;\n      const double _v = v + (((dt * ((((((_lio_const_2 * s_tot_ampa) * ((_lio_const_3 + (0.5 * __k_v)) + v)) - ((G_ext * ((0.5 * __k_s_ext) + s_ext)) * ((_lio_const_3 + (0.5 * __k_v)) + v))) - ((G_gaba * ((0.5 * __k_s_gaba) + s_gaba)) * ((_lio_const_4 + (0.5 * __k_v)) + v))) - (((G_nmda * s_tot_nmda) * ((_lio_const_5 + (0.5 * __k_v)) + v)) / ((b * exp(_lio_const_6 * ((0.5 * __k_v) + v))) + 1.0))) - (gl_i * ((_lio_const_7 + (0.5 * __k_v)) + v)))) * int_(not_refractory)) / C_m);\n      s_ext = _s_ext;\n      s_gaba = _s_gaba;\n      if(not_refractory)\n          v = _v;\n      _ptr_array_neurongroup_1_s_gaba[_idx] = s_gaba;\n      _ptr_array_neurongroup_1_v[_idx] = v;\n      _ptr_array_neurongroup_1_s_ext[_idx] = s_ext;\n      _ptr_array_neurongroup_1_not_refractory[_idx] = not_refractory;\n\n\n\t}\n\n/*\nThe following code is just compiler options for the call to weave.inline.\nBy including them here, we force a recompile if the compiler options change,\nwhich is a good thing (e.g. switching -ffast-math on and off).\n\nsupport_code:\n  \t\t\n  int int_(const bool value)\n  {\n      return value ? 1 : 0;\n  }\n\n\n\n\ncompiler:\ngcc\n\nextra_compile_args:\n['-w', '-O3']\n\ninclude_dirs:\n['/usr/local/anaconda/include']\n*/\n        ", (119808, 66)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ^
SyntaxError: invalid syntax

我在那個瘋狂的字符串中注意到, inline輸出是我之前運行的模擬中的變量:例如s_gaba inline函數的調用沒有任何模擬會引發錯誤。)是否仍然存在一些應該刪除的數據存儲問題? 如何避免該錯誤?

我在官方weave教程中找到了一些技巧。 特別,

我有時使用冗長的命令進行調試。 設置為2時,它將輸出運行make文件所需的所有信息(包括.cpp文件的名稱)。 如果您需要檢查生成的代碼以了解問題的發展方向,那將非常好。 請注意,即使詳細設置為0,來自失敗編譯的錯誤消息也會打印到屏幕上。

以下示例演示了如何使用Windows上的gcc而不是標准msvc編譯器,並使用與上述相同的代碼片段。 因為示例已經被編譯,所以需要force = 1標志來使inline()忽略先前編譯的版本並使用gcc重新編譯。

設置verbose=2force=1 ,我得到了以下信息:

In [3]: weave.inline('int x=0;', [], compiler='gcc', headers=

['<algorithm>', '<limits>'], extra_compile_args=['-w', '-03'], verbose=2, force=1)
<weave: compiling>
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b
running build_ext
running build_src
build_src
building extension "sc_302644cc5257b9feebbfde0f5856848e1" sources
build_src: building npy-pkg config files
customize UnixCCompiler
customize UnixCCompiler using build_ext
customize UnixCCompiler
customize UnixCCompiler using build_ext
building 'sc_302644cc5257b9feebbfde0f5856848e1' extension
compiling C++ sources
C compiler: g++ -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -fPIC

creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/home
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/home/despo
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/home/despo/dbliss
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/home/despo/dbliss/.cache
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/home/despo/dbliss/.cache/scipy
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/home/despo/dbliss/.cache/scipy/python27_compiled
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/usr
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/usr/local
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/usr/local/anaconda
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/usr/local/anaconda/lib
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/usr/local/anaconda/lib/python2.7
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/usr/local/anaconda/lib/python2.7/site-packages
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/usr/local/anaconda/lib/python2.7/site-packages/scipy
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/usr/local/anaconda/lib/python2.7/site-packages/scipy/weave
creating /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/usr/local/anaconda/lib/python2.7/site-packages/scipy/weave/scxx
compile options: '-I/usr/local/anaconda/lib/python2.7/site-packages/scipy/weave -I/usr/local/anaconda/lib/python2.7/site-packages/scipy/weave/scxx -I/usr/local/anaconda/lib/python2.7/site-packages/numpy/core/include -I/usr/local/anaconda-1.9.2/include/python2.7 -c'
extra options: '-w -03'
g++: /home/despo/dbliss/.cache/scipy/python27_compiled/sc_302644cc5257b9feebbfde0f5856848e1.cpp
g++: unrecognized option '-03'
g++: /usr/local/anaconda/lib/python2.7/site-packages/scipy/weave/scxx/weave_imp.cpp
g++: unrecognized option '-03'
g++ -pthread -shared /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/home/despo/dbliss/.cache/scipy/python27_compiled/sc_302644cc5257b9feebbfde0f5856848e1.o /tmp/scipy-dbliss-wzdMj_/python27_intermediate/compiler_0129f738e3db7528dd918ff316c8b91b/usr/local/anaconda/lib/python2.7/site-packages/scipy/weave/scxx/weave_imp.o -L/usr/local/anaconda-1.9.2/lib -lpython2.7 -o /home/despo/dbliss/.cache/scipy/python27_compiled/sc_302644cc5257b9feebbfde0f5856848e1.so
  File "<string>", line 1
    '\t\t\t\t// SUPPORT CODE\n\t//static py::object _namespace_numpy_rand;\n\t//#define BUFFER_SIZE 1024\n\t//// A rand() function that returns a single random number. Internally\n\t//// it asks numpy\'s rand function for BUFFER_SIZE\n\t//// random numbers at a time and then returns one number from this\n\t//// buffer.\n\t//// It needs a reference to the numpy_rand object (the original numpy\n\t//// function), because this is otherwise only available in\n\t//// compiled_function (where is is automatically handled by weave).\n\t////\n\t//double _rand(const int _vectorisation_idx) {\n\t//    // the _vectorisation_idx argument is unused for now, it could in\n\t//    // principle be used to get reproducible random numbers when using\n\t//    // OpenMP etc.\n\t//    static PyArrayObject *rand_buffer = NULL;\n\t//    static double *buf_pointer = NULL;\n\t//    static npy_int curbuffer = 0;\n\t//    if(curbuffer==0)\n\t//    {\n\t//        if(rand_buffer) Py_DECREF(rand_buffer);\n\t//        py::tuple args(1);\n\t//        args[0] = BUFFER_SIZE;\n\t//        rand_buffer = (PyArrayObject *)PyArray_FromAny(_namespace_numpy_rand.call(args),\n\t//                                                       NULL, 1, 1, 0, NULL);\n\t//        buf_pointer = (double*)PyArray_GETPTR1(rand_buffer, 0);\n\t//    }\n\t//    double number = buf_pointer[curbuffer];\n\t//    curbuffer = curbuffer+1;\n\t//    if (curbuffer == BUFFER_SIZE)\n\t//        // This seems to be safer then using (curbuffer + 1) % BUFFER_SIZE, we might run into\n\t//        // an integer overflow for big networks, otherwise.\n\t//        curbuffer = 0;\n\t//    return number;\n\t//}\n\n\n\t\t\t//// HANDLE DENORMALS ////\n\t\n\n\n\t\t\t//// HASH DEFINES ////\n\t\n\n\n\t\t\t//// POINTERS ////\n\tint* __restrict  _ptr_array_synapses_4_N_incoming = _array_synapses_4_N_incoming;\n\tint* __restrict  _ptr_array_poissongroup_i = _array_poissongroup_i;\n\tint* __restrict  _ptr_array_neurongroup_i = _array_neurongroup_i;\n\tint* __restrict  _ptr_array_synapses_4__synaptic_post = _array_synapses_4__synaptic_post;\n\tint* __restrict  _ptr_array_synapses_4_N_outgoing = _array_synapses_4_N_outgoing;\n\tint* __restrict  _ptr_array_synapses_4__synaptic_pre = _array_synapses_4__synaptic_pre;\n\t_namespace_numpy_rand = _numpy_rand;\n\n\n\n    srand((unsigned int)time(NULL));\n    const int _buffer_size = 1024;\n    int *const _prebuf = new int[_buffer_size];\n    int *const _postbuf = new int[_buffer_size];\n    int *const _synprebuf = new int[1];\n    int *const _synpostbuf = new int[1];\n    int _curbuf = 0;\n\n    // scalar code\n\tconst intrray_neurongroup_1_s_ext;\n\tdouble* __restrict  _ptr_array_neurongroup_1_s_gaba = _array_neurongroup_1_s_gaba;\n\tdouble* __restrict  _ptr_array_neurongroup_1_v = _array_neurongroup_1_v;\n\tdouble* __restrict  _ptr_array_neurongroup_1_s_tot_ampa = _array_neurongroup_1_s_tot_ampa;\n\n\n\n\t//// MAIN CODE ////////////\n\n\t// scalar code\n\tconst int _vectorisation_idx = 1;\n \t\n const double _lio_const_1 = - dt;\n const double _lio_const_2 = - G_ampa;\n const double _lio_const_3 = - E_ampa;\n const double _lio_const_4 = - E_gaba;\n const double _lio_const_5 = - E_nmda;\n const double _lio_const_6 = - a;\n const double _lio_const_7 = - El_i;\n\n\n\tfor(int _idx=0; _idx<N; _idx++)\n\t{\n\t    // vector code\n\t\tconst int _vectorisation_idx = _idx;\n      \t\t    \n      const double s_tot_ampa = _ptr_array_neurongroup_1_s_tot_ampa[_idx];\n      double s_ext = _ptr_array_neurongroup_1_s_ext[_idx];\n      double s_gaba = _ptr_array_neurongroup_1_s_gaba[_idx];\n      const double s_tot_nmda = _ptr_array_neurongroup_1_s_tot_nmda[_idx];\n      double v = _ptr_array_neurongroup_1_v[_idx];\n      const double lastspike = _ptr_array_neurongroup_1_lastspike[_idx];\n      bool not_refractory = _ptr_array_neurongroup_1_not_refractory[_idx];\n      not_refractory = (t - lastspike) > tr_i;\n      const double __k_s_ext = (_lio_const_1 * s_ext) / t_ampa;\n      const double __k_s_gaba = (_lio_const_1 * s_gaba) / t_gaba;\n      const double __k_v = ((dt * ((((((_lio_const_2 * s_tot_ampa) * (_lio_const_3 + v)) - ((G_ext * s_ext) * (_lio_const_3 + v))) - ((G_gaba * s_gaba) * (_lio_const_4 + v))) - (((G_nmda * s_tot_nmda) * (_lio_const_5 + v)) / ((b * exp(_lio_const_6 * v)) + 1.0))) - (gl_i * (_lio_const_7 + v)))) * int_(not_refractory)) / C_m;\n      const double _s_ext = ((_lio_const_1 * ((0.5 * __k_s_ext) + s_ext)) / t_ampa) + s_ext;\n      const double _s_gaba = ((_lio_const_1 * ((0.5 * __k_s_gaba) + s_gaba)) / t_gaba) + s_gaba;\n      const double _v = v + (((dt * ((((((_lio_const_2 * s_tot_ampa) * ((_lio_const_3 + (0.5 * __k_v)) + v)) - ((G_ext * ((0.5 * __k_s_ext) + s_ext)) * ((_lio_const_3 + (0.5 * __k_v)) + v))) - ((G_gaba * ((0.5 * __k_s_gaba) + s_gaba)) * ((_lio_const_4 + (0.5 * __k_v)) + v))) - (((G_nmda * s_tot_nmda) * ((_lio_const_5 + (0.5 * __k_v)) + v)) / ((b * exp(_lio_const_6 * ((0.5 * __k_v) + v))) + 1.0))) - (gl_i * ((_lio_const_7 + (0.5 * __k_v)) + v)))) * int_(not_refractory)) / C_m);\n      s_ext = _s_ext;\n      s_gaba = _s_gaba;\n      if(not_refractory)\n          v = _v;\n      _ptr_array_neurongroup_1_s_gaba[_idx] = s_gaba;\n      _ptr_array_neurongroup_1_v[_idx] = v;\n      _ptr_array_neurongroup_1_s_ext[_idx] = s_ext;\n      _ptr_array_neurongroup_1_not_refractory[_idx] = not_refractory;\n\n\n\t}\n\n/*\nThe following code is just compiler options for the call to weave.inline.\nBy including them here, we force a recompile if the compiler options change,\nwhich is a good thing (e.g. switching -ffast-math on and off).\n\nsupport_code:\n  \t\t\n  int int_(const bool value)\n  {\n      return value ? 1 : 0;\n  }\n\n\n\n\ncompiler:\ngcc\n\nextra_compile_args:\n['-w', '-O3']\n\ninclude_dirs:\n['/usr/local/anaconda/include']\n*/\n        ", (119808, 66)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ^
SyntaxError: invalid syntax

在這里突然出現的是我的主目錄中存在一個緩存: /home/despo/dbliss/.cache/scipy/python27_compiled/sc_302644cc5257b9feebbfde0f5856848e1.cpp

刪除此高速緩存中的所有內容(即$ rm -r ~/.cache/scipy解決此問題。 沒有更多的SyntaxError

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM