后记

为什么是 Python ?

Python的优势

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

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

  • 极好地支持 documentation 源代码中的函数和包,包括文档的自动提取和所有示例的自动测试。这些示例定期进行自动测试,并保证按指示工作。

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

  • Python 有 many packages 现在,Sage的用户可能会非常感兴趣的功能有:数值分析和线性代数、2D和3D可视化、联网(用于分布式计算和服务器,例如通过TWSTED)、数据库支持等。

  • Portability: 在大多数平台上,在几分钟内就可以很容易地从源代码编译出Python。

  • Exception handling: Python有一个复杂的、经过深思熟虑的异常处理系统,即使在它们调用的代码中出现错误,程序也可以优雅地恢复。

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

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

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

预解析器:Sage和Python之间的差异

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

  • Notation for exponentiation: **^ 。在Python语言中, ^ 意思是“异或”,而不是求幂,所以在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运算符是 ^^ 。这也适用于inplace运算符 ^^=

    sage: 3^^2
    1
    sage: a = 2
    sage: a ^^= 8
    sage: a
    10
    
  • Integer division: Python表达式 2/3 并不是数学家所期望的那样。在Python2中,如果 mn 是整型的,那么 m/n 也是一个整数,即的商 m 除以 n 。因此 2/3=0 。在《 Python 3》中, 2/3 返回浮点数 0.6666... 。在Python2和Python3中, // 是欧几里得除法和 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
    
  • Long integers: 除了C-int之外,Python还具有对任意精度整数的本机支持。这些整数比GMP提供的要慢得多,并且具有使用 L 将它们与int区分开来(这一点短期内不会改变)。Sage使用GMP C库实现了任意精度的整数,并且这些打印不需要 L

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

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

我想以某种方式做出贡献。我怎么能做到呢?

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

浏览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?,Gap?,Single?马克西玛?并引用了这些系统。如果您对您的计算所使用的软件有疑问,请随时在 sage-devel 谷歌集团。看见 一元多项式 关于这一点的进一步讨论。


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

和Sage一起玩得开心!