Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ipython笔记本中几何代数的良好输出 短版_Ipython_Ipython Notebook_Sympy - Fatal编程技术网

ipython笔记本中几何代数的良好输出 短版

ipython笔记本中几何代数的良好输出 短版,ipython,ipython-notebook,sympy,Ipython,Ipython Notebook,Sympy,我能在ipython笔记本上打印出sympy几何代数对象的胶乳样式吗 较长版本 在ipython笔记本中,我可以从sympy获得各种数学对象的漂亮打印。例如,如果mysympy变量是希腊字符,则输出会漂亮地打印为latex。(可能使用MathJax…)一个明确的示例: from sympy import symbols, init_printing init_printing(use_latex=True) alpha = symbols('alpha') alpha**2/3 输出是一个显示

我能在ipython笔记本上打印出sympy几何代数对象的胶乳样式吗

较长版本 在
ipython
笔记本中,我可以从
sympy
获得各种数学对象的漂亮打印。例如,如果my
sympy
变量是希腊字符,则输出会漂亮地打印为latex。(可能使用MathJax…)一个明确的示例:

from sympy import symbols, init_printing
init_printing(use_latex=True)
alpha = symbols('alpha')
alpha**2/3
输出是一个显示得很好的分数,上面有一个正确的上标和一个真正的alpha。太好了

但我也对几何代数模块做了很多工作,我希望得到类似的结果。显然,这个模块有一个不同的打印系统,名为
latex\u ex
,当我从命令行运行脚本(如模块页面上的脚本)并让它们输出dvi文件时,它似乎可以工作。但我所做的一切都不能让GA在笔记本上看起来很好。有什么我能做的吗

具体来说,这里有一个具体的例子:

from sympy.galgebra.GA import *
metric = '1 0 0,0 1 0,0 0 1'
gamma_x,gamma_y,gamma_z = MV.setup('gamma_x gamma_y gamma_z',metric,True)
gamma_x
输出只是
gamma_x
repr
,这与
没有什么帮助。类似地,调用
print
只会给我
\u1*gamma\ux
,这正是我试图避免的

在脚本中,我可以在上面添加以下内容:

from sympy.galgebra.latex_ex import LatexPrinter, xdvi
LatexPrinter.format(1,1,1,1)
print gamma_x
xdvi(filename='testGA.tex')
这给了我期望的DVI和漂亮的latex表达式。当然,如果我在笔记本上做同样的事情,我绝对不会得到任何打印语句的输出,甚至那些不涉及GA对象的语句——实际上什么都没有,不仅仅是不漂亮的东西

我正在运行Python2.7.5和Sympy0.7.3,并使用iPython1.0下的笔记本

[编辑:下面是hackiness的更新版本] 由于工作方式发生了各种变化,我不得不做出各种变化。我收集了一个很好的例子

编辑:Hacky部分解决方案 实际上,我在使用当前版本的代码时遇到了一个非常难看的问题。下面的内容可以完成任务,但我非常不满意,因此我希望Alan的新版本模块将带来更好的结果。这主要是供参考的。但是基本的想法似乎是需要以某种方式定义
sympy.galgebra.GA.MV.\u repr\u latex.
。任何对Symphy或ipython的工作有深入了解的人都欢迎发表评论

from sympy.galgebra.GA import *
metric = '1 0 0,0 1 0,0 0 1'
gamma_x,gamma_y,gamma_z = MV.setup('{\gamma}_x {\gamma}_y {\gamma}_z',metric,True)

def MVlatex(mv, *args) :
    from re import sub
    s = str(mv)
    s = s.replace('*',r' ')
    s = sub(r'(?<![}_a-zA-Z0-9])_1(?![a-zA-Z0-9])', r' ', s)
    s = sub(r'__([a-zA-Z0-9]*)', r'^{\1}', s)
    s = sub(r'_([a-zA-Z0-9]*)', r'_{\1}', s)
    return '$$'+s+'$$'
sympy.galgebra.GA.MV._repr_latex_ = MVlatex

gamma_x
来自sympy.galgebra.GA导入*
度量值='10,01,01'
gamma_x,gamma_y,gamma_z=MV.setup('{\gamma}{\gamma}}{\gamma}}{\gamma}}{y}{\gamma}z',公制,真)
def MVlatex(mv,*参数):
来自再进口分公司
s=str(mv)
s=s.replace('*',r')

s=sub(r’(?我是GA模块a的作者,我将研究Ipython latex问题。我强烈建议您使用最新版本的Symphy,它有一个新版本的GA。查看有关如何使用新GA的新文档。有几件事发生了变化。请尝试以下内容(我不知道它是否有效,因为我自己不使用Ipython)

格式(ipy=True)

看看它是否有效(再次查看文档和新发行版的示例,因为其他内容在打印和模块的其他方面有变化)。我的开发方法是使用“geany”编辑器编写脚本。然后我可以只按编辑器上的run按钮,观察终端或latex的输出

我对您使用GA的目的感兴趣,并了解您希望在未来版本中包含的内容。如果您希望直接与我联系,我的电子邮件是

abrombo@verizon.net这对我很有用

import sympy
import sympy.galgebra
import sympy.galgebra.printing
sympy.galgebra.ga_print_on()
sympy.galgebra.ga.Format(ipy=True)
sympy.init_printing(use_latex=True)

def MVlatex(mv, *args) :
    from re import sub
    s = str(mv)
    s = sub(r'\\W',r'\\wedge', s)
    s = sub(r'\\bm',r'\\mathbf', s)
    return '$$'+s+'$$'
sympy.galgebra.ga.MV._repr_latex_ = MVlatex
编辑: 有更新的代码和非常不同的语法。我已经制作了一个包含最后一段代码的文档,这段代码可以让ipython笔记本完全工作。因此,希望在不久的将来,以下内容都不需要

老年人: 以下是我在较新版本的Symphy中使用的MWE(我目前使用Symphy版本0.7.5-git和ipython笔记本版本2.0.0-dev)

#一些通用的启动工具
导入sympy,sympy.galgebra.ga
度量值='10,01,01'
gamma_x,gamma_y,gamma_z=sympy.galgebra.ga.MV.setup('gamma_x gamma_y gamma_z',公制)
#为笔记本设置漂亮的打印
sympy.init_printing()
sympy.galgebra.ga.Format(ipy=True)
def MVlatex(mv,*参数):
中压底座至叶片()
返回“$$”+str(mv)。替换(r'\W',r'\wedget')。替换(r'\bm',r'\boldsymbol')。替换(r'\lp',r'\left(')。替换(r'\rp',r'\right)+“$$”
sympy.galgebra.ga.MV.\u repr\u乳胶
#举几个例子
显示(gamma_x^ gamma_y)
显示(3*伽马x*伽马y/2+(伽马z^伽马x))
据推测,相关部分实际上应该合并到galgebra代码中。特别是,
\W
\lp
\rp
等的tex宏定义,mathjax从未见过,
\bm
与mathjax不兼容,因此必须更改这些定义。此外,函数
\u repr\u latex
需要在
MV
类中定义

我还要注意,对于不能动态添加属性的其他类(
\u repr\u latex\u在本例中为
),您仍然可以告诉ipython使用您的函数进行显示,例如

ip=get_ipython()
latex\u formatter=ip.display\u formatter.formatters['text/latex']
latex格式化程序。用于按名称(“sympy.galgebra.ga”、“MV”和“MVlatex”)的类型

我正在对galgebra进行另一次重大重写,它解决了许多Ipython/LaTeX问题。一旦我能够将我为其编写的LaTeX文档转换为python sphinx,它将被添加到我的Symphy github存储库中。如果你不耐烦,请访问github.com/brombo/GA,并查看LaTeX文档中的GA.pdf。主要原因是需要重写是因为为了正确地处理流形/子流形,需要有几何代数的多个实例化,这在当前是不可能的