简体   繁体   English

使用ipython使鼠尾草工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM