我已经下载并运行make
来安装sage
,但是当我尝试在ipython notebook
中运行以下代码时,由于无法正确导入Sage程序的方法,我收到很多错误消息:
%load_ext cythonmagic
接着
%%cython
include "sage/gsl/gsl.pxi"
cdef double do_callback(double x, void* params):
return (<MyCallback>params).eval(x)
cdef class MyCallback:
cdef double a
def __init__(self, a):
self.a = a
cpdef double eval(self, double x):
print "eval", x, self.a * x * x
return self.a * x * x
def call_gsl(self):
cdef gsl_integration_workspace* w =
gsl_integration_workspace_alloc (1000)
cdef gsl_function F
F.function = &do_callback
F.params = <void*>self
cdef double result, error
gsl_integration_qags (&F, 0, 1, 0, 1e-7, 1000, w, &result, &error);
print result, error
gsl_integration_workspace_free(w)
错误是:
InternalError Traceback (most recent call last)
<ipython-input-3-3bcbbcb051de> in <module>()
----> 1 get_ipython().run_cell_magic(u'cython', u'', u'include "sage/gsl/gsl.pxi" \n\ncdef double do_callback(double x, void* params): \n (<MyCallback>params).eval(x) \n\ncdef class MyCallback: \n cdef double a \n def __init__(self, a): \n self.a = a \n cpdef double eval(self, double x): \n print "eval", x, self.a * x * x \n return self.a * x * x \n def call_gsl(self): \n cdef gsl_integration_workspace* w = \ngsl_integration_workspace_alloc (1000) \n\n cdef gsl_function F \n F.function = &do_callback \n F.params = <void*>self \n\n cdef double result, error \n gsl_integration_qags (&F, 0, 1, 0, 1e-7, 1000, w, &result, &error); \n print result, error \n\n gsl_integration_workspace_free(w) ')
/anaconda/lib/python2.7/site-packages/IPython/core/interactiveshell.pyc in run_cell_magic(self, magic_name, line, cell)
2127 magic_arg_s = self.var_expand(line, stack_depth)
2128 with self.builtin_trap:
-> 2129 result = fn(magic_arg_s, cell)
2130 return result
2131
/anaconda/lib/python2.7/site-packages/IPython/extensions/cythonmagic.pyc in cython(self, line, cell)
/anaconda/lib/python2.7/site-packages/IPython/core/magic.pyc in <lambda>(f, *a, **k)
189 # but it's overkill for just that one bit of state.
190 def magic_deco(arg):
--> 191 call = lambda f, *a, **k: f(*a, **k)
192
193 if callable(arg):
/anaconda/lib/python2.7/site-packages/IPython/extensions/cythonmagic.pyc in cython(self, line, cell)
242 force = True,
243 )
--> 244 build_extension.extensions = cythonize([extension], **opts)
245 except CompileError:
246 return
/anaconda/lib/python2.7/site-packages/Cython-0.20.1-py2.7-linux-x86_64.egg/Cython/Build/Dependencies.pyc in cythonize(module_list, exclude, nthreads, aliases, quiet, force, exclude_failures, **options)
692 quiet=quiet,
693 exclude_failures=exclude_failures,
--> 694 aliases=aliases)
695 deps = create_dependency_tree(ctx, quiet=quiet)
696 build_dir = getattr(options, 'build_dir', None)
/anaconda/lib/python2.7/site-packages/Cython-0.20.1-py2.7-linux-x86_64.egg/Cython/Build/Dependencies.pyc in create_extension_list(patterns, exclude, ctx, aliases, quiet, exclude_failures)
618 if module_name not in seen:
619 try:
--> 620 kwds = deps.distutils_info(file, aliases, base).values
621 except Exception:
622 if exclude_failures:
/anaconda/lib/python2.7/site-packages/Cython-0.20.1-py2.7-linux-x86_64.egg/Cython/Build/Dependencies.pyc in distutils_info(self, filename, aliases, base)
528
529 def distutils_info(self, filename, aliases=None, base=None):
--> 530 return (self.transitive_merge(filename, self.distutils_info0, DistutilsInfo.merge)
531 .subs(aliases)
532 .merge(base))
/anaconda/lib/python2.7/site-packages/Cython-0.20.1-py2.7-linux-x86_64.egg/Cython/Compiler/Main.pyc in find_include_file(self, filename, pos)
217 include=True)
218 if not path:
--> 219 error(pos, "'%s' not found" % filename)
220 return path
221
/anaconda/lib/python2.7/site-packages/Cython-0.20.1-py2.7-linux-x86_64.egg/Cython/Compiler/Errors.pyc in error(position, message)
165 #print "Errors.error:", repr(position), repr(message) ###
166 if position is None:
--> 167 raise InternalError(message)
168 err = CompileError(position, message)
169 if DebugFlags.debug_exception_on_error: raise Exception(err) # debug
InternalError: Internal compiler error: 'sage/gsl/gsl.pxi' not found
有什么想法可能会帮助它起作用吗?
最佳答案
我自己不使用Sage内的IPython笔记本,而且我不是Cython专家,所以请带一点盐。 (希望那些做过并且做得到的人会看到这一点-还有更多的here。)但是,如果从from sage.all import *
开始会有所帮助,我不会感到惊讶。我不知道您可以像您尝试的那样仅包含一个随机标头。事实证明,导入一小部分Sage并不是一件容易的事。在某种程度上是有目的的。
关于python - 使用ipython使鼠尾草工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24532549/