34523
Comment: platforms
|
38057
link to doc
|
Deletions are marked like this. | Additions are marked like this. |
Line 11: | Line 11: |
According to https://arxiv.org/abs/2008.04247, the Pfaffian of skew-symmetric matrices over commutative torsion-free rings can be computed with a Faddeev–!LeVerrier-like algorithm. This algorithm is now implemented under the weaker assumption of the base ring's fraction field being a `QQ`-algebra ([[https://trac.sagemath.org/ticket/30681|#30681]]). It leads to a significant increase of computational speed in comparison to the definition involving perfect matchings, which has been the only algorithm available in Sage so far. | According to https://arxiv.org/abs/2008.04247, the [[https://doc.sagemath.org/html/en/reference/matrices/sage/matrix/matrix2.html#sage.matrix.matrix2.Matrix.pfaffian|Pfaffian of skew-symmetric matrices]] over commutative torsion-free rings can be computed with a Faddeev–!LeVerrier-like algorithm. This algorithm is now implemented under the weaker assumption of the base ring's fraction field being a `QQ`-algebra ([[https://trac.sagemath.org/ticket/30681|#30681]]). It leads to a significant increase of computational speed in comparison to the definition involving perfect matchings, which has been the only algorithm available in Sage so far. |
Line 55: | Line 55: |
* New Bunch-Kaufman `block_ldlt()` factorization for possibly indefinite matrices: [[https://trac.sagemath.org/ticket/10332|10332]] * New numerically-stable `is_positive_semidefinite()` method for matrices: [[https://trac.sagemath.org/ticket/10332|10332]] |
* New Bunch-Kaufman [[https://doc.sagemath.org/html/en/reference/matrices/sage/matrix/matrix2.html#sage.matrix.matrix2.Matrix.block_ldlt|block_ldlt()]] factorization for possibly indefinite matrices: [[https://trac.sagemath.org/ticket/10332|10332]] * New numerically stable [[https://doc.sagemath.org/html/en/reference/matrices/sage/matrix/matrix2.html#sage.matrix.matrix2.Matrix.is_positive_semidefinite|is_positive_semidefinite()]] method for matrices: [[https://trac.sagemath.org/ticket/10332|10332]] |
Line 360: | Line 360: |
== Package upgrades, system packages, user packages == | == New and upgraded packages, system packages == |
Line 366: | Line 366: |
=== New packages === A number of user packages have been added as optional packages: * [[https://doc.sagemath.org/html/en/reference/spkg/admcycles.html#spkg-admcycles|admcycles]]: Computation in the tautological ring of the moduli space of curves, * [[https://doc.sagemath.org/html/en/reference/spkg/ore_algebra.html#spkg-ore-algebra|ore_algebra]]: Ore algebra, * [[https://doc.sagemath.org/html/en/reference/spkg/sage_flatsurf.html#spkg-sage-flatsurf|sage_flatsurf]]: Computation with flat surfaces, * [[https://doc.sagemath.org/html/en/reference/spkg/slabbe.html#spkg-slabbe|slabbe]]: Sébastien Labbé’s research code, * [[https://doc.sagemath.org/html/en/reference/spkg/snappy.html#spkg-snappy|snappy]]: Topology and geometry of 3-manifolds, with a focus on hyperbolic structures, * [[https://doc.sagemath.org/html/en/reference/spkg/surface_dynamics.html#spkg-surface-dynamics|surface_dynamics]]: Dynamics on surfaces (measured foliations, interval exchange transformation, Teichmüller flow, etc). |
|
Line 372: | Line 382: |
The !SageMath distribution is now [[https://repology.org/repository/sagemath|listed as a repository on repology]]. The [[https://repology.org/projects/?inrepo=sagemath|list of packages]] allows developers to see which packages are in need of updating. | The !SageMath distribution is now [[https://repology.org/repository/sagemath_stable|listed as a repository sagemath_stable on repology]] (tracking the latest stable !SageMath release). In addition, the [[https://repology.org/projects/?inrepo=sagemath_develop|list of packages]] of the [[https://repology.org/repository/sagemath_develop|sagemath_develop repository]] allows developers to see which packages are in need of updating. |
Line 380: | Line 390: |
We have consolidated the information about packages into a single source, [[https://github.com/sagemath/sage/tree/develop/build/pkgs|build/pkgs/]] in the source tree, from which we generate package lists for the reference manual [[https://trac.sagemath.org/ticket/29655|#29655]], to which also the Sage website points. A number of user packages have been added as optional packages: `ore_algebra`, `sage_flatsurf`, `admcycles`, `slabbe`, `snappy`, `surface_dynamics`. Meta-ticket [[https://trac.sagemath.org/ticket/31164|#31164]] tracks the task of adding user packages to `build/pkgs/`. |
We have consolidated the information about packages into a single source, [[https://github.com/sagemath/sage/tree/develop/build/pkgs|build/pkgs/]] in the source tree, from which we generate [[https://doc.sagemath.org/html/en/reference/spkg/index.html|package lists for the reference manual]] [[https://trac.sagemath.org/ticket/29655|#29655]]. Also the Sage website now points to this consolidated package directory. Meta-ticket [[https://trac.sagemath.org/ticket/31164|#31164]] tracks the task of adding user packages to `build/pkgs/`. |
Line 539: | Line 548: |
The Sage Installation Manual now has instructions on how to run the !SageMath Jupyter kernel in a system Jupyter notebook or !JupyterLab [[https://trac.sagemath.org/ticket/30476|#30476]] | The Sage Installation Manual now has [[https://doc.sagemath.org/html/en/installation/launching.html#setting-up-sagemath-as-a-jupyter-kernel-in-an-existing-jupyter-notebook-or-jupyterlab-installation|instructions on how to run the SageMath Jupyter kernel in a system Jupyter notebook or JupyterLab]]. [[https://trac.sagemath.org/ticket/30476|#30476]] |
Line 545: | Line 554: |
=== Alternative installation methods using pip === There are new installation methods using `pip`. {{{ $ python3 -m pip install sage_conf }}} This will download the [[https://pypi.org/project/sage-conf/|distribution package (sdist) sage_conf from PyPI]], which will build the non-Python components of the Sage distribution in a subdirectory of `$HOME/.sage`. After installation of `sage_conf`, a wheelhouse containing wheels of various Python packages is available; type `ls $(sage-config SAGE_SPKG_WHEELS)` to list them and `python3 -m pip install $(sage-config SAGE_SPKG_WHEELS)/*.whl` to install them. After this, you can install the Sage library, using any of these options: * using `python3 -m pip install sagemath-standard`, which downloads the [[https://pypi.org/project/sagemath-standard/|Sage library from PyPI]] * or, after obtaining the Sage sources from git, `(cd src && python3 -m pip install --editable .)` Also pre-built wheels are available for some platforms. See https://pypi.org/project/sage-conf/ for more information. |
|
Line 566: | Line 558: |
Sage 9.3 was tagged on 2021-05-09. [[https://github.com/3-manifolds/Sage_macOS/releases|A binary build of release candidate 9.3.rc2 for macOS as a signed and notarized app is available for testing.]] |
Sage 9.3 was released on 2021-05-09. |
Line 572: | Line 562: |
!SageMath 9.3 supports [[https://wiki.sagemath.org/ReleaseTours/sage-9.2#Availability_of_Sage_9.2_and_installation_help|all platforms that were supported by Sage 9.2]], and a few additional ones. Notably, '''Sage 9.3 adds support for building Sage from source on macOS 11 ("Big Sur").''' Moreover, on macOS, Sage 9.3 no longer refuses to build on systems that have an installation of !MacPorts. [[https://trac.sagemath.org/ticket/31641|#31641]] | The Sage source code is available in the [[https://github.com/sagemath/sage/tree/9.3|sage git repository]], and the self-contained [[http://www.sagemath.org/download-source.html|source tarballs are available]] for download. !SageMath 9.3 supports [[https://wiki.sagemath.org/ReleaseTours/sage-9.2#Availability_of_Sage_9.2_and_installation_help|all platforms that were supported by Sage 9.2]], and a few additional ones. Notably, '''Sage 9.3 adds support for building Sage from source on macOS 11 ("Big Sur") (this requires an installation of homebrew's `gcc@10` package).''' Moreover, on macOS, Sage 9.3 no longer refuses to build on systems that have an installation of !MacPorts. [[https://trac.sagemath.org/ticket/31641|#31641]] |
Line 595: | Line 587: |
* macOS Big Sur (macOS 11.x, with XCode 12.x) | * macOS Big Sur (macOS 11.x, with XCode 12.x) - with `gcc@10` |
Line 601: | Line 593: |
=== Installation FAQ === See [[https://github.com/sagemath/sage/blob/9.3/README.md|README.md]] in the source distribution for installation instructions. See [[https://groups.google.com/forum/#!forum/sage-release|sage-release]], [[https://groups.google.com/forum/#!forum/sage-devel|sage-devel]]. === Availability in distributions and as binaries === The easiest way to install Sage 9.3 is through a distribution that provides it, see [[https://repology.org/project/sagemath/versions|repology.org: sagemath]]. [[https://github.com/3-manifolds/Sage_macOS/releases|A binary build of release candidate 9.3.rc2 for macOS as a signed and notarized app is available for testing.]] [[https://groups.google.com/g/sage-devel/c/l0Kv4InEDiI/m/9JEEJ7KyCwAJ|sage 9.3 now available on Apple silicon through conda]] [[https://www.sagemath.org/download.html|Binaries for Linux platforms]] are available. * If you get the error `/usr/bin/env: 'python': No such file or directory. Error running the script 'relocate-once.py'.`: Make sure that you have python installed in your system. On some recent Linux distributions, there is a `python3` binary but no `python` binary. In this case, edit the first line of `relocate-once.py` to change `python` to `python3`; or install a package that provides the symlink `/usr/bin/python->python3`. * If Sage crashes when plotting or on other numerical operations, the binary distribution is not compatible with your CPU type. This is a known bug in the binary distribution that also affects the Sage 9.4 release; see #32424. Install from source instead. [[https://github.com/sagemath/sage-windows/releases|An installer for Sage 9.3 on Windows]] is available. === Alternative installation methods using pip === There are new installation methods using `pip`. {{{ $ python3 -m pip install sage_conf }}} This will download the [[https://pypi.org/project/sage-conf/|distribution package (sdist) sage_conf from PyPI]], which will build the non-Python components of the Sage distribution in a subdirectory of `$HOME/.sage`. After installation of `sage_conf`, a wheelhouse containing wheels of various Python packages is available; type `ls $(sage-config SAGE_SPKG_WHEELS)` to list them and `python3 -m pip install $(sage-config SAGE_SPKG_WHEELS)/*.whl` to install them. After this, you can install the Sage library, using any of these options: * using `python3 -m pip install sagemath-standard`, which downloads the [[https://pypi.org/project/sagemath-standard/|Sage library from PyPI]] * or, after obtaining the Sage sources from git, `(cd src && python3 -m pip install --editable .)` Also pre-built wheels are available for some platforms. See https://pypi.org/project/sage-conf/ for more information. |
Sage 9.3 Release Tour
released May 9, 2021
Contents
-
Sage 9.3 Release Tour
- Linear and multilinear algebra
- Polyhedral geometry
- Graph theory
- Algebra
- Knot theory
- Symbolic expressions
- Manifolds
- Numerics
- Graphics
- New and upgraded packages, system packages
- Cleaning of the Sage codebase to conform to best practices
- Modularization and packaging of sagelib
- Configuration changes
- Availability of Sage 9.3 and installation help
- More details
Linear and multilinear algebra
Bär–Faddeev–LeVerrier algorithm for the Pfaffian of skew-symmetric matrices
According to https://arxiv.org/abs/2008.04247, the Pfaffian of skew-symmetric matrices over commutative torsion-free rings can be computed with a Faddeev–LeVerrier-like algorithm. This algorithm is now implemented under the weaker assumption of the base ring's fraction field being a QQ-algebra (#30681). It leads to a significant increase of computational speed in comparison to the definition involving perfect matchings, which has been the only algorithm available in Sage so far.
Using the definition of the Pfaffian:
sage: A = matrix([(0, 0, 1, 0, -1, -2, -1, 0, 2, 1), (0, 0, 1, -3/2, 0, -1, 1/2, 3, 3/2, -1/2), (-1, -1, 0, 2, 0, 5/2, 1, 0, -2, 1), (0, 3/2, -2, 0, 5/2, -1, 2, 0, -1, -3/2), (1, 0, 0, -5/2, 0, 0, -1, 1/2, 1, -1), (2, 1, -5/2, 1, 0, 0, 2, 1, 2, 1), (1, -1/2, -1, -2, 1, -2, 0, 0, -3, -1), (0, -3, 0, 0, -1/2, -1, 0, 0, 1/2, 1/2), (-2, -3/2, 2, 1, -1, -2, 3, -1/2, 0, 1), (-1, 1/2, -1, 3/2, 1, -1, 1, -1/2, -1, 0)]) sage: %%time ....: A.pfaffian(algorithm='definition') CPU times: user 18.7 ms, sys: 0 ns, total: 18.7 ms Wall time: 18.6 ms 817/16
With Bär–Faddeev–LeVerrier:
sage: A = matrix([(0, 0, 1, 0, -1, -2, -1, 0, 2, 1), (0, 0, 1, -3/2, 0, -1, 1/2, 3, 3/2, -1/2), (-1, -1, 0, 2, 0, 5/2, 1, 0, -2, 1), (0, 3/2, -2, 0, 5/2, -1, 2, 0, -1, -3/2), (1, 0, 0, -5/2, 0, 0, -1, 1/2, 1, -1), (2, 1, -5/2, 1, 0, 0, 2, 1, 2, 1), (1, -1/2, -1, -2, 1, -2, 0, 0, -3, -1), (0, -3, 0, 0, -1/2, -1, 0, 0, 1/2, 1/2), (-2, -3/2, 2, 1, -1, -2, 3, -1/2, 0, 1), (-1, 1/2, -1, 3/2, 1, -1, 1, -1/2, -1, 0)]) sage: %%time ....: A.pfaffian(algorithm='bfl') CPU times: user 554 µs, sys: 41 µs, total: 595 µs Wall time: 599 µs 817/16
Other improvements
Speedup access items in gf2e dense matrices: 29853
Speedup conjugation of double dense matrices: 31283
New Bunch-Kaufman block_ldlt() factorization for possibly indefinite matrices: 10332
New numerically stable is_positive_semidefinite() method for matrices: 10332
Polyhedral geometry
New features
The Schlegel diagrams are now repaired (they previously broke convexity). Now, one specifies which facet to use to do the projection 30015:
1 sage: fcube = polytopes.hypercube(4)
2 sage: tfcube = fcube.face_truncation(fcube.faces(0)[0])
3 sage: tfcube.facets()[-1]
4 A 3-dimensional face of a Polyhedron in QQ^4 defined as the convex hull of 8 vertices
5 sage: sp = tfcube.schlegel_projection(tfcube.facets()[-1])
6 sage: sp.plot() # The proper Schlegel diagram is shown
A different values of position changes the projection:
New features:
30704: Upgrade to Normaliz 3.8.9 and PyNormaliz 2.13
30946: Add "minimal=True" option to affine_hull_projection
30954: Implement a proper equality check for polyhedron representation objects
Implementation improvements
The zonotope construction got improved:
Before:
sage: from itertools import combinations sage: cu = polytopes.cube() sage: sgmt = [p.vector()-q.vector() for p,q in combinations(cu.vertices(),2)] sage: sgmt2 = set(tuple(x) for x in sgmt) sage: # %time polytopes.zonotope(sgmt) # killed due to memory overflow sage: %time polytopes.zonotope(sgmt2) CPU times: user 2.06 s, sys: 23.9 ms, total: 2.09 s Wall time: 2.09 s A 3-dimensional polyhedron in ZZ^3 defined as the convex hull of 96 vertices
With 31038:
sage: from itertools import combinations sage: cu = polytopes.cube() sage: sgmt = [p.vector()-q.vector() for p,q in combinations(cu.vertices(),2)] sage: sgmt2 = set(tuple(x) for x in sgmt) sage: %time polytopes.zonotope(sgmt) CPU times: user 138 ms, sys: 0 ns, total: 138 ms Wall time: 138 ms A 3-dimensional polyhedron in ZZ^3 defined as the convex hull of 96 vertices sage: %time polytopes.zonotope(sgmt2) CPU times: user 58 ms, sys: 0 ns, total: 58 ms Wall time: 57.6 ms A 3-dimensional polyhedron in ZZ^3 defined as the convex hull of 96 vertices
Improvements:
30040: Improve face iterator for simple/simplicial polytopes
There are also some bug fixes and other improvements. For more details see the release notes for optimization and polyhedral geometry software interactions in Sage.
Graph theory
Major improvements in the backends:
30777: Deleting edges
30665: Edge iterator and copy
30776: Subgraph and equality check
30753: Obtaining subgraphs.
31129: Depth first search
31197: Use binary matrix data structure for bitsets.
Algebra
Power Series Ring
The method set_default_prec is now deprecated since it led to unwanted behavior (see #18416 for details). If another default precision is needed, a new power series ring must be created:
sage: R.<x> = PowerSeriesRing(QQ, default_prec=10) sage: sin(x) x - 1/6*x^3 + 1/120*x^5 - 1/5040*x^7 + 1/362880*x^9 + O(x^10) sage: R.<x> = PowerSeriesRing(QQ, default_prec=15) sage: sin(x) x - 1/6*x^3 + 1/120*x^5 - 1/5040*x^7 + 1/362880*x^9 - 1/39916800*x^11 + 1/6227020800*x^13 + O(x^15)
This change does not affect the behavior of its ring elements. Code that relies on this method needs to be updated.
Inversion of power series ring elements now provides the correct parent: #8972
Other additions, improvements, and key bug-fixes
Implement the symplectic derivation Lie algebra following https://arxiv.org/abs/2006.06064:
sage: lie_algebras.SymplecticDerivation(QQ, 4) Symplectic derivation Lie algebra of rank 4 over Rational Field
Implement the *-insertion algorithm from https://arxiv.org/abs/1911.08732:
sage: from sage.combinat.rsk import RuleStar sage: p,q = RuleStar().forward_rule([1,1,2,2,4,4], [1,3,2,4,2,4]) sage: ascii_art(p, q) 1 2 4 1 1 2 1 4 2 4 3 4 sage: line1,line2 = RuleStar().backward_rule(p, q) sage: line1,line2 ([1, 1, 2, 2, 4, 4], [1, 3, 2, 4, 2, 4])
Speedup iteration of partitions with parts in a specific set: 31319
Speedup iteration of points in affine and projective space over a finite field: 25743
We can compute the generators for the homology of a cell complex: 30838
Actions can now be pickled: 29031
Fixed bug in tensoring signed with unsigned modules: 31266
Fix the valuation of Puiseux series: 30679
Knot theory
Fixed some wrong answers for the unknot: 31001
Symbolic expressions
The predefined constant I in interactive sessions is now an element of the (embedded) number field ℚ[i] rather than a symbolic expression:
sage: I.parent() Number Field in I with defining polynomial x^2 + 1 with I = 1*I
This allows it to be used in combination with other Sage objects without the coercion mechanism forcing the result to belong to the symbolic ring. For example, one now has
sage: (1.0 + I).parent() Complex Field with 53 bits of precision
Expressions such as
sage: I + pi pi + I
still yield symbolic results. The symbolic imaginary unit I remains available as SR(I) or SR.I(), or, for library code, as sage.symbolic.constants.I. Importing it from sage.symbolic is deprecated. (#18036)
Manifolds
Spheres added to the manifold catalog
Spheres of arbitrary dimension have been added to the manifold catalog, so that they can be initialized via manifolds.Sphere(n) (#30804). For instance:
sage: S3 = manifolds.Sphere(3) sage: S3 3-sphere S^3 of radius 1 smoothly embedded in the 4-dimensional Euclidean space E^4
By default, a single chart is initialized: that of spherical coordinates:
sage: S3.atlas() [Chart (A, (chi, theta, phi))] sage: S3.default_chart() is S3.spherical_coordinates() True
Note that A stands for the domain of spherical coordinates, which is a strict subset of S3:
sage: S3.spherical_coordinates().domain() Open subset A of the 3-sphere S^3 of radius 1 smoothly embedded in the 4-dimensional Euclidean space E^4
The sphere S3 is considered as an embedded submanifold of the Euclidean space E4:
sage: S3.embedding().display() iota: S^3 --> E^4 on A: (chi, theta, phi) |--> (x1, x2, x3, x4) = (cos(phi)*sin(chi)*sin(theta), sin(chi)*sin(phi)*sin(theta), cos(theta)*sin(chi), cos(chi))
S3 is a Riemannian manifold, with the metric induced by the Euclidean metric on E4:
sage: g = S3.induced_metric() sage: g.display() gamma = dchi*dchi + sin(chi)^2 dtheta*dtheta + sin(chi)^2*sin(theta)^2 dphi*dphi
Beside spherical coordinates, stereographic coordinates are available too. Those from the North pole (NP) are obtained by
sage: S3.stereographic_coordinates() Chart (S^3-{NP}, (y1, y2, y3))
The above call has augmented the manifold atlas with various charts and subcharts, corresponding to stereographic coordinates from the North pole and from the South pole:
sage: S3.atlas() [Chart (A, (chi, theta, phi)), Chart (S^3-{NP}, (y1, y2, y3)), Chart (S^3-{SP}, (yp1, yp2, yp3)), Chart (S^3-{NP,SP}, (y1, y2, y3)), Chart (S^3-{NP,SP}, (yp1, yp2, yp3)), Chart (A, (y1, y2, y3)), Chart (A, (yp1, yp2, yp3))]
All relevant change-of-coordinate formulas have been initialized. For instance, those relating spherical coordinates to stereographic ones are obtained as follows:
sage: spher = S3.spherical_coordinates() sage: stereo = S3.stereographic_coordinates() sage: A = spher.domain() sage: stereoA = stereo.restrict(A) sage: S3.coord_changes()[(spher, stereoA)].display() y1 = -cos(phi)*sin(chi)*sin(theta)/(cos(chi) - 1) y2 = -sin(chi)*sin(phi)*sin(theta)/(cos(chi) - 1) y3 = -cos(theta)*sin(chi)/(cos(chi) - 1)
The change-of-coordinate formulas are automatically invoked to compute the coordinates of a point from previously known ones in a different chart. For instance:
sage: p = S3((pi/2, pi/3, pi/4), chart=spher) sage: p Point on the 3-sphere S^3 of radius 1 smoothly embedded in the 4-dimensional Euclidean space E^4 sage: spher(p) (1/2*pi, 1/3*pi, 1/4*pi) sage: stereo(p) (1/4*sqrt(3)*sqrt(2), 1/4*sqrt(3)*sqrt(2), 1/2)
Use of ambient metric by default for the Hodge dual of a differential form
When asking for the Hodge dual of a differential form on a pseudo-Riemannian manifold without specifying the metric, the manifold's default metric is assumed (#31322). For example:
sage: E.<x,y,z> = EuclideanSpace() sage: E.cartesian_coordinates().coframe() Coordinate coframe (E^3, (dx,dy,dz)) sage: dx = E.cartesian_coordinates().coframe()[1] sage: dx 1-form dx on the Euclidean space E^3 sage: dx.hodge_dual() 2-form *dx on the Euclidean space E^3 sage: dx.hodge_dual().display() *dx = dy/\dz
Internal code improvements and bug fixes
Various improvements/refactoring of the code have been performed in this release:
* topological part: #30310, #31243
* differentiable part: #30284, #31215, #31255, #31273, #31323.
In addition, various bugs and typos have been fixed: #30174, #30830, #31202.
Numerics
Automatic conversions from from floating-point numbers and symbolic expressions to real and complex intervals are deprecated and will be removed in the future. Code that relies on the existence of coercions
from RealField to RealIntervalField,
from SymbolicRing to ComplexIntervalField, or
from Python floats to ComplexIntervalField,
like
sage: RIF(1/3) + RR(1)
or
sage: 1.1*pi*CIF(i)
needs to be updated. (Other similar conversions, e.g. from RealField to RealBallField or from float to RealField, already need to be performed explicitly.) Beside leading to more consistent behavior, the removal of these coercions will make it easier to use interval arithmetic reliably. (#15114)
Graphics
Three.js viewer
The thickness option for lines is now supported on more platforms, including Windows. It can now also be specified for surfaces in conjunction with mesh=True to control the thickness of the wireframe lines: 26410
A dark theme has been implemented for the viewer. Use theme='dark' for the new theme or theme='light' for the default. If you would prefer the dark theme to be the default, edit your Sage start-up script, adding the following: 30462
1 sage.plot.plot3d.base.SHOW_DEFAULTS['theme'] = 'dark'
You may now set the title of the HTML pages generated by the viewer, which can be helpful when having several such tabs open at once: 30612
1 show(dodecahedron(), page_title="My Favorite Polyhedron")
The font and opacity of the axis labels can now be customized similar to what was added in 9.2 for text3d. Pass either a single dictionary of options for all three axes or a list of three dictionaries, one per axis: 30628
Fixed clipping issues for plots that are very small or very large. 30613
New and upgraded packages, system packages
Python
SageMath 9.3 continues to support system Python versions 3.6.x, 3.7.x, 3.8.x, and 3.9.x; support for Python 3.6.x is deprecated and will be removed in the SageMath 9.4 development cycle. If no suitable system Python is found, Sage installs its own copy of Python 3 from source. The version of Python shipped with the Sage distribution has been upgraded from 3.8.5 to 3.9.2. #30589, #31318, #31419
New packages
A number of user packages have been added as optional packages:
admcycles: Computation in the tautological ring of the moduli space of curves,
ore_algebra: Ore algebra,
sage_flatsurf: Computation with flat surfaces,
slabbe: Sébastien Labbé’s research code,
snappy: Topology and geometry of 3-manifolds, with a focus on hyperbolic structures,
surface_dynamics: Dynamics on surfaces (measured foliations, interval exchange transformation, Teichmüller flow, etc).
Other package upgrades
Upgrade tickets, milestone 9.3
SageMath on repology.org
The SageMath distribution is now listed as a repository sagemath_stable on repology (tracking the latest stable SageMath release). In addition, the list of packages of the sagemath_develop repository allows developers to see which packages are in need of updating.
System package information for OpenSUSE
In particular, users of OpenSUSE Tumbleweed will notice the information about system packages that the Sage distribution can use.
Chapter on packages in the Sage reference manual
We have consolidated the information about packages into a single source, build/pkgs/ in the source tree, from which we generate package lists for the reference manual #29655. Also the Sage website now points to this consolidated package directory. Meta-ticket #31164 tracks the task of adding user packages to build/pkgs/.
For developers and packagers: Version constraints for Python packages
For all Python packages in the Sage distribution, build/pkgs/SPKG/install-requires.txt now encodes version constraints (such as lower and upper bounds) #30719. The constraints are in the format of the install_requires key of setup.cfg or setup.py.
The files may include comments (starting with #) that explain why a particular lower bound is warranted or why we wish to include or reject certain versions. For example:
$ cat build/pkgs/sphinx/package-version.txt 3.1.2.p0 $ cat build/pkgs/sphinx/install-requires.txt # gentoo uses 3.2.1 sphinx >=3, <3.3
The comments may include links to Trac tickets, as in the following example:
$ cat build/pkgs/packaging/install-requires.txt packaging >=18.0 # Trac #30975: packaging 20.5 is known to work but we have to silence "DeprecationWarning: Creating a LegacyVersion"
The currently encoded version constraints are merely a starting point. Downstream packagers and developers are invited to refine the version constraints based on their experience and tests. When a package update is made in order to pick up a critical bug fix from a newer version, then the lower bound should be adjusted.
In Sage 9.3, the new files are included only for documentation purposes and to facilitate development and packaging. An effort is underway in #30913 to use the new files to generate dependency metadata for the Sage library. There is no mechanism yet to use system Python packages; see Meta-ticket #29013 for this task.
For developers: Setting up Python packages from PyPI as Sage packages
Setting up Python packages from PyPI as Sage packages has become easier #30974.
$ ./sage -package create scikit_spatial --pypi Downloading tarball to /Users/mkoeppe/s/sage/sage-rebasing/worktree-algebraic-2018-spring/upstream/scikit-spatial-5.0.0.tar.gz [......................................................................] $ ls build/pkgs/scikit_spatial/ SPKG.rst dependencies package-version.txt type checksums.ini install-requires.txt spkg-install.in $ cat build/pkgs/scikit_spatial/SPKG.rst scikit_spatial: Spatial objects and computations based on NumPy arrays ====================================================================== Description ----------- Spatial objects and computations based on NumPy arrays. License ------- BSD license Upstream Contact ---------------- https://pypi.org/project/scikit-spatial/
Note that this new command does not check the dependencies of the Python package; this still needs to be done manually.
The above command creates a "normal" package (with tarball information in checksums.ini). To create a package as a "pip" package (which will be obtained directly from PyPI on an install), use ./sage -package create scikit_spatial --pypi --source pip instead.
Cleaning of the Sage codebase to conform to best practices
Major progress has been made since SageMath 9.0 in a long term effort to clean up the Sage codebase so it conforms to best practices. Since SageMath 9.2, various coding style checkers have been available via ./sage -tox.
The command ./sage -tox -e pycodestyle-minimal uses pycodestyle (formerly known as pep8) in a minimal configuration. By passing --count -qq we can reduce the output to only show the number of style violation warnings.
$ ./sage -tox -e pycodestyle-minimal -- --count -qq worktree-9.0/src/sage pycodestyle-minimal installed: pycodestyle==2.7.0 pycodestyle-minimal run-test-pre: PYTHONHASHSEED='1305087318' pycodestyle-minimal run-test: commands[0] | pycodestyle --select E401,E701,E702,W605 --count -qq ../worktree-9.0/src/sage 787 $ ./sage -tox -e pycodestyle-minimal -- --count -qq worktree-9.1/src/sage 753 $ ./sage -tox -e pycodestyle-minimal -- --count -qq worktree-9.2/src/sage 547 $ ./sage -tox -e pycodestyle-minimal -- --count -qq worktree-9.3/src/sage 321
The command ./sage -tox -e pycodestyle runs a more thorough check.
$ ./sage -tox -e pycodestyle -- --count -qq worktree-9.0/src/sage pycodestyle recreate: /Users/mkoeppe/s/sage/sage-rebasing/src/.tox/pycodestyle pycodestyle installdeps: pycodestyle pycodestyle installed: pycodestyle==2.7.0 pycodestyle run-test-pre: PYTHONHASHSEED='906952231' pycodestyle run-test: commands[0] | pycodestyle --count -qq ../worktree-9.0/src/sage 184373 $ ./sage -tox -e pycodestyle -- --count -qq worktree-9.1/src/sage 184731 $ rm -f worktree-9.2/src/tox.ini $ ./sage -tox -e pycodestyle -- --count -qq worktree-9.2/src/sage 186792 $ ./sage -tox -e pycodestyle -- --count -qq worktree-9.3/src/sage 565 E111 indentation is not a multiple of four 202 E114 indentation is not a multiple of four (comment) 70 E115 expected an indented block (comment) 184 E116 unexpected indentation (comment) ... 101486
Finally, there is ./sage -tox -e codespell, which uses codespell to find misspelled words.
$ ./sage -tox -e codespell -- --count worktree-9.0/src/sage 2254 $ ./sage -tox -e codespell -- --count worktree-9.1/src/sage 2343 $ ./sage -tox -e codespell -- --count worktree-9.2/src/sage 2648 $ ./sage -tox -e codespell -- --count worktree-9.3/src/sage ../worktree-9.3/src/sage/env.py:270: multible ==> multiple ../worktree-9.3/src/sage/misc/superseded.py:296: supress ==> suppress ../worktree-9.3/src/sage/misc/misc.py:556: occurance ==> occurrence ../worktree-9.3/src/sage/misc/dev_tools.py:285: instanciation ==> instantiation ... 2275
Modularization and packaging of sagelib
A source tarball of the Sage distribution (or a worktree of the Sage git repository after running the ./bootstrap script) contains several self-contained source trees of Python distribution packages in build/pkgs/*/src/, which can be packaged, built and installed by standard Python procedures:
setup.py sdist builds a source distribution (it is invoked by the convenience script build/pkgs/*/spkg-src), which can afterwards be installed using pip.
setup.py install installs the package directly (this is legacy use of setuptools and is not recommended).
setup.py bdist_wheel builds a wheel, which can afterwards be installed using pip.
Note, however, that pip install . does not work. In order to keep the monolithic structure of the SAGE_ROOT/src tree unchanged (for the convenience of Sage developers), the source trees of the Python distribution packages make use of symlinks. These symlinks are not compatible with pip install .. However, setup.py sdist follows the symlinks - the resulting source distribution contains ordinary files only and is therefore pip-installable.
The following Python distribution packages exist in Sage 9.3:
The Sage library is built from build/pkgs/sagelib/src. Since 9.3.beta8, the resulting source distribution sagemath-standard is available on PyPI.
The directory build/pkgs/sage_docbuild/src contains a distribution that provides the Python package sage_docbuild, moved from sage_setup.docbuild in #30476. Since 9.3.beta9, the resulting source distribution sage-docbuild is available on PyPI.
The directory build/pkgs/sage_sws2rst/src contains the source of https://pypi.org/project/sage-sws2rst/
The directory build/pkgs/sage_conf/src (after running the top-level configure script) contains the source of the Sage configuration package, which provides:
a single Python module, sage_conf, providing configuration information to the SageMath library at the time of its installation and at its runtime
a console script sage-config, for querying the variables of sage_conf from the shell
the sourcable shell script sage-env-config, providing additional configuration information in the form of environment variables.
In the course of the modularization effort of Meta-ticket #29705, in the Sage 9.4 series we expect to add many more distribution packages in the same format.
Splitting out sage_setup (the build system of the Sage library) as a separate distribution package (currently it is shipped as part of sagemath-standard).
Providing alternative implementations of sage_conf for different use cases.
Splitting sagemath-standard into many namespace packages.
Configuration changes
Editable ("in-place", "develop") installs of the Sage library
Use ./configure --enable-editable to configure the Sage distribution to install the Sage library in "develop" ("editable", "in-place") mode instead of using the Sage library's custom incremental build system. #31377
It has the benefit that to try out changes to Python files, one does not need to run ./sage -b any more; restarting Sage is enough. It may also have benefits in certain develop environments that get confused by sagelib's custom build system.
Note that in an editable install, the source directory will be cluttered with build artifacts (but they are .gitignored). This is normal.
Use of system Jupyter notebook / JupyterLab
The Sage Installation Manual now has instructions on how to run the SageMath Jupyter kernel in a system Jupyter notebook or JupyterLab. #30476
If you intend to (a) only use Sage in a terminal, or (b) only use the SageMath kernel with your system Jupyter notebook or JupyterLab, you can now build Sage without the notebook components, by using ./configure --disable-notebook. #30383 #31278
Availability of Sage 9.3 and installation help
Sage 9.3 was released on 2021-05-09.
Sources
The Sage source code is available in the sage git repository, and the self-contained source tarballs are available for download.
SageMath 9.3 supports all platforms that were supported by Sage 9.2, and a few additional ones. Notably, Sage 9.3 adds support for building Sage from source on macOS 11 ("Big Sur") (this requires an installation of homebrew's gcc@10 package). Moreover, on macOS, Sage 9.3 no longer refuses to build on systems that have an installation of MacPorts. #31641
Sage 9.3 has been tested to compile from source on a wide variety of platforms, including:
Linux 64-bit (x86_64)
- ubuntu-{trusty,xenial,bionic,focal,groovy,hirsute},
- debian-{jessie,stretch,buster,bullseye,sid},
- linuxmint-{17,18,19,19.3,20.1},
- fedora-{26,27,28,29,30,31,32,33,34},
- centos-{7,8},
- gentoo,
- archlinux,
- slackware-14.2,
conda-forge (use configure --with-python=python3)
Linux 32-bit (i386)
- debian-buster
- ubuntu-bionic
- centos-7
- manylinux-2_24
macOS
- macOS Catalina and older (macOS 10.x, with Xcode 11.x or Xcode 12.x)
macOS Big Sur (macOS 11.x, with XCode 12.x) - with gcc@10
- optionally, using Homebrew
- optionally, using conda-forge
Windows (Cygwin-64).
Installation FAQ
See README.md in the source distribution for installation instructions.
See sage-release, sage-devel.
Availability in distributions and as binaries
The easiest way to install Sage 9.3 is through a distribution that provides it, see repology.org: sagemath.
sage 9.3 now available on Apple silicon through conda
Binaries for Linux platforms are available.
If you get the error /usr/bin/env: 'python': No such file or directory. Error running the script 'relocate-once.py'.: Make sure that you have python installed in your system. On some recent Linux distributions, there is a python3 binary but no python binary. In this case, edit the first line of relocate-once.py to change python to python3; or install a package that provides the symlink /usr/bin/python->python3.
- If Sage crashes when plotting or on other numerical operations, the binary distribution is not compatible with your CPU type. This is a known bug in the binary distribution that also affects the Sage 9.4 release; see #32424. Install from source instead.
An installer for Sage 9.3 on Windows is available.
Alternative installation methods using pip
There are new installation methods using pip.
$ python3 -m pip install sage_conf
This will download the distribution package (sdist) sage_conf from PyPI, which will build the non-Python components of the Sage distribution in a subdirectory of $HOME/.sage.
After installation of sage_conf, a wheelhouse containing wheels of various Python packages is available; type ls $(sage-config SAGE_SPKG_WHEELS) to list them and python3 -m pip install $(sage-config SAGE_SPKG_WHEELS)/*.whl to install them.
After this, you can install the Sage library, using any of these options:
using python3 -m pip install sagemath-standard, which downloads the Sage library from PyPI
or, after obtaining the Sage sources from git, (cd src && python3 -m pip install --editable .)
Also pre-built wheels are available for some platforms. See https://pypi.org/project/sage-conf/ for more information.