后记

为什么是Python?

Python的优点

Sage的主要实现语言是Python(参见 [Py]) ,但必须快速的代码是用编译语言实现的。Python有几个优点:

  • 对象保存 在Python中得到了很好的支持。Python支持将(几乎)任意对象保存到磁盘文件或数据库中。

  • 出色的支持 文档 源代码中的函数和包,包括文档的自动提取和所有示例的自动测试。这些例子是自动定期测试,并保证按指示工作。

  • 内存管理 :Python现在有一个经过深思熟虑的健壮的内存管理器和垃圾回收器,可以正确地处理循环引用,并允许在文件中使用局部变量。

  • Python有 多个程序包 Sage用户可能会非常感兴趣:数值分析和线性代数、二维和三维可视化、网络(用于分布式计算和服务器,例如通过twisted)、数据库支持等。

  • 便携性: 在大多数平台上,Python很容易在几分钟内从源代码处编译。

  • 异常处理: Python有一个复杂且经过深思熟虑的异常处理系统,即使在调用的代码中发生错误,程序也能优雅地恢复。

  • 调试器: Python包含一个调试器,因此当代码由于某种原因失败时,用户可以访问大量的堆栈跟踪,检查所有相关变量的状态,并在堆栈上下移动。

  • 探查器: 有一个Python分析器,它运行代码并创建一个报告,详细说明每个函数被调用的次数和时间。

  • A语言: 而不是写一个 新语言 对于数学,如Magma、Maple、Mathematica、Matlab、GP/PARI、GAP、Macaulay 2、Simath等,我们使用Python语言,这是一种流行的计算机语言,正由数百名熟练的软件工程师积极开发和优化。Python是一个具有成熟开发过程的开源成功案例(参见 [PyDev]) .

预解析器:Sage和Python的区别

Python的某些数学方面可能会令人困惑,因此Sage在几个方面与Python的行为有所不同。

  • 指数表示法: ** 对战 ^ . 在Python中, ^ 意思是“xor”,而不是求幂,所以在Python中我们有

    >>> 2^8
    10
    >>> 3^2
    1
    >>> 3**2
    9
    

    这种用法 ^ 可能看起来很奇怪,而且对于纯数学研究来说效率很低,因为“异或”函数很少使用。为了方便起见,Sage在将所有命令行传递给Python之前对其进行预解析,替换 ^ 与…无关 **

    sage: 2^8
    256
    sage: 3^2
    9
    sage: "3^2"
    '3^2'
    

    Sage中的位xor运算符是 ^^ . 这也适用于就地操作员 ^^=

    sage: 3^^2
    1
    sage: a = 2
    sage: a ^^= 8
    sage: a
    10
    
  • 整数除法: Python表达式 2/3 不像数学家所期望的那样。在 Python 2里,如果 mn 那么是整数 m/n 也是一个整数,即 m 除以 n . 因此 2/3=0 . 在 Python 3中, 2/3 返回浮点数 0.6666... . 在 Python 2和 Python 3中, // 是欧几里德分部 2//3 收益率 0 .

    我们在Sage解释器中处理这个问题,方法是在 Integer( ) 使除法成为有理数的构造器。例如:

    sage: 2/3
    2/3
    sage: (2/3).parent()
    Rational Field
    sage: 2//3
    0
    sage: int(2)/int(3)  # not tested, python2
    0
    
  • 长整数: 除了C-int之外,Python还支持任意精度的整数。这些整数比GMP提供的要慢得多,并且具有用 L 最后将它们与int区分开来(这不会很快改变)。Sage使用GMP C库实现任意精度的整数,这些整数打印时没有 L .

我们没有修改Python解释器(就像一些人在内部项目中所做的那样),而是完全按照原样使用Python语言,并为IPython编写一个预解析器,以便IPython的命令行行为符合数学家的期望。这意味着任何现有的Python代码都可以在Sage中使用。但是,在编写要导入Sage的包时,仍然必须遵守标准的Python规则。

(要安装Python库,例如您在Internet上找到的库,请按照说明操作,但是运行 sage -python 而不是 python . 这通常意味着打字 sage -python setup.py install

我想做点贡献。我怎么能?

如果您愿意为Sage做贡献,我们将非常感谢您的帮助!它可以从大量的代码贡献到添加到Sage文档,再到报告bug。

浏览Sage网页以获取开发人员的信息;除此之外,您还可以找到一长串按优先级和类别排序的Sage相关项目列表。这个 Sage Developer's Guide 也有有用的信息,你也可以查看 sage-devel 谷歌集团。

我如何引用Sage?

如果你用Sage写论文,请参考用Sage完成的计算,包括

[Sage] SageMath, the Sage Mathematics Software System (Version 8.7),
       The Sage Developers, 2019, https://www.sagemath.org.

在你的参考书目中(用你使用的Sage版本代替8.7)。此外,请尝试追踪Sage的哪些组成部分用于您的计算,例如,PARI?,差距?,单数?马克西玛?也引用了这些系统。如果您对您的计算使用什么软件有疑问,请随时在 sage-devel 谷歌集团。看到了吗 一元多项式 关于这一点的进一步讨论。


如果您刚好刚刚通读了本教程,并且对花了多长时间有所了解,请在 sage-devel 谷歌集团。

和Sage玩得开心!