[英]Making sage work with ipython
I have downloaded and ran make
to install sage
but when I am trying to run the following code in ipython notebook
and I get a lot of error messages since it can not import the methods of sage program properly: 我已经下载并运行
make
来安装sage
但是当我尝试在ipython notebook
运行以下代码时,由于无法正确导入sage程序的方法,我收到很多错误消息:
%load_ext cythonmagic
and then 接着
%%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)
The errors are : 错误是:
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
Any thought that might help it works? 有什么想法可以帮助它起作用吗?
I don't use the IPython notebook inside of Sage myself, and I'm not a Cython expert, so take this with a grain of salt. 我自己不使用Sage内的IPython笔记本,而且我不是Cython专家,因此请带一点盐。 (Hopefully those who do and are will see this - there are more hanging out here .) However, I wouldn't be surprised if starting off with a
from sage.all import *
helps. (希望那些谁做的,都可以看到这一点-有更多的挂出在这里 。)但是,如果具有出发,我不会感到惊讶,
from sage.all import *
帮助。 I don't know that one can just include a random header like you are trying to do. 我不知道您可以像您尝试的那样仅包含一个随机标头。 It turns out that importing just little pieces of Sage is ... not so easy.
事实证明,导入小块鼠尾草不是一件容易的事。 To some extent, on purpose.
在某种程度上是有目的的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.