Skip to content

Releases: sagemath/sage

10.5.beta3

04 Sep 02:38
Compare
Choose a tag to compare
10.5.beta3 Pre-release
Pre-release

What's Changed

Read more

10.4

20 Jul 00:28
Compare
Choose a tag to compare

Release Notes

  • adds support for GCC 14; major package upgrades

Sage 10.4 Release Tour

What's Changed

  • Translate "A Tour of Sage" into Greek by @gmou3 in #37198
  • ntl 11.5.1 by @mkoeppe in #37251
  • sage.groups.generic: Fix incorrect identity testing by @grhkm21 in #37257
  • PDF docbuild: Reduce verbosity by @mkoeppe in #37264
  • Directly convert PermutationGroup element into sized Permutation by @RuchitJagodara in #37288
  • README.md: Move all mentions of release tarballs to the installation guide by @mkoeppe in #37309
  • Reference manual: Show package list by category (math/front-end/other) by @mkoeppe in #37315
  • sage --package create: Attempt to bring SPKG.rst title to a common style by @mkoeppe in #37322
  • Fixed the doc sets/recursively_enumerated_set.py by @janmenjayap in #37331
  • some details in modules (ruff and pep) by @fchapoton in #37335
  • Add simple methods to convert to and from bytes for ZZ and finite fields by @GiacomoPope in #37343
  • implemented function for acyclic orientations by @saatvikraoIITGN in #37345
  • sage.schemes.generic: fix docs by @grhkm21 in #37346
  • sage/stats/distributions: Implement non-spherical Gaussian sampling over lattices by @grhkm21 in #36581
  • Doctest hide option: Better detection of hidden packages by @soehms in #36741
  • Implement Specht modules in the tabloid basis by @tscrim in #36748
  • spkg-configure.m4 for most external Python pkgs by @dimpase in #36777
  • Implementation of the quantum oscillator algebra by @tscrim in #36907
  • CI: Upload test stats as artifacts, improve output of "List Docker images" by @mkoeppe in #36970
  • add helper method to concatenate vectors by @yyyyx4 in #36971
  • allowing external ECM to be called gmp-ecm or ecm by @dimpase in #37011
  • Implement the center of a universal enveloping algebra in the PBW basis by @tscrim in #37013
  • CODE_OF_CONDUCT.md: Do not send people to sage-flame by @mkoeppe in #37054
  • HTML documentation: Show preparsed doctests using inline tabs by @mkoeppe in #37083
  • Quaternion Algebra Fractional Ideal improvements - equivalence and reduced bases by @jtcc2 in #37100
  • Fix random polynomial bias by @grhkm21 in #37118
  • Rerun configure less often by @mkoeppe in #37127
  • Improve Windows installation instructions by @mkoeppe in #37184
  • implement the depth of a quasimodular form by @DavidAyotte in #35517
  • Implement call method for elements in CDGA's by @miguelmarco in #36329
  • Implement basis_of_weight for rings of quasimodular forms by @DavidAyotte in #35029
  • Ensure the degree() method of Polynomial_generic_dense_inexact returns an Integer by @GiacomoPope in #37622
  • Default SAGE_ECMBIN to "ecm". by @tornaria in #37701
  • Workaround for multiprocessing shared memory limits by @tornaria in #37702
  • use Parent for the Pari pseudo-ring by @fchapoton in #37465
  • Add # long time to topology by @gmou3 in #37483
  • Developer Guide: Improve section on patching third-party packages by @mkoeppe in #37485
  • src/doc/en/developer/review.rst: Update section 'Release Process' by @mkoeppe in #37487
  • Fix failing docstring in random testing for quaternion_algebra.py by @GiacomoPope in #37489
  • Include random_element() method to LaurentPolynomialRing by @GiacomoPope in #37490
  • build/pkgs/gnumake_tokenpool: Update to 0.0.7 by @mkoeppe in #37498
  • use sparse polynomials for generating functions by @mantepse in #37499
  • Code of conduct changes by @jhpalmieri in #37501
  • Developer guide: Recommend raw strings for all docstrings by @mkoeppe in #37508
  • Replace broken links to sphinx material on pocoo.org by @mkoeppe in #37509
  • Remove comment about python2 longs by @Eloitor in #37520
  • fix debian.txt for qhull by @dimpase in #37521
  • Add mypy.ini by @mkoeppe in #37522
  • Improve genus method of function fields and curves by @kwankyu in #37538
  • Update the year in README.md by @kwankyu in #37540
  • Edit docstrings attached to free resolutions by @kwankyu in #37542
  • various list-comprehension in combinat (ruff PERF) by @fchapoton in #37545
  • Faster chromatic symmetric function computation by @hdehr in #37549
  • minor details + non-recursive algo in integer_valued_polynomials by @fchapoton in #37551
  • convert Puiseux ring to Parent framework by @fchapoton in #37552
  • A minor change in the documentation of __hash__ function of FreeModuleElement class by @RuchitJagodara in #37553
  • Implemented the (local) Hilbert symbol for global function fields by @S17A05 in #37554
  • use Parent in Symbolic Ring by @fchapoton in #37555
  • refresh sha_tate.py by @fchapoton in #37556
  • Modified quaternion algebra documentation by @S17A05 in #37557
  • enrich the test_karatsuba failure message with explicit elements by @fchapoton in #37561
  • use Parent in infinity by @fchapoton in #37564
  • Improve documentation for degree() method of singular multivariate polynomials by @GiacomoPope in #37567
  • Improve method _ford fulkerson chronicle in src/sage/combinat/posets/posets.py by @dcoudert in #37571
  • Doctester: Abbreviate tracebacks in warnings by @mkoeppe in #37573
  • Intersphinx for cvxopt, cvxpy, cypari2, cysignals, flint, fpylll, gmpy2, ipywidgets, matplotlib, mpmath, networkx, numpy, rpy2, scipy, sympy by @mkoeppe in #37575
  • Update package dependencies for Fedora and Arch distros by @tobiasdiez in #37579
  • Add links to sources in documentation by @kwankyu in #37589
  • Do not canonicalize generators when building a permutation group from a libGAP group by @tscrim in #37590
  • ruff PERF fixes in algebras/ by @fchapoton in #37591
  • Simplify computation of all points for curves over finite fields by @GiacomoPope in #37595
  • fix performance regression in elliptic-curve point constructor by @yyyyx4 in #37596
  • Sphinx extlinks for ecl, gap, giac, maxima, meson, ppl, qepcad, scip, singular, soplex by @mkoeppe in #37598
  • extend the definition of q-binomial coefficients to (k > 0, n < 0) by @fchapoton in #37599
  • some details in lrcalc by @fchapoton in #37600
  • graphs.triangulations(3) cannot return a triangle by @dcoudert in #37602
  • Remove duplicated functions from genus two hyperelliptic curves by @GiacomoPope in #37604
  • Ensure returned degree of multivariate polynomial is type Integer for MPolynomialRing_libsingular class by @GiacomoPope in #37605
  • src/sage/matrix: Doctest cosmetics by @mkoeppe in #37607
  • src/sage/modules: Doctest cosmetics by @mkoeppe in #37608
  • src/sage/schemes: Doctest cosmetics by @mkoeppe in #37609
  • src/sage/combinat: Doctest cosmetics by @mkoeppe in #37610
  • Ensure degree and total degree return Integer type for MPolynomial_polydict class by @GiacomoPope in #37611
  • Fix hyperelliptic curve dynamic class construction to allow proper method inheritance by @GiacomoPope in #37613
  • Updated README....
Read more

10.3

20 Mar 01:40
Compare
Choose a tag to compare

SageMath version 10.3 (released Mar 19, 2024)

Release Notes

  • adds initial support for Python 3.12
  • JupyterLab, Notebook 7, major package upgrades
  • major new developer tools

Sage-10.3-Release-Tour

What's Changed

Read more

10.2

03 Dec 11:54
Compare
Choose a tag to compare

SageMath version 10.2 (released Dec 3, 2023)

Release Notes

  • major package upgrades, Cython 3
  • removes support for Python 3.8 and GCC older than 8.4

Sage-10.2-Release-Tour

What's Changed

Read more

10.1

23 Aug 10:00
Compare
Choose a tag to compare

SageMath version 10.1 (released Aug 20, 2023)

Release Notes

  • major package upgrades; new development tools

Sage-10.1-Release-Tour

What's Changed

Read more

10.0

20 May 23:59
Compare
Choose a tag to compare

SageMath version 10.0 (released May 20, 2023)

Release Notes

  • adds support for GCC 13; major package upgrades
  • new optimization solvers via CVXpy, major new features in combinatorics and algebra

Release Tour 10.0

What's Changed

Read more

9.8

11 Feb 16:23
Compare
Choose a tag to compare
9.8

SageMath version 9.8 (released Feb 11, 2023)

Release Notes

  • first release after our move from Trac to GitHub
  • adds support for Python 3.11, removes support for GCC older than 8
  • major new solvers, major package upgrades
  • 402 tickets/PRs merged

Sage 9.8 Release Tour

What's Changed

Merged in sage-9.8.beta0:

#12696: Lorenz Panny: rename .rational_reconstruct() to .rational_reconstruction() for consistency [Reviewed by Kwankyu Lee]
#17965: Frédéric Chapoton: Uniformize the API to compute the inverse of an element [Reviewed by Travis Scrimshaw]
#20467: Frédéric Chapoton: stackoverflow in Maxima integral [Reviewed by Nils Bruin]
#29619: Matthias Koeppe: Matrix and Components should have a sparse iterator [Reviewed by Eric Gourgoulhon]
#30229: Matthias Koeppe: Submodules of TensorFreeModule defined by the symmetries of a Components object [Reviewed by Eric Gourgoulhon]
#30241: Matthias Koeppe: New implementation class FiniteRankDualFreeModule [Reviewed by Eric Gourgoulhon]
#32297: Linden Disney-Hogg: Abel-Jacobi map on Riemann surfaces [Reviewed by Nils Bruin, Travis Scrimshaw]
#32669: Dennis Jahn: Adding upper and lower Bruhat cones of M. Dyer to sage/combinat/root_system/reflection_group_real.py [Reviewed by Frédéric Chapoton, Travis Scrimshaw]
#32921: Gabriel F. Lipnik: k-recursive sequences with inhomogeneities [Reviewed by Clemens Heuberger]
#33002: Sébastien Labbé: Method tikz of polyhedron class can now return an object of type TikzPicture [Reviewed by Laith Rastanawi]
#33062: Matthias Koeppe: GH Actions (docker): Run a job for "make build-local" first, cache image for job "make build" [Reviewed by Dima Pasechnik]
#33093: John Palmieri: 5 doctests failing related to external program octave [Reviewed by Frédéric Chapoton]
#33431: Matthias Koeppe: Category of submodules of sage.modules.free_module.FreeModule_ambient_pid [Reviewed by Travis Scrimshaw]
#33613: Matthias Koeppe: Add pip packages to conda environments, add missing conda.txt files [Reviewed by Dima Pasechnik]
#33640: Frédéric Chapoton: sage fails to factor some easy expressions [Reviewed by David Lowry-Duda]
#33981: Matthias Koeppe: latte_int: ExponentialSubst.h:62:3: error: ISO C++17 does not allow dynamic exception specifications [Reviewed by John Palmieri]
#34118: Oscar Benjamin, Matthias Koeppe: Update sympy to 1.11.1 [Reviewed by Matthias Koeppe, Antonio Rojas, Eric Gourgoulhon]
#34195: Matthias Koeppe: sage.geometry.polyhedron: More # optional - sage.rings.number_field [Reviewed by Jonathan Kliem]
#34203: Matthias Koeppe: Find and uninstall broken installed SPKGs and wheels [Reviewed by John Palmieri]
#34228: Matthias Koeppe: tox -e docker-...-incremental [Reviewed by Dima Pasechnik]
#34235: Matthias Koeppe: Error in comparing two Symbolic Ring elements [Reviewed by Travis Scrimshaw]
#34242: Julian Rüth: Update docker build [Reviewed by MartinPepin]
#34266: Matthias Koeppe: Drop support for GCC < 8 in Sage 9.8 [Reviewed by Dima Pasechnik]
#34282: Sebastian Oehms, Kwankyu Lee: Make feature TeXFile check latex first [Reviewed by Kwankyu Lee, Sebastian Oehms]
#34287: Frédéric Chapoton: modernize super in crystals and asymptotics [Reviewed by Travis Scrimshaw]
#34290: Frédéric Chapoton: fix some W391 [Reviewed by Travis Scrimshaw]
#34313: David Coudert: pycodestyle cleanup in strongly_regular_db.pyx (part 3) [Reviewed by Kwankyu Lee]
#34320: Frédéric Chapoton: fix E251 in schemes [Reviewed by David Coudert]
#34323: Frédéric Chapoton: fix E251 in groups [Reviewed by David Coudert]
#34342: Frédéric Chapoton: fix various suggestions by lgtm [Reviewed by David Coudert]
#34345: Trevor K. Karn: Method to get cells in horizontal/vertical border strip [Reviewed by Travis Scrimshaw]
#34350: Travis Scrimshaw: speed up powers of lazy Taylor series [Reviewed by Martin Pepin]
#34379: Travis Scrimshaw: Implement a hook to access free (graded) resolutions [Reviewed by Kwankyu Lee]
#34393: Frédéric Chapoton: add method "tensor_factors" to tensor products [Reviewed by Matthias Koeppe, Travis Scrimshaw]
#34412: Travis Scrimshaw: q-commuting polynomials [Reviewed by Frédéric Chapoton]
#34427: Matthias Koeppe: TensorFreeModule.isomorphism_with_fixed_basis [Reviewed by Eric Gourgoulhon]
#34449: Matthias Koeppe: Add package pyproject_metadata [Reviewed by François Bissey]
#34451: Matthias Koeppe: sage.tensor: Canonicalize sym, antisym [Reviewed by Eric Gourgoulhon]
#34453: Travis Scrimshaw: Tensor products of commutative algebras do not know they are commutative rings [Reviewed by Frédéric Chapoton]
#34466: Lorenz Panny: fix various linter errors [Reviewed by Frédéric Chapoton]
#34467: Lorenz Panny: fix random doctest failure in EllipticCurveHom_velusqrt [Reviewed by Kwankyu Lee]
#34474: Eric Gourgoulhon: Make FiniteRankFreeModule.tensor_module(0, 1) return the dual [Reviewed by Matthias Koeppe]
#34478: Matthias Koeppe: pynormaliz: Add distros information for conda, arch [Reviewed by Isuru Fernando]
#34484: Matthias Koeppe: Methods quotient, quotient_module are not the same for some modules from sage.modules [Reviewed by John Palmieri, Travis Scrimshaw]
#34490: Thierry Monteil: sage --package clean command to remove outdated source tarballs [Reviewed by David Coudert]
#34491: Matthias Koeppe: Upgrade igraph to 0.9.10 [Reviewed by David Coudert]
#34494: Frédéric Chapoton: better monomials in shuffle algebras [Reviewed by Travis Scrimshaw]
#34495: Matthias Koeppe: Construction for invariant/equivariant submodules [Reviewed by Travis Scrimshaw]
#34498: Matthias Koeppe: Update igraph, python_igraph to 0.10.x [Reviewed by David Coudert]
#34505: Frédéric Chapoton: using items in indexed_elements.pyx [Reviewed by Travis Scrimshaw]
#34509: Matthias Koeppe: Make IndexedFreeModuleElement compatible with collections.abc, change method support to return a SupportView [Reviewed by Travis Scrimshaw]
#34510: Trevor K. Karn: Add to check for fixed total/length in IntegerVector [Reviewed by Travis Scrimshaw]
#34514: David Roe: Incorrect decomposition type for relative number fields [Reviewed by Travis Scrimshaw]
#34519: Marc Mezzarobba: Fix + extend msolve interface [Reviewed by Matthias Koeppe]
#34527: Trevor K. Karn: Make Compositions into a collections.abc.Sequence [Reviewed by Travis Scrimshaw, Matthias Köppe]
#34535: Trevor K. Karn: Segfault when floor dividing in infinite polynomial ring [Reviewed by Travis Scrimshaw]
#34541: Frédéric Chapoton: enhance free dendriform algebras [Reviewed by Travis Scrimshaw]
#34561: Jan Groenewald: Documentation: There is no package in debian/ubuntu called openssh [Reviewed by Matthias Koeppe]
#34568: Frédéric Chapoton: rename example to QuaternionicProjectivePlane [Reviewed by John Palmieri]

Merged in sage-9.8.beta1:

#21129: Paul Fili, Holly Krieger, Jing Guo: Arakelov-Zhang pairing of rational maps [Reviewed by Alexander Galarraga]
#25046: Lorenz Panny: Add warning for is_prime(n) that produce correct but unexpected output [Reviewed by Kwankyu Lee]
#31664: Matthias Koeppe: Add package msolve 0.4.4 (multivariate polynomial system solver) [Reviewed by Marc Mezzarobba]
#32483: Matthias Koeppe: Remove workarounds for packages that use flit_core or poetry_core as build system [Reviewed by John Palmieri]
#33805: Dima Pasechnik: use Homebrew's primecount [Reviewed by Matthias Koeppe]
#33812: Matthias Koeppe: Refactor distributions sagemath-{objects,categories} through sagemath-{environment,repl} [Reviewed by Kwankyu Lee]
#33850: Sophia Elia: Unstable doctests in equivariant Ehrhart methods [Reviewed by Matthias Koeppe]
#33999: Xavier Caruso: Reduced charpoly for skew polynomials [Reviewed by Travis Scrimshaw, Frédéric Chapoton]
#34110: Matthias Koeppe: numpy 1.23.x [Reviewed by Dima Pasechnik, John Palmieri]
#34212: Jing Guo: log_embedding for number field elements [Reviewed by Alexander Galarraga]
#34272: Matthias Koeppe: Update pip to 22.2.2 [Reviewed by Kwankyu Lee]
#34314: David Coudert: pycodestyle cleanup in strongly_regular_db.pyx (part 4) [Reviewed by Matthias Koeppe]
#34344: Matthias Koeppe: Update setuptools 63.4.3, setuptools_wheel 65.x, tomlkit 0.11.4, importlib_resources 5.9.0, importlib_metadata 4.12.0, distlib 0.3.6, hatchling 1.10.0, pathspec 0.10.1 [Reviewed by John Palmieri]
#34358: David Coudert: pycodestyle cleanup in src/sage/graphs/generic_graph.py (part 4) [Reviewed by Kwankyu Lee]
#34375: Travis Scrimshaw: Replace sage.algebras.yangian.GeneratorIndexingSet with cartesian_product [Reviewed by Matthias Koeppe]
#34383: Martin Rubey: revert for LazyTaylorSeries and LazySymmetricFunction is missing [Reviewed by Travis Scrimshaw]
#34392: David Coudert: pycodestyle cleanup in src/sage/graphs/generic_graph.py (part 5) [Reviewed by Matthias Koeppe]
#34409: Lorenz Panny: remove experimental warning for composite elliptic-curve isogenies [Reviewed by Kwankyu Lee]
#34413: Martin Rubey: implement derivatives of lazy series [Reviewed by Travis Scrimshaw]
#34422: Martin Rubey: implement functorial composition of lazy symmetric functions [Reviewed by Travis Scrimshaw]
#34423: Martin Rubey: implement arithmetic product of lazy symmetric functions [Reviewed by Travis Scrimshaw]
#34432: Samuel Lelièvre: Upgrade: jupyter-packaging 0.12.3 [Reviewed by Matthias Koeppe]
#34435: Trevor K. Karn: Add method to trim trailing zeros from IntegerVector [Reviewed by Travis Scrimshaw]
#34448: Matthias Koeppe: Put tensor modules of FiniteRankFreeModule in Modules().TensorProducts() [Reviewed by Eric Gourgoulhon]
#34454: Matthias Koeppe: sage --package create: Add option --source wheel [Reviewed by Kwankyu Lee]
#34462: Kwankyu Lee: Uniformize the headline: finite rings [Reviewed by Matthias Koeppe]
#34465: John Palmieri: Invalid escape sequence in special.py [Reviewed by Dima Pasechnik]
#34468: Fr...

Read more

9.7

01 Oct 08:14
Compare
Choose a tag to compare
9.7

SageMath version 9.7 (released Sep 19, 2022)

Release Notes

  • removes support for GCC older than 6.3, removes support for Python 3.7
  • new code in algebra, number theory, elliptic curves; major package upgrades; new developer tools
  • 549 tickets (PRs) merged, 92 contributors

Sage 9.7 Release Tour

changelog

9.6

23 Jul 11:35
Compare
Choose a tag to compare
9.6

Release Tour

Sage 9.6 was released on May 15, 2022 (changelog)

  • adds support for GCC 12; major package upgrades
  • major improvements to user interface and graphics; new developer tools
  • 497 tickets (PRs) merged

A total of 83 people were involved as authors or reviewers of code contributions to Sage 9.6.

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

User interface, plotting and graphics

JupyterLab 3.3

JupyterLab, the latest web-based interactive development environment for notebooks, code, and data, is slated to replace the now-classic Jupyter notebook interface. The version of JupyterLab in the Sage distribution has been upgraded to the major new version 3.3. #32069, #33607

After ./sage -i jupyterlab_widgets, you can run it using

./sage -n jupyterlab

Also two new interface variants are provided:

./sage -n nbclassic

and

./sage -n retrolab

LaTeX displays in JupyterLab

Users of Sage in JupyterLab got used to expressions displayed at center in the LaTeX display mode. For compatibility with displays in classic Jupyter, we decided to change the behavior so that now expressions are displayed aligned left by default.

If you belong to the minority preferring centered displays, you can set your preference by

dm = get_display_manager()   
dm.preferences.align_latex = 'center'  # or 'left'

in the ~/.sage/init.sage script.

Interactive graph editing with phitigra

With the new optional package phitigra (use ./sage -i phitigra to install), graphs can be edited by interactively placing vertices, edges, etc. This works both in the classic Jupyter notebook and in JupyterLab. It can also be used to make animations (see the demo notebook at https://github.com/jfraymond/phitigra for examples). Done in #30540 and #33639.

editor

Hyperbolic plots

  • Added the ability to choose the hyperbolic model for hyperbolic plots. #22081

Graphics with TikZ

The TikzPicture module which was developed in the slabbe package for more than 5 years is now in Sage. This was done in ticket #20343. The module is within the new file sage/misc/latex_standalone.py and its documentation in the reference manual is available here: https://doc.sagemath.org/html/en/reference/misc/sage/misc/latex_standalone.html. Below are some usage examples.

First example shows that it takes any tikz picture string as input:

sage: from sage.misc.latex_standalone import TikzPicture
sage: s = '\\begin{tikzpicture}\n\\draw[->,green,very thick](0,0) -- (1,1);\\end{tikzpicture}'
sage: t = TikzPicture(s)
sage: t        # in Jupyter, rich representation will show the image instead
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[->,green,very thick](0,0) -- (1,1);\end{tikzpicture}
\end{document}
sage: path_to_file = t.pdf() # and opens the image in a viewer

tikz_arrow

Of course, conversion to pdf format necessitates pdflatex or lualatex. If lualatex is available it uses it in preference to pdflatex because it handles better the very big pictures in terms of memory limits.

One can provide a local filename to save to, or convert the image to other formats (using pdftocairo or imagemagick external packages):

sage: path_to_file = t.pdf('file.pdf')  # when providing a filename, it just saves 
                                        # the file locally, does not open in a viewer
sage: path_to_file = t.png() # conversion to png
sage: path_to_file = t.svg() # to svg
sage: path_to_file = t.tex() # print the tex source to a file

Another example with graphs where additional usepackage are necessary to compile the image correctly:

sage: from sage.misc.latex_standalone import TikzPicture
sage: g = graphs.PetersenGraph()
sage: t = TikzPicture(latex(g), standalone_config=["border=4mm"], usepackage=['tkz-graph'])
sage: t        # in Jupyter, rich representation will show the image instead
\documentclass[tikz]{standalone}
\standaloneconfig{border=4mm}
\usepackage{tkz-graph}
\begin{document}
\begin{tikzpicture}
\definecolor{cv0}{rgb}{0.0,0.0,0.0}
\definecolor{cfv0}{rgb}{1.0,1.0,1.0}
\definecolor{clv0}{rgb}{0.0,0.0,0.0}
\definecolor{cv1}{rgb}{0.0,0.0,0.0}
---
65 lines not printed (3695 characters in total).
Use print to see the full content.
---
\Edge[lw=0.1cm,style={color=cv6v8,},](v6)(v8)
\Edge[lw=0.1cm,style={color=cv6v9,},](v6)(v9)
\Edge[lw=0.1cm,style={color=cv7v9,},](v7)(v9)
%
\end{tikzpicture}
\end{document}
sage: _ = t.pdf()               # or t.png() or t.svg()

tikz_graph

sage: from sage.misc.latex_standalone import TikzPicture
sage: V = [[1,0,1],[1,0,0],[1,1,0],[0,0,-1],[0,1,0],[-1,0,0],[0,1,1],[0,0,1],[0,-1,0]]
sage: P = Polyhedron(vertices=V).polar()
sage: s = P.projection().tikz([674,108,-731],112)
sage: t = TikzPicture(s)
sage: _ = t.pdf()               # or t.png() or t.svg()

tikz_polyhedron

The module also contains a class Standalone, from which the class TikzPicture inherits:

sage: from sage.misc.latex_standalone import Standalone
sage: s = Standalone('Hello World', usepackage=['amsmath'], standalone_config=['beamer=true','border=1mm'])
sage: s        # in Jupyter, rich representation will show the image instead
\documentclass{standalone}
\standaloneconfig{beamer=true}
\standaloneconfig{border=1mm}
\usepackage{amsmath}
\begin{document}
Hello World
\end{document}
sage: _ = s.pdf()               # or s.png() or s.svg()

tikz_hello

Another example using Standalone with a tableau:

sage: P = Permutations(10)
sage: p = P.random_element()
sage: p
[3, 10, 1, 9, 5, 6, 7, 2, 8, 4]
sage: t = p.to_tableau_by_shape([3,3,3,1])
sage: t
[[2, 8, 4], [5, 6, 7], [10, 1, 9], [3]]
sage: s = Standalone(latex(t), standalone_config=["border=1mm"])
sage: s
\documentclass{standalone}
\standaloneconfig{border=1mm}
\begin{document}
{\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}} }
\raisebox{-.6ex}{$\begin{array}[b]{*{3}c}\cline{1-3}
\lr{2}&\lr{8}&\lr{4}\\\cline{1-3}
\lr{5}&\lr{6}&\lr{7}\\\cline{1-3}
\lr{10}&\lr{1}&\lr{9}\\\cline{1-3}
\lr{3}\\\cline{1-1}
\end{array}$}
}
\end{document}
sage: _ = s.pdf()               # or s.png() or s.svg()

tikz_tableau

In a next step, a method tikz() will be added to graphs, polytopes, posets, etc. to return an object of type TikzPicture see #33002.

Complex plots

The complex plotting package phase_mag_plot has been incorporated into Sage. Now complex_plot allows contouring, tiling, and matplotlib-compatible colormaps. This was added in ticket #33416.

To use a colormap, one can pass in a string as in

sage: complex_plot((x - 5)*sqrt(x), (-10, 10), (-10, 10), cmap='twilight')

cmap_twilight

Contouring or tiling are enabled through keyword options. To look smooth, it's typically necessary to plot the function on additional points through the use of plot_points. This looks like

sage: complex_plot((x - 5)*sqrt(x), (-10, 10), (-10, 10), cmap='twilight', plot_points=500, contoured=True)

cmap_twilight_contour

sage: complex_plot((x - 5)*sqrt(x), (-10, 10), (-10, 10), cmap='twilight', plot_points=500, tiled=True)

cmap_twilight_tiled

Linear algebra

NumPy integration

The new classes Matrix_numpy_integer_dense and Vector_numpy_integer_dense implement matrices and vectors with 64-bit integer entries backed by numpy arrays. #32465.

As a first application, several methods of GenericGraph that return matrices, such as adjacency_matrix, now accept keyword arguments that can select the matrix implementation. #33377, #33387, #33388, #33389

sage: graphs.PathGraph(5).adjacency_matrix(sparse=False, implementation='numpy')
[0 1 0 0 0]
[1 0 1 0 0]
[0 1 0 1 0]
[0 0 1 0 1]
[0 0 0 1 0]
sage: type(_)
<class 'sage.matrix.matrix_numpy_integer_dense.Matrix_numpy_integer_dense'>

CombinatorialFreeModule improvements

Performing sums and similar constructions for CombinatorialFreeModule have been made faster. #33267

#...

Read more

9.5

24 Feb 16:08
Compare
Choose a tag to compare
9.5

Release Tour

SageMath version 9.5 was released on Jan 30, 2022 (changelog)

  • adds support for Apple M1, Linux distributions using glibc ≥ 2.34, and system Python 3.10
  • new code from 2021 Google Summer of Code projects in algebra and number theory
  • 663 tickets (PRs) merged, 94 contributors

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
  • The is_hermitian() method for sparse RDF/CDF matrices now uses a small tolerance by default to mitigate numerical issues. This brings it to parity with its dense counterpart. #33031

Manifolds

The full list of changes is available in this changelog.

De Rham cohomology and characteristic classes

The de Rham cohomology has been made an algebra (#32270).

The method characteristic_class for vector bundles is now outdated and replaced by the method characteristic_cohomology_class. This change reflects the difference between characteristic classes, seen as natural transformations, and characteristic cohomology classes in a more rigorous way (see #29581). The previous usability and syntax remains intact. Among other things, the following has been changed:

  • The performance of computing characteristic forms has been improved significantly by using a Faddeev-LeVerrier-like algorithm.
  • The characteristic forms of Pontryagin/Chern/Euler classes w.r.t. to a given connection are cached in order to speed up computations of all characteristic forms w.r.t. the same connection.

Furthermore, new features have been added. For example, characteristic cohomology classes now form an algebra:

sage: M = Manifold(4, 'M')
sage: E = M.vector_bundle(2, 'E', field='complex')
sage: R = E.characteristic_cohomology_class_ring(); R
Algebra of characteristic cohomology classes of the Differentiable complex vector bundle E -> M of rank 2 over the base space 4-dimensional differentiable manifold M
sage: R.gens()
[Characteristic cohomology class (c_1)(E) of the Differentiable complex vector bundle E -> M of rank 2 over the base space 4-dimensional differentiable manifold M,
 Characteristic cohomology class (c_2)(E) of the Differentiable complex vector bundle E -> M of rank 2 over the base space 4-dimensional differentiable manifold M]
sage: c_1, c_2 = R.gens()

Therefore, elements can be added and multiplied:

sage: c_1 + c_2
Characteristic cohomology class (c_1 + c_2)(E) of the Differentiable complex vector bundle E -> M of rank 2 over the base space 4-dimensional differentiable manifold M
sage: c_1 * c_1
Characteristic cohomology class (c_1^2)(E) of the Differentiable complex vector bundle E -> M of rank 2 over the base space 4-dimensional differentiable manifold M

Additive, multiplicative and Pfaffian cohomology classes are now related to the generators of the characteristic cohomology class ring via additive/multiplicative sequences:

sage: ch = E.characteristic_cohomology_class('ChernChar'); ch
Characteristic cohomology class ch(E) of the Differentiable complex vector bundle E -> M of rank 2 over the base space 4-dimensional differentiable manifold M
sage: ch == 2 + c_1 + c_1^2 / 2 - c_2  # additive sequence of exp(x)
True

As for the tangent bundle of a manifold, as long as an orientation and a metric is provided, the characteristic form of the Euler class (and therefore all Pfaffian classes) w.r.t. the Levi-Civita connection is now computed automatically (previously, a compatible curvature form matrix had to be provided by the user):

sage: M.<x,y> = manifolds.Sphere(2, coordinates='stereographic')
sage: g = M.metric()
sage: nab = g.connection()
sage: nab.set_immutable()
sage: TM = M.tangent_bundle()
sage: e = TM.characteristic_cohomology_class('Euler'); e
Characteristic cohomology class e(TS^2) of the Tangent bundle TS^2 over the 2-sphere S^2 of radius 1 smoothly embedded in the Euclidean space E^3
sage: e_form = e.get_form(nab)
sage: e_form
Mixed differential form e(TS^2, nabla_g) on the 2-sphere S^2 of radius 1 smoothly embedded in the Euclidean space E^3
sage: e_form.display_expansion()
e(TS^2, nabla_g) = 2/(pi + pi*x^4 + pi*y^4 + 2*pi*x^2 + 2*(pi + pi*x^2)*y^2) dx∧dy

Automatic coordinate change in curve plots

The method plot of curves is now allowed to perform a coordinate change to make the plot in terms of the coordinates specified via the argument chart, in case the curve is not known in these coordinates (#32578). For example, a cardioid is defined in terms of polar coordinates:

sage: E.<r, phi> = [[EuclideanSpace]](coordinates='polar')
sage: c = E.curve((1 + cos(phi), phi), (phi, 0, 2*pi))
sage: c.display()
(0, 2*pi) → E^2
   phi ↦ (r, phi) = (cos(phi) + 1, phi)

and its plot in terms of Cartesian coordinates can now be obtained simply by

sage: c.plot(chart=E.cartesian_coordinates(), aspect_ratio=1)

The above command has triggered the computation of the curve's expression in terms of Cartesian coordinates:

sage: c.display()
(0, 2*pi) → E^2
   phi ↦ (r, phi) = (cos(phi) + 1, phi)
   phi ↦ (x, y) = (cos(phi)^2 + cos(phi), (cos(phi) + 1)*sin(phi))

Internal code improvements and bug fixes

Various improvements have been performed in the internal code, some of them in view of SageMath modularization:

  • faster generation of non-redundant indices (#32318)
  • unnecessary uses of symbolic functions removed from sage.tensor.modules (#32415)
  • doctests involving SR marked optional in sage.tensor.modules (#32712)
  • sage.tensor.modules made independent from sage.manifolds (#32708).

Some bugs have been fixed: #31781, #32457, #32355, #32929.

Number theory

Logarithms

  • 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

Prime counting

  • Prime counting and related functions, in particular prime_pi, are now implemented using external libraries, primecount and primesieve. This improved performance and fixed a long-standing bug #24960

Elliptic curves and isogenies

  • Composite isogenies of elliptic curves have been added as an experimental feature. This includes support for compact smooth-degree isogenies. #32744
  • Isomorphisms of elliptic curves now expose the same interface as other isogenies. [#32502](https://trac.sagemath...
Read more