Differences between revisions 2 and 85 (spanning 83 versions)
Revision 2 as of 2021-08-31 22:48:39
Size: 1360
Editor: mkoeppe
Comment: 9.5.beta0
Revision 85 as of 2022-01-10 20:07:58
Size: 20669
Editor: mkoeppe
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
current development cycle (2021) release candidate (2022)
Line 10: Line 10:
=== Changes to symbolic expressions ===

 * `symbolic_expression` is now able to create vectors and matrices of symbolic expressions for more general inputs. [[https://trac.sagemath.org/ticket/16761|#16761]]

  For example, if the input is a list or tuple of lists/tuples/vectors:
   {{{
sage: M = symbolic_expression([[1, x, x^2], (x, x^2, x^3), vector([x^2, x^3, x^4])]); M
[ 1 x x^2]
[ x x^2 x^3]
[x^2 x^3 x^4]
sage: M.parent()
Full MatrixSpace of 3 by 3 dense matrices over Symbolic Ring
}}}


 * Symbolic expressions can no longer be called with positional arguments. [[https://trac.sagemath.org/ticket/14270|#14270]]

   This was deprecated since Sage 4.0, although a bug prevented the deprecation warning from being issued in Sage versions 8.4 to 9.3. [[https://trac.sagemath.org/ticket/32139|#32319]]

   Instead of `(x+1)(2)`, write either `(x+1)(x=2)`, or `(x+1).subs(x=2)`, or `((x+1).function(x))(2)`.

=== Interface to Mathics, a free implementation of the Wolfram language ===

Sage now has an optional package providing [[https://mathics.org/|Mathics]], a free (open-source) general-purpose computer algebra system featuring Mathematica-compatible syntax and functions, and an interface to it.[[https://trac.sagemath.org/ticket/31778|#31778]]
Line 13: Line 38:
 * The Cholesky decomposition for sparse RDF/CDF matrices now uses a specialized fast algorithm when cvxopt is available. [[https://trac.sagemath.org/ticket/13674|#13674]]
Line 17: Line 43:
== Number theory ==

 * Logarithms modulo composite integers are now dramatically faster in some important cases (such as prime-power moduli). [[https://trac.sagemath.org/ticket/32375|#32375]]
 * Logarithms in binary finite fields now use index calculus instead of generic-group algorithms when appropriate (via PARI's [[https://pari.math.u-bordeaux.fr/dochtml/html/Arithmetic_functions.html#se:fflog|fflog()]]). [[https://trac.sagemath.org/ticket/32842|#32842]]
 * Binary quadratic forms' [[https://doc.sagemath.org/html/en/reference/quadratic_forms/sage/quadratic_forms/binary_qf.html#sage.quadratic_forms.binary_qf.BinaryQF.solve_integer|.solve_integer()]] method now uses PARI's [[https://pari.math.u-bordeaux.fr/dochtml/html-stable/Arithmetic_functions.html#se:qfbsolve|qfbsolve()]] instead of a brute-force search, which is often exponentially faster. [[https://trac.sagemath.org/ticket/32782|#32782]]

=== Elliptic curves and isogenies ===

 * The `.abelian_group()` method for elliptic curves over finite fields is now much faster (with an exponential speedup in some cases). [[https://trac.sagemath.org/ticket/32312|#32312]]
 * Mutability of elliptic-curve isogenies is now deprecated. [[https://trac.sagemath.org/ticket/32388|#32388]]
   (This affects the methods `.switch_sign()`, `.set_pre_isomorphism()`, and `.set_post_isomorphism()`.)

Bugfixes:

 * The `.multiplication_by_m_isogeny()` method used to be correct only up to isomorphism. [[https://trac.sagemath.org/ticket/32490|#32490]]
 * Computing isomorphisms between elliptic curves in characteristic 2 used to fail in some cases. [[https://trac.sagemath.org/ticket/32632|#32632]]

=== Modular and quasimodular forms ===

[[https://davidayotte.github.io/posts/2021/08/gsoc-final/|David Ayotte's project]] in the [[https://summerofcode.withgoogle.com/archive/2021/organizations/5180088957534208/|2021 Google Summer of Code]] has brought major new features and improvements to modular forms:

 * The class `ModularFormsRing` (now in `sage.modular.modform.ring`) now follows the `Parent`/`Element` structure. [[https://trac.sagemath.org/ticket/31559|#31559]].
 * Rings of quasimodular forms for a given congruence subgroups are now implemented. [[https://trac.sagemath.org/ticket/31512|#31512]]
 * One can now convert a modular form ring element and a quasimodular form ring element to a polynomial in the generator of the ring. [[https://trac.sagemath.org/ticket/32135|#32135]], [[https://trac.sagemath.org/ticket/32336|#32336]]
 * It is now possible to take derivatives of modular forms and quasimodular forms. [[https://trac.sagemath.org/ticket/32343|#32343]], [[https://trac.sagemath.org/ticket/32357|#32357]]

Also a conversion bug between spaces of modular forms was fixed. See [[https://trac.sagemath.org/ticket/31560|Meta-ticket #31560]] for an overview of tickets.
Line 19: Line 73:
 * The Lie algebras e,,7,, and e,,8,, now have [[https://trac.sagemath.org/ticket/32082|implementations]] as matrix Lie algebras.

=== New lazy Laurent series backend ===

The lazy Laurent series has been nearly completely rewritten using a new backend coefficient stream with a cache has both sparse and dense formatted input. This has been designed to increase speed and be very flexible. This has also been extensively doctested to make sure the code is robust. This constituted Tejavsi Chebrolu's 2021 [[https://trac.sagemath.org/ticket/31651|GSoC project (metaticket)]]. This is meant to be the eventual replacement of the coefficient streams used in the species code (including for lazy power series), which is known to be buggy (see, e.g., [[https://trac.sagemath.org/ticket/15673|#15673]]). This also extends the functionality to include:

 * formal power series defined by functional equations;
 * [[https://trac.sagemath.org/ticket/32345|special functions]] such as `sin(f)`;
 * dense and sparse implementations;
 * more robust checks for equality.

=== Lazy Dirichlet series ===

As a demonstration of the flexibility for the coefficient stream framework for lazy Laurent series, we also implement [[https://trac.sagemath.org/ticket/32309|lazy Dirichlet series]]. We also give this a structure of a valuation ring by using the log of degree of the lowest nonzero coefficient.
Line 22: Line 90:
- The package `sage.media` is now deprecated [[https://trac.sagemath.org/ticket/12673|#12673]]


 * The package `sage.finance` is now deprecated. (The module `sage.finance.time_series` is now available as `sage.stats.time_series`.) [[https://trac.sagemath.org/ticket/32427|#32427]]

 * The module `sage.interfaces.primecount` is now deprecated. The functionality should now be imported from `primecountpy`, provided by the new standard package [[https://pypi.org/project/primecountpy/|primecountpy]]. [[https://trac.sagemath.org/ticket/32412|#32412]], [[https://trac.sagemath.org/ticket/32894|#32894]]

 * The package `sage.media` is now deprecated. [[https://trac.sagemath.org/ticket/12673|#12673]]

 * The module `sage.stats.basic_stats` is now deprecated. [[https://trac.sagemath.org/ticket/29662|#29662]]

   In the deprecation messages, we point users to suitable [[https://numpy.org/doc/stable/reference/routines.statistics.html|numpy]], and [[https://docs.scipy.org/doc/scipy/reference/stats.html|scipy.stats]], and [[https://pandas.pydata.org/pandas-docs/stable/reference/series.html|pandas]] functions. (Python 3 also comes with a basic ​built-in `stats` module, but much of its functionality is unfortunately incompatible with !SageMath's number types, [[https://trac.sagemath.org/ticket/28234|#28234]].)

 * Many `is_...` functions are now deprecated.

   Use `isinstance` with the new abstract base classes instead (see below).
Line 29: Line 106:
Sage 9.5 continues to support system installations of Python 3.7.x, 3.8.x, and 3.9.x.
New in Sage 9.5 is experimental support for system Python 3.10.x.
If no suitable system Python is found, Sage builds its own copy from source; the
SPKG has been upgraded to the latest in the 3.9 series, version 3.9.9. [[https://trac.sagemath.org/ticket/30766|#30766]], [[https://trac.sagemath.org/ticket/32853|#32853]]

[[https://gitlab.com/sagemath/lcalc|lcalc]] has been upgraded to the new 2.x series maintained by the Sage team ([[https://gitlab.com/sagemath/lcalc/-/blob/2.0.5/doc/ChangeLog|Release notes]]). [[https://trac.sagemath.org/ticket/32037|#32037]], [[https://trac.sagemath.org/ticket/33043|#33043]]

[[https://numpy.org/|NumPy]] has been upgraded from 1.20.3 to the 1.21 series, see the [[https://numpy.org/doc/stable/release.html|release notes]].

[[https://scipy.org/|SciPy]] has been upgraded from 1.6.3 to the 1.7 series, see the [[http://scipy.github.io/devdocs/release.1.7.0.html|release notes]].

[[https://matplotlib.org/|Matplotlib]] has been upgraded from 3.3.4 to the 3.5 series. [[https://trac.sagemath.org/ticket/31580|#31580]], [[https://trac.sagemath.org/ticket/33040|#33040]]

[[https://networkx.org/|NetworkX]] has been upgraded from 2.5.1 to the 2.6 series, bringing various new features and improvements, see the [[https://networkx.org/documentation/stable/release/release_2.6.html|changelog]].

[[https://www.sympy.org/en/index.html|SymPy]] has been upgraded from 1.8 to 1.9, see the [[https://github.com/sympy/sympy/wiki/release-notes-for-1.9|release notes]].

[[https://polymake.org/doku.php|polymake]] has been upgraded from 4.4 to 4.5, see the [[https://polymake.org/doku.php/news/release_4_5|release notes]]. On macOS, Sage is now also able to use a polymake installation made via Homebrew.

IPython and Jupyter packages have been upgraded. In particular, `notebook` has been upgraded from 6.1.1 to the 6.4 series, see the [[https://jupyter-notebook.readthedocs.io/en/stable/changelog.html#changelog|changelog]]. [[https://trac.sagemath.org/ticket/31280|#31280]], [[https://trac.sagemath.org/ticket/32930|#32930]], [[https://trac.sagemath.org/ticket/33020|#33020]]

For a list of all packages and their versions, see
Line 31: Line 130:
== Configuration changes ==

=== Separate virtual environment for Python packages ===

In non-incremental builds from source, Sage now defaults to setting up the virtual environment for the Python packages in a directory separate from `SAGE_ROOT/local`. [[https://trac.sagemath.org/ticket/32442|#32442]]

At the end of a run of `./configure`, you will see messages like the following:
{{{
config.status: executing links commands
config.status: creating convenience symlink prefix -> local
config.status: creating convenience symlink venv -> local/var/lib/sage/venv-python3.9
}}}
The symbolic link `SAGE_ROOT/venv` points to the location of the virtual environment. It depends on the version of Python that is in use. The symbolic link is not needed for build or runtime; it is only provided for convenience.

The previous behavior can be restored by using `./configure --without-sage-venv`.

=== New default: configure --with-system-gcc=force ===

The Sage distribution no longer attempts to build its own `gcc` if no suitable C/C++ compilers can be found. Instead, `configure` will exit with an error in this situation. [[https://trac.sagemath.org/ticket/32060|#32060]]

The previous behavior can be restored by using `./configure --with-system-gcc=yes`; alternatively, you can use `./configure --with-system-gcc=no`.

=== New option: configure --disable-doc ===

If you do not intend to build the Sage documentation from source, you can now use `./configure --disable-doc`.
It suppresses the installation of several packages that are only needed for docbuilding and makes `make` (or `make all`) equivalent to `make build`. [[https://trac.sagemath.org/ticket/32759|#32759]]

=== Packages atlas and mpir removed ===

The package `atlas`, which could be used as an alternative to `openblas`, and the corresponding `configure` options have been removed. [[https://trac.sagemath.org/ticket/30350|#30350]]


The package `mpir`, which could be used as an alternative to `gmp`, and the corresponding `configure` options have been removed. [[https://trac.sagemath.org/ticket/32549|#32549]], [[https://trac.sagemath.org/ticket/32727|#32727]]

=== psutil package removed ===

The psutil (memory management) python package has been removed. The version within sage was heavily patched and no longer feasible to maintain, and the upstream version is incompatible with one of our supported platforms. [[https://trac.sagemath.org/ticket/32656|#32656]]

== Modularization and packaging changes ==

Sage 9.5 contains many changes that were made as part of the modularization project described in [[https://trac.sagemath.org/ticket/29705|#29705]].

=== New distribution package: sage-setup ===

The build system of the Sage library, `sage_setup`, is now provided by a separate [[https://pypi.org/project/sage-setup/|distribution package sage-setup]]. The source tree is the subdirectory [[https://github.com/sagemath/sage/tree/develop/pkgs/sage-setup|pkgs/sage-setup/]] of the Sage git repository. [[https://trac.sagemath.org/ticket/29847|#29847]]

=== Pynac merged into the Sage library ===

The core of the symbolic expressions subsystem of Sage, an adaptation of the [[https://www.ginac.de/|GiNaC]] library to Python known as [[http://pynac.org/|Pynac]], has been merged into the Sage library source code as [[https://github.com/sagemath/sage/tree/develop/src/sage/symbolic/ginac|src/sage/symbolic/ginac/]]; all future development of Pynac is intended to happen here. [[https://trac.sagemath.org/ticket/32386|#32386]], [[https://trac.sagemath.org/ticket/32387|#32387]]

  This removes an obstacle to Python packaging: Pynac was a shared library with a dependency on the Python C API but not an extension module, and it could not be installed using standard Python tools. Now the shared library is gone; all of Pynac (about 60kLOC of C++ code spread over 100 *.h and *.cpp files) is put in a single extension module `sage.symbolic.expression`. All other extension modules that used to link to libpynac (`sage.libs.pynac.pynac`, `sage.symbolic.function`, `sage.symbolic.series` etc.) have either been merged into `sage.symbolic.expression`, or the dependency has been resolved through refactoring.

  The integration of Pynac into the Sage source tree will also make it easier for Sage developers to make changes to symbolics.

=== Doctest annotation "# optional - FEATURE" for portions of the Sage library ===

In the Sage doctesting framework, a line of tests can be [[https://doc.sagemath.org/html/en/developer/doctesting.html#run-optional-doctests|conditionalized on the presence of a feature]], such as an installed optional package, using a comment of the form `# optional - FEATURE`.

In Sage 9.5, doctests can also be conditionalized on the presence of certain parts of the Sage library. [[https://trac.sagemath.org/ticket/32614|#32614]]

For example, doctests that depend on the Symbolic Ring can be marked `# optional - sage.symbolic`, and doctests that need number fields can be marked `# optional - sage.rings.number_field`.

Also various runtime tests for external programs have been rewritten as `Feature`s. [[https://trac.sagemath.org/ticket/27744|#27744]], [[https://trac.sagemath.org/ticket/32174|#32174]], [[https://trac.sagemath.org/ticket/32649|#32649]], [[https://trac.sagemath.org/ticket/32650|#32650]], [[https://trac.sagemath.org/ticket/32866|#32866]], [[https://trac.sagemath.org/ticket/32926|#32926]]


=== Module-level annotation "# sage.doctest: optional - FEATURE" ===

Moreover, Sage 9.5 extends this mechanism by allowing developers to mark all doctests in a Python file as conditional on a feature. [[https://trac.sagemath.org/ticket/30778|#30778]]

These module-level directives go to the top of the source file and take the form
{{{
# sage.doctest: optional - FEATURE
}}}


=== Abstract base classes for "isinstance" testing ===

The new module `sage.rings.abc` defines a number of abstract base classes that can be used for `isinstance` testing with parent classes instead of importing `is_...` functions from various implementation modules. [[https://trac.sagemath.org/ticket/32566|#32566]], [[https://trac.sagemath.org/ticket/32600|#32600]], [[https://trac.sagemath.org/ticket/32606|#32606]], [[https://trac.sagemath.org/ticket/32610|#32610]], [[https://trac.sagemath.org/ticket/32612|#32612]], [[https://trac.sagemath.org/ticket/32660|#32660]],
[[https://trac.sagemath.org/ticket/32665|#32665]], [[https://trac.sagemath.org/ticket/32719|#32719]], [[https://trac.sagemath.org/ticket/32742|#32742]], [[https://trac.sagemath.org/ticket/32750|#32750]]

In a similar way, `sage.geometry.abc` defines abstract base classes `Polyhedron`, `ConvexRationalPolyhedralCone`, etc. [[https://trac.sagemath.org/ticket/32637|#32637]]

Likewise, `sage.structure.element` now defines an abstract base class `Expression` that can be used for `isinstance` testing, instead of importing `is_Expression` or the implementation class `Expression` from `sage.symbolic.expression`. [[https://trac.sagemath.org/ticket/32638|#32638]], [[https://trac.sagemath.org/ticket/32730|#32730]]


See also Meta-ticket [[https://trac.sagemath.org/ticket/32414|#32414]].
Line 35: Line 219:
The [[https://groups.google.com/g/sage-release/c/3Kc0y5g-VXs/m/ocUI0ysCAwAJ|first beta release]] in the 9.5 development series was tagged on 2021-08-31. === Sources ===

The [[https://groups.google.com/g/sage-release/c/3Kc0y5g-VXs/m/ocUI0ysCAwAJ|first beta release]] in the 9.5 development series was tagged on 2021-08-31. The [[https://groups.google.com/g/sage-release/c/gTNMEVbzb6M/m/mgGAhiF1AQAJ|first release candidate]] is 9.5.rc0, tagged 2022-01-09.

!SageMath 9.5 supports most [[https://wiki.sagemath.org/ReleaseTours/sage-9.4#Availability_of_Sage_9.4_and_installation_help|platforms that were supported by Sage 9.4]] and '''adds support for building on recent Linux distributions that use glibc ≥ 2.34''' (`fedora-35`, `ubuntu-impish`, `ubuntu-jammy`, `archlinux-latest`, etc.) [[https://trac.sagemath.org/ticket/32576|#32756]]

Sage 9.5 has dropped support for `debian-jessie` with the default compiler, GCC 4.9.x. This has allowed us to upgrade the package [[https://github.com/kimwalisch/primecount|primecount]] to the latest version, which has stricter requirements for C++ 11, and to make it a standard package. (Sage 9.5 still supports distributions with compilers from the GCC 4.8.x series, such as `ubuntu-trusty`.) [[https://trac.sagemath.org/ticket/25009|#25009]]

Here is a summary of the platforms on which Sage 9.5 is known to build from source. (On platforms marked with the superscript ⁺, installing optional packages
is not supported.)

 * '''Linux 64-bit''' (x86_64)
   * ubuntu-{[[https://launchpad.net/ubuntu/trusty|trusty]]⁺,[[https://launchpad.net/ubuntu/xenial|xenial]],[[https://launchpad.net/ubuntu/bionic|bionic]],[[https://launchpad.net/ubuntu/focal|focal]],[[https://launchpad.net/ubuntu/hirsute|hirsute]],[[https://launchpad.net/ubuntu/impish|impish]],[[https://launchpad.net/ubuntu/jammy|jammy]]},
   * debian-{[[https://wiki.debian.org/DebianStretch|stretch]],[[https://wiki.debian.org/DebianBuster|buster]],[[https://wiki.debian.org/DebianBullseye|bullseye]],[[https://wiki.debian.org/DebianBookworm|bookworm]],[[https://wiki.debian.org/DebianUnstable|sid]]},
   * linuxmint-{[[https://www.linuxmint.com/edition.php?id=158|17]]⁺,[[https://www.linuxmint.com/edition.php?id=217|18]],[[https://linuxmint.com/rel_tara_cinnamon.php|19]],[[https://linuxmint.com/rel_tricia_cinnamon.php|19.3]],[[https://www.linuxmint.com/rel_ulyssa_cinnamon_whatsnew.php|20.1]],[[https://linuxmint.com/rel_uma_cinnamon.php|20.2]],[[https://linuxmint.com/rel_una_cinnamon.php|20.3]]},
 * more TBD

Building Sage 9.5 from source on Apple Silicon (M1) requires the use of [[https://brew.sh/|Homebrew]]. Be sure to follow the [[https://github.com/sagemath/sage/blob/develop/README.md|README]] and the instructions that the `./configure` command issues regarding the installation of system packages from Homebrew.

Since 9.5.rc0, Sage has experimental support for system Python 3.10.x. It continues to support Python 3.7.x, 3.8.x, 3.9.x. [[https://trac.sagemath.org/ticket/30766|#30766]]
Line 44: Line 247:

 * [[https://github.com/sagemath/sage/compare/9.4...develop#files_bucket|Diff from 9.4]]

Sage 9.5 Release Tour

release candidate (2022)

Symbolics

Changes to symbolic expressions

  • symbolic_expression is now able to create vectors and matrices of symbolic expressions for more general inputs. #16761

    • For example, if the input is a list or tuple of lists/tuples/vectors:
      • sage: M = symbolic_expression([[1, x, x^2], (x, x^2, x^3), vector([x^2, x^3, x^4])]); M
        [  1   x x^2]
        [  x x^2 x^3]
        [x^2 x^3 x^4]
        sage: M.parent()
        Full MatrixSpace of 3 by 3 dense matrices over Symbolic Ring
  • Symbolic expressions can no longer be called with positional arguments. #14270

    • This was deprecated since Sage 4.0, although a bug prevented the deprecation warning from being issued in Sage versions 8.4 to 9.3. #32319

      Instead of (x+1)(2), write either (x+1)(x=2), or (x+1).subs(x=2), or ((x+1).function(x))(2).

Interface to Mathics, a free implementation of the Wolfram language

Sage now has an optional package providing Mathics, a free (open-source) general-purpose computer algebra system featuring Mathematica-compatible syntax and functions, and an interface to it.#31778

Linear Algebra

  • The Cholesky decomposition for sparse RDF/CDF matrices now uses a specialized fast algorithm when cvxopt is available. #13674

Manifolds

Number theory

  • Logarithms modulo composite integers are now dramatically faster in some important cases (such as prime-power moduli). #32375

  • Logarithms in binary finite fields now use index calculus instead of generic-group algorithms when appropriate (via PARI's fflog()). #32842

  • Binary quadratic forms' .solve_integer() method now uses PARI's qfbsolve() instead of a brute-force search, which is often exponentially faster. #32782

Elliptic curves and isogenies

  • The .abelian_group() method for elliptic curves over finite fields is now much faster (with an exponential speedup in some cases). #32312

  • Mutability of elliptic-curve isogenies is now deprecated. #32388

    • (This affects the methods .switch_sign(), .set_pre_isomorphism(), and .set_post_isomorphism().)

Bugfixes:

  • The .multiplication_by_m_isogeny() method used to be correct only up to isomorphism. #32490

  • Computing isomorphisms between elliptic curves in characteristic 2 used to fail in some cases. #32632

Modular and quasimodular forms

David Ayotte's project in the 2021 Google Summer of Code has brought major new features and improvements to modular forms:

  • The class ModularFormsRing (now in sage.modular.modform.ring) now follows the Parent/Element structure. #31559.

  • Rings of quasimodular forms for a given congruence subgroups are now implemented. #31512

  • One can now convert a modular form ring element and a quasimodular form ring element to a polynomial in the generator of the ring. #32135, #32336

  • It is now possible to take derivatives of modular forms and quasimodular forms. #32343, #32357

Also a conversion bug between spaces of modular forms was fixed. See Meta-ticket #31560 for an overview of tickets.

Algebra

  • The Lie algebras e7 and e8 now have implementations as matrix Lie algebras.

New lazy Laurent series backend

The lazy Laurent series has been nearly completely rewritten using a new backend coefficient stream with a cache has both sparse and dense formatted input. This has been designed to increase speed and be very flexible. This has also been extensively doctested to make sure the code is robust. This constituted Tejavsi Chebrolu's 2021 GSoC project (metaticket). This is meant to be the eventual replacement of the coefficient streams used in the species code (including for lazy power series), which is known to be buggy (see, e.g., #15673). This also extends the functionality to include:

  • formal power series defined by functional equations;
  • special functions such as sin(f);

  • dense and sparse implementations;
  • more robust checks for equality.

Lazy Dirichlet series

As a demonstration of the flexibility for the coefficient stream framework for lazy Laurent series, we also implement lazy Dirichlet series. We also give this a structure of a valuation ring by using the log of degree of the lowest nonzero coefficient.

Deprecated and removed functionality

  • The package sage.finance is now deprecated. (The module sage.finance.time_series is now available as sage.stats.time_series.) #32427

  • The module sage.interfaces.primecount is now deprecated. The functionality should now be imported from primecountpy, provided by the new standard package primecountpy. #32412, #32894

  • The package sage.media is now deprecated. #12673

  • The module sage.stats.basic_stats is now deprecated. #29662

    • In the deprecation messages, we point users to suitable numpy, and scipy.stats, and pandas functions. (Python 3 also comes with a basic ​built-in stats module, but much of its functionality is unfortunately incompatible with SageMath's number types, #28234.)

  • Many is_... functions are now deprecated.

    • Use isinstance with the new abstract base classes instead (see below).

Package upgrades

Sage 9.5 continues to support system installations of Python 3.7.x, 3.8.x, and 3.9.x. New in Sage 9.5 is experimental support for system Python 3.10.x. If no suitable system Python is found, Sage builds its own copy from source; the SPKG has been upgraded to the latest in the 3.9 series, version 3.9.9. #30766, #32853

lcalc has been upgraded to the new 2.x series maintained by the Sage team (Release notes). #32037, #33043

NumPy has been upgraded from 1.20.3 to the 1.21 series, see the release notes.

SciPy has been upgraded from 1.6.3 to the 1.7 series, see the release notes.

Matplotlib has been upgraded from 3.3.4 to the 3.5 series. #31580, #33040

NetworkX has been upgraded from 2.5.1 to the 2.6 series, bringing various new features and improvements, see the changelog.

SymPy has been upgraded from 1.8 to 1.9, see the release notes.

polymake has been upgraded from 4.4 to 4.5, see the release notes. On macOS, Sage is now also able to use a polymake installation made via Homebrew.

IPython and Jupyter packages have been upgraded. In particular, notebook has been upgraded from 6.1.1 to the 6.4 series, see the changelog. #31280, #32930, #33020

For a list of all packages and their versions, see

Configuration changes

Separate virtual environment for Python packages

In non-incremental builds from source, Sage now defaults to setting up the virtual environment for the Python packages in a directory separate from SAGE_ROOT/local. #32442

At the end of a run of ./configure, you will see messages like the following:

config.status: executing links commands
config.status: creating convenience symlink prefix -> local
config.status: creating convenience symlink venv -> local/var/lib/sage/venv-python3.9

The symbolic link SAGE_ROOT/venv points to the location of the virtual environment. It depends on the version of Python that is in use. The symbolic link is not needed for build or runtime; it is only provided for convenience.

The previous behavior can be restored by using ./configure --without-sage-venv.

New default: configure --with-system-gcc=force

The Sage distribution no longer attempts to build its own gcc if no suitable C/C++ compilers can be found. Instead, configure will exit with an error in this situation. #32060

The previous behavior can be restored by using ./configure --with-system-gcc=yes; alternatively, you can use ./configure --with-system-gcc=no.

New option: configure --disable-doc

If you do not intend to build the Sage documentation from source, you can now use ./configure --disable-doc. It suppresses the installation of several packages that are only needed for docbuilding and makes make (or make all) equivalent to make build. #32759

Packages atlas and mpir removed

The package atlas, which could be used as an alternative to openblas, and the corresponding configure options have been removed. #30350

The package mpir, which could be used as an alternative to gmp, and the corresponding configure options have been removed. #32549, #32727

psutil package removed

The psutil (memory management) python package has been removed. The version within sage was heavily patched and no longer feasible to maintain, and the upstream version is incompatible with one of our supported platforms. #32656

Modularization and packaging changes

Sage 9.5 contains many changes that were made as part of the modularization project described in #29705.

New distribution package: sage-setup

The build system of the Sage library, sage_setup, is now provided by a separate distribution package sage-setup. The source tree is the subdirectory pkgs/sage-setup/ of the Sage git repository. #29847

Pynac merged into the Sage library

The core of the symbolic expressions subsystem of Sage, an adaptation of the GiNaC library to Python known as Pynac, has been merged into the Sage library source code as src/sage/symbolic/ginac/; all future development of Pynac is intended to happen here. #32386, #32387

  • This removes an obstacle to Python packaging: Pynac was a shared library with a dependency on the Python C API but not an extension module, and it could not be installed using standard Python tools. Now the shared library is gone; all of Pynac (about 60kLOC of C++ code spread over 100 *.h and *.cpp files) is put in a single extension module sage.symbolic.expression. All other extension modules that used to link to libpynac (sage.libs.pynac.pynac, sage.symbolic.function, sage.symbolic.series etc.) have either been merged into sage.symbolic.expression, or the dependency has been resolved through refactoring. The integration of Pynac into the Sage source tree will also make it easier for Sage developers to make changes to symbolics.

Doctest annotation "# optional - FEATURE" for portions of the Sage library

In the Sage doctesting framework, a line of tests can be conditionalized on the presence of a feature, such as an installed optional package, using a comment of the form # optional - FEATURE.

In Sage 9.5, doctests can also be conditionalized on the presence of certain parts of the Sage library. #32614

For example, doctests that depend on the Symbolic Ring can be marked # optional - sage.symbolic, and doctests that need number fields can be marked # optional - sage.rings.number_field.

Also various runtime tests for external programs have been rewritten as Features. #27744, #32174, #32649, #32650, #32866, #32926

Module-level annotation "# sage.doctest: optional - FEATURE"

Moreover, Sage 9.5 extends this mechanism by allowing developers to mark all doctests in a Python file as conditional on a feature. #30778

These module-level directives go to the top of the source file and take the form

# sage.doctest: optional - FEATURE

Abstract base classes for "isinstance" testing

The new module sage.rings.abc defines a number of abstract base classes that can be used for isinstance testing with parent classes instead of importing is_... functions from various implementation modules. #32566, #32600, #32606, #32610, #32612, #32660, #32665, #32719, #32742, #32750

In a similar way, sage.geometry.abc defines abstract base classes Polyhedron, ConvexRationalPolyhedralCone, etc. #32637

Likewise, sage.structure.element now defines an abstract base class Expression that can be used for isinstance testing, instead of importing is_Expression or the implementation class Expression from sage.symbolic.expression. #32638, #32730

See also Meta-ticket #32414.

Availability of Sage 9.5 and installation help

Sources

The first beta release in the 9.5 development series was tagged on 2021-08-31. The first release candidate is 9.5.rc0, tagged 2022-01-09.

SageMath 9.5 supports most platforms that were supported by Sage 9.4 and adds support for building on recent Linux distributions that use glibc ≥ 2.34 (fedora-35, ubuntu-impish, ubuntu-jammy, archlinux-latest, etc.) #32756

Sage 9.5 has dropped support for debian-jessie with the default compiler, GCC 4.9.x. This has allowed us to upgrade the package primecount to the latest version, which has stricter requirements for C++ 11, and to make it a standard package. (Sage 9.5 still supports distributions with compilers from the GCC 4.8.x series, such as ubuntu-trusty.) #25009

Here is a summary of the platforms on which Sage 9.5 is known to build from source. (On platforms marked with the superscript ⁺, installing optional packages is not supported.)

Building Sage 9.5 from source on Apple Silicon (M1) requires the use of Homebrew. Be sure to follow the README and the instructions that the ./configure command issues regarding the installation of system packages from Homebrew.

Since 9.5.rc0, Sage has experimental support for system Python 3.10.x. It continues to support Python 3.7.x, 3.8.x, 3.9.x. #30766

  • See sage-devel for development discussions and sage-release for announcements of beta versions and release candidates.

More details