Skip to content

Sage 10.5 Release Tour

Travis Scrimshaw edited this page Dec 19, 2024 · 35 revisions

Sage 10.5 was released on December 4, 2024. This is the current stable release.

Here is an overview of some of the main changes in this version.

Matroids

The validity check method, is_valid, now accepts the boolean argument certificate. When certificate is set to True, the method is_valid returns a tuple of a boolean and a dictionary. The dictionary provides some more information in case the matroid is not valid. #38711

sage: C = [[1, 2, 3], [3, 4, 5]]
sage: M = Matroid(circuits=C)
sage: M.is_valid(certificate=True)
(False,
 {'circuit 1': frozenset({3, 4, 5}),
  'circuit 2': frozenset({1, 2, 3}),
  'element': 3,
  'error': 'elimination axiom failed'})

There is a direct implementation of Chow rings of matroids in Sage and some variations (all with the maximal building set) #38281:

  • the "classical" Feitchner-Yuzvinsky presentation;
  • the atom-free presentation; and
  • the Feitchner-Yuzvinsky for the augmented Chow ring.

Combinatorial species

The new ring PolynomialSpecies supports computations with polynomial combinatorial species. Unlike previous implementations, as in Maple, MuPad, Axiom, and Sage itself, it regards a species as a formal sum of group actions of symmetric groups. The species must be polynomial, that is, only finitely many symmetric groups may occur. This restriction will be removed with #38544

The ring allows computations with virtual weighted multisort species. All the major operations, such as sum, product, composition and Hadamard product are provided. One can define a species by providing the underlying permutation group or by specifying a group action of (a Young subgroup of) the symmetric group. In particular, it is now possible to compute the atomic expansion of any given species.

For example:

sage: P.<X> = PolynomialSpecies(R)
sage: E = sum(P(SymmetricGroup(n)) for n in range(5))
sage: E1 = sum(P(SymmetricGroup(n)) for n in range(1,5))
sage: E(q*E1).truncate(5)
1 + q*X + (q^2+q)*E_2 + (q^3+q)*E_3 + q^2*X*E_2 + (q^4+q)*E_4 + q^2*X*E_3 + q^2*P_4 + q^3*E_2^2

Graph theory

Several improvements have been made like the initialization of a backend and a significant speed up of method gomory_hu_tree. #38664 #38791

New methods have been added to check whether an input list of vertices (or edges) forms a vertex (or edge) cut of the graph, and to orient a graph according to an input function. #38418 #38435 #38778

sage: G = graphs.PathGraph(10)
sage: D = G.orient(lambda e:e if (e[0] + e[1]) % 3 == 0 else (e[1], e[0], e[2]))
sage: D.edges(labels=False)
[(1, 0), (1, 2), (3, 2), (4, 3), (4, 5), (6, 5), (7, 6), (7, 8), (9, 8)]

A uniform generator of random proper interval graphs has been added. #38354

sage: G = graphs.RandomProperIntervalGraph(50)
sage: G.is_interval()
True
sage: G.clique_number()
11
sage: G.treewidth()
10

Graph tikz visualization

Graphs and digraphs now have a tikz() method. It returns an instance of the TikzPicture module, which inherits from the Standalone module within the misc/latex_standalone.py file.

As a consequence, the following now works in Jupyter. By default, it uses the dot2tex format if dot2tex and graphviz are available:

image

It works in the command line as well :

sage: g = graphs.PetersenGraph()
sage: t = g.tikz(); t
\documentclass[tikz]{standalone}
\standaloneconfig{border=4mm}
\begin{document}
\begin{tikzpicture}[>=latex,line join=bevel,]
...
\end{tikzpicture}
\end{document}
sage: t.pdf()                     # opens the pdf in a viewer
'/tmp/tmpw6435r83/tikz_tgs0sr2y.pdf'
sage: t.pdf('filename.pdf')       # save the file
'/path/to/present/working/directory/pwd/filename.pdf'

It works well with sagetex. For example:

\begin{sagesilent}
g = graphs.PetersenGraph()
tikz = g.tikz()
\end{sagesilent}

\begin{center}
    \sageplot[scale=.5][pdf]{tikz}
\end{center}

The addition was made in #38798. Method tikz is planned to be added to other objects soon including posets #38848 and crystals #38759.

Knot theory

Sage can now identify non-prime knots as a connected sum of prime knots from the KnotInfo database. #38254

Lie theory

An implementation of the BGG resolution of a finite dimensional Lie algebra representation has been implemented #37297. This includes a number of additional features, including all simple modules, BGG category dual modules, and additional methods to root systems.

Package upgrades

gcc 13.3.0 #38442

sympy 1.13.2 #36641

suitesparse 7.8.0 #37204

ecm 7.0.6 #38344, #38345

fpylll 0.6.1 #38231

libffi 3.4.6 #38308

tachyon 0.99.5 #36969 #38531

libpng 1.6.37 #38522

sphinx 7.4.7 #38549

cypari2 2.2.0 #38183

pytest, pytest_mock, pytest_xdist are now standard wheel packages. #37301

Optional packages

mathics 7.0.0dev0 #37395

database_knotinfo 2024.10.1 #38822

jmol and jupyter_jmol have been demoted from standard to optional. #38504 #38532

Development tools

Meson build experimental meson build system for the Sage library.

Deprecation Policy for classes updated. #38273

Reviewing Code for PRs affecting user interface added. #38503

The doctest precision tag # abs tol now compares complex numbers. #38433

Doc previews for PRs show TESTS as well as EXAMPLES so that developers may double-check newly added TESTS. However, as before, TESTS are not included in the doc of a release. #38449

image

Modularization

Binary wheels are now built also for musllinux platforms and the aarch64 architecture. #38272

Source distributions of the modularized distribution packages are now also made available on GitHub Releases. #38519

The new files SAGE_ROOT/constraints_pkgs.txt and SAGE_ROOT/pkgs/sagemath-standard/constraints_pkgs.txt assist with building the modularized distribution packages directly from the repository. See the included comments for instructions. 37434

See also https://github.com/sagemath/sage/issues/29705

Deprecations

Global imports:

  • GroupExp_Class, GroupExpElement, GroupSemidirectProductElement #38238

is_... functions:

  • is_Ideal, is_LaurentSeries, is_MPolynomialIdeal, is_MPolynomialRing, is_MPowerSeries, is_PolynomialQuotientRing, is_PolynomialRing, is_PolynomialSequence, is_PowerSeries, is_QuotientRing #38266
  • is_ChowCycle, is_CohomologyClass, is_Divisor, is_ToricDivisor #38277
  • is_Infinite #38278
  • is_SymmetricFunction #38279
  • is_AlphabeticStringMonoidElement, is_BinaryStringMonoidElement, is_HexadecimalStringMonoidElement, is_OctalStringMonoidElement, is_Radix64StringMonoidElement, is_StringMonoidElement #38280
  • is_Ring #38288
  • is_FunctionFieldElement, is_FunctionFieldElement #38289
  • is_LaurentSeriesRing, is_MPowerSeriesRing, is_PowerSeriesRing #38290
  • is_SchemeMorphism, is_SchemeTopologicalPoint #38296

Availability and installation help

The source code is available in the Sage GitHub repository.

Sage builds successfully on the following platforms:

  • Linux 64-bit (x86_64)
  • Linux 64-bit (RISC-V)
    • When meson is used, the Giac program and library become optional dependencies of SageMath, making it possible to install Sage without Giac. All other dependencies (and Sage itself) have been updated/verified to work on RISC-V. Thanks are due to RISC-V International for donating the hardware to make this possible.
  • Linux 32-bit (i386/i686)
    • debian-bullseye
  • macOS (Intel) (x86_64) - with Homebrew or without
    • macOS 12.x (Monterey)
    • macOS 13.x (Ventura)
    • macOS 14.x (Sonoma)
  • macOS (Apple Silicon, M1/M2/M3) - with Homebrew or without
    • Make sure that /usr/local does not contain an old copy of homebrew (or other software) for x86_64 that you may have copied from an old machine. Homebrew for the M1/M2/M3 is installed in /opt/homebrew, not /usr/local.
    • Be sure to follow the README and the instructions that the ./configure command issues regarding the installation of system packages from Homebrew or conda.

You can also build Sage on top of conda-forge on Linux and macOS.

Configuration changes

configure now checks that the build directory is on a normal writable file system. https://github.com/sagemath/sage/pull/38256

Help

See README.md in the source distribution for installation instructions.

Visit sage-support for installation help.

More details

Clone this wiki locally