CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
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 packagecylp
),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 between two finite sets and of the same cardinality under various constraints, or all possible 'statistics', i.e., functions to some other set which are equidistributed with a given statistic . 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 is given by Specht, where for a partition , the irreducible representation 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
-commuting Laurent polynomials are defined analogously to the -commuting polynomials and play an important role is quantum cluster algebras. #35054
The integer valued polynomials are the set of polynomials such that for all . #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 ‑torsion subgroups. #34718Isogenies now support a
.matrix_on_subgroup()
method. #35164
Group Theory
AdditiveAbelianGroupWrapper
now has a staticfrom_generators()
method to construct a group from not necessarily independent elements. #35270
Drinfeld Modules
Drinfeld -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 without
macOS 11.x (Big Sur)
macOS 12.x (Monterey)
macOS 13.x (Ventura)
macOS (Apple Silicon, M1/M2) - 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 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.