**Views:**

^{174}

**Image:**ubuntu2204-dev

Sage 10.0 was released on May 20, 2023.

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

You can edit/execute the code directly below. The original release tour is here.

## Documentation

The built HTML documentation of the current development version is now available with a stable URL.

Here are shortcuts to: Reference Manual • Developer Guide • Installation Guide, which are embedded permanently in the wiki home.

The developer guide has been updated with the new workflow on GitHub.

Code blocks in the HTML documentation now have a copy button in the top right corner, thanks to executablebooks/sphinx-copybutton. It is configured so that it strips away prompts, comments, and output from doctests, making it more convenient to try out an example. #35304

## Graphics

### Camera positioning for 3D graphics

Now the camera is positioned such that the line from the camera to the center of the bounding sphere of the 3D graphics objects makes an angle of 60 degrees with x-axis and an angle of 30 degrees with z-axis and the field of view of the camera looking at the center has an angle of 45 degrees. Thus 3D graphics does not get out of the bounding box while you rotate it, anymore! #34822

For an example, try to rotate this

## Linear programming and extensions

CVXPY is an open source Python-embedded modeling language for disciplined convex optimization and extensions. It is under active development and includes well-maintained interfaces to a wide range of solver backends. CVXPY also supports differentiable programming.

It is now available in Sage as the optional package `cvxpy`

. There is a new backend (middle-end?) for the `MixedIntegerLinearProgram`

class, activated using the keyword `solver="CVXPY"`

. #34251

To have CVXPY use a specific solver backend, you can use the following keywords:

`solver="CVXPY/CBC"`

, to use COIN-OR CBC (this requires installation of the additional optional package`cylp`

),`solver="CVXPY/ECOS"`

, to use ECOS,`solver="CVXPY/OSQP"`

, to use OSQP,`solver="CVXPY/SciPy/HiGHS"`

, to use HiGHS,`solver="CVXPY/SCS"`

, to use SCS,similarly, to use any other solver supported by CVXPY; see the CVXPY installation guide.

When `cylp`

is installed, the `MixedIntegerLinearProgram`

backend `"CVXPY/CBC"`

becomes the default, replacing `"GLPK"`

(unless Gurobi or CPLEX are available via the optional packages `sage_numerical_backends_gurobi`

, `sage_numerical_backends_cplex`

, which take precedence). This is a replacement for the similar functionality of the CBC backend provided by the optional package `sage_numerical_backend_coin`

, which is going to be removed soon.

## Combinatorics

### A bijectionist's toolkit

This toolbox allows to list all possible bijections $S: A\to B$ between two finite sets $A$ and $B$ of the same cardinality under various constraints, or all possible 'statistics', i.e., functions $s: A\to Z$ to some other set $Z$ which are equidistributed with a given statistic $\tau: B\to Z$. For example, suppose we are looking for a bijection between Dyck paths and binary trees that sends concatenation of paths to attaching the second binary tree as a right child of the rightmost node of the first binary tree. Then we could proceed as follows:

This package is particularly useful as a partner of FindStat:

### Plane partition symmetry classes

There are a number of symmetries that can be imposed on plane partitions. Sage can now handle various combinations of the most common symmetries. #35037

### Specht modules for diagrams

One construction of irreducble representations for the symmetric group $S_n$ is given by Specht, where for a partition $\lambda$, the irreducible representation $V(\lambda)$ is given in terms of row symmetrizers and column asymmetrizers. This was then generalized for arbitrary diagrams. This provides an implementation of these modules, as well as being able to compute, e.g., their Frobenius character. #35036

## Bug fixes

Skew tableaux are now hashable. #35138

Key polynomials now are a properly implemented graded ring. #35115

## Linear Algebra

Kernels of matrices modulo composite integers can now be computed using

`.left_kernel_matrix()`

and`.right_kernel_matrix()`

. #34862

## Algebra

### New algebras

$q$-commuting Laurent polynomials are defined analogously to the $q$-commuting polynomials and play an important role is quantum cluster algebras. #35054

The integer valued polynomials are the set of polynomials $p$ such that $p(n) \in \mathbb{Z}$ for all $n \in \mathbb{Z}$. #34988

### Improvements

Lazy series will update their approximate order as appropriate when getting coefficients. #35265

The Weyl character ring (and corresponding fusion ring) know they are commutative with faster multiplication for

`style='coroots'`

. #35186

## Elliptic Curves

Elliptic curves over finite fields now have a

`.twists()`

method to enumerate all twists. #34782Elliptic curves over finite fields now have a

`.torsion_basis()`

method to compute bases of $n$‑torsion subgroups. #34718Isogenies now support a

`.matrix_on_subgroup()`

method. #35164

## Group Theory

`AdditiveAbelianGroupWrapper`

now has a static`from_generators()`

method to construct a group from*not necessarily independent*elements. #35270

## Drinfeld Modules

Drinfeld $\mathbb{F}_q[T]$-modules are now implemented, see the documentation for all the new features. #35026

## Package upgrades

GAP has been upgraded to 4.12.2. #35093

SciPy has been upgraded from 1.9.x to 1.10.1 (Release notes 1.10). #35082

polymake has been upgraded to 4.9 (Release notes 4.8, 4.9). #35085

msolve has been upgraded to 0.4.9. #35159

Normaliz has been upgraded to 3.10.0. #35140

For a list of all packages and their versions, see

## New developer tools, modularization, deprecations

The new command `sage --tox -e cython-lint -- FILES...`

checks Cython source files for common mistakes and style violations. #35385

A linter rule (`sage --tox -e relint -- FILES...`

) now enforces that Sage library code should not use imports from `sage.PAC.KAGE.all`

modules when `sage.PAC.KAGE`

is an implicit namespace package.

A new tool for developers is available that assists with updating imports in the source code: `sage --fiximports`

edits Python sources in a single file, directory, or in the whole source tree, replacing `sage.PAC.KAGE.all`

imports by imports from the specific source module. #34945

Many more packages have been changed from ordinary packages to implicit namespace packages, and the corresponding imports from `.all`

modules have been replaced accordingly. #35110 #35012 #35033 #35090 #35098 #35099 #35105 #35106 #35107 #35119 #35322 #35366 #35372

The functions `is_Algebra`

, `is_CommutativeAlgebra`

, `is_FiniteField`

, as well as `is_Polynomial`

, `is_MPolynomial`

, `is_NumberFieldElement`

have been deprecated; new abstract base classes are available for equivalent `isinstance`

tests. #35076 #35100 #35253 #35240

Several new `Feature`

s have been defined: Some indicate the presence of some standard packages in the Sage distribution, which may be missing in modularized deployments. Others indicate the presence of portions of the Sage library. They can be used for conditionalizing doctests via `# optional`

directives. #35136 #35237 #35266 #35267 #35314

Sage 10.0 continues to support Python versions 3.8–3.11. Developers who need newer features for typing annotations can now use the backport package `typing_extensions`

in the Sage library. #35203

## Availability of Sage 10.0 and installation help

### Sources

The Sage 10.0 source code is available in the Sage GitHub repository.

Sage builds successfully on the following platforms:

**Linux 64-bit**(x86_64)**Linux 32-bit**(i386/i686)ubuntu-bionic-gcc_8

debian-buster

**macOS (Intel)**(x86_64) - with Homebrew or withoutmacOS 11.x (Big Sur)

macOS 12.x (Monterey)

macOS 13.x (Ventura)

**macOS (Apple Silicon, M1/M2)**- with Homebrew or withoutMake 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 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.

**Sage 10.0 does not support Cygwin; use Windows Subsystem for Linux instead.** Because of unresolved problems with standard packages GIAC (#34269), ECL (#34127), Maxima (#30796), and the rebasing facility (#34223), Sage 10.0 does not support Cygwin. Users on Windows 10 and 11 can migrate to using WSL as described in our installation guide. A convenient way to use such an installation of Sage is via VS Code's WSL remote. #34301, #30484

### Known problems and workarounds

On fedora-38-minimal, archlinux-minimal, opensuse-tumbleweed-minimal, building openblas fails (when not provided by the system). Fixed by #35371.

On GCC 13 platforms (e.g., fedora-38), the optional package 4ti2 fails to build. Fixed by #35570.

### Binaries

The easiest way to install Sage 10.0 on Linux is through a distribution that provides it, see repology.org: sagemath. As of 2023-05-24, packages for Arch Linux, Gentoo, and nixpkgs (unstable) are already available.

### Help

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

Visit sage-support for installation help.