Releases: sagemath/sage
10.5.beta3
What's Changed
- little shoeshining for ncsym-dual by @fchapoton in #38349
- Fix a minor typo by @user202729 in #38352
- Homogenise
.log()
api across implementations of finite field elements by @AZ-0 in #38359 - Check input of composition by @mantepse in #38366
- Disjoint direct product decomposition of a permutation group by @Newtech66 in #38371
- Update ncsf.py documentation by @0-andy-0 in #38372
- moving ideal_monoid to the category of rings by @fchapoton in #38375
- pep8 cleanup in ode.pyx by @fchapoton in #38377
- CI: Remove
centos-7
by @mkoeppe in #38380 - refining the category of all-commuting g-algebras by @fchapoton in #38382
- Debug
component_function
in S-box Module and Add the S-box of WARP Block Cipher by @hadipourh in #35913 - Implement the BGG resolution of a simple finite dimensional Lie algebra representation by @tscrim in #37297
- Mark some slow tests as slow by @grhkm21 in #37363
build/pkgs/mathics
: Reduce to a pip package by @mkoeppe in #37395- Better coercion to ZZ for libGAP integers, modular integers by @kedlaya in #37580
- FareySymbol: set aspect_ratio to one in graph of fundamental domain. by @monien in #37728
sage.features.topcom
by @mkoeppe in #37858sage.knots
: Modularization fixes (imports),# needs
by @mkoeppe in #38118- Added example in documentation of set_legend_options by @25shriya in #38120
sage.schemes
: Modularization fixes (imports) by @mkoeppe in #38142- Remove unnecessary forcing to univariate by @Nathabolin in #38151
- implement morphisms from free algebras by @fchapoton in #38166
- Delete _check_rank_two method for Drinfeld modules by @kryzar in #38199
build/pkgs/fpylll
: Update to 0.6.1 by @mkoeppe in #38231- CI Build&Test: Show full logs, do not truncate by @mkoeppe in #38232
- cleanup for binary recurrence sequences by @fchapoton in #38233
- Fix diagonal matrix construction from base ring elements that have
_matrix_
methods by @mkoeppe in #38235 sage.geometry.hyperbolic_space
: Add# needs
by @mkoeppe in #38236- Deprecate global imports:
GroupExp_Class
,GroupExpElement
,GroupSemidirectProductElement
by @mkoeppe in #38238 sage.features.sat
by @mkoeppe in #38239- Fix
_latex_
exponents by @grhkm21 in #38243 - provide compatibility with numpy 2.0 by @dimpase in #38250
- .ci/write-dockerfile.sh, docker/Dockerfile: Fix Docker warning FromAsCasing by @mkoeppe in #38251
configure
: Check that the build directory is on a normal writable file system by @mkoeppe in #38256- some pep8 cleanup in four crystal files by @fchapoton in #38257
build/pkgs/sphinx
7.3.7,docutils
0.21.2,furo
2024.5.6 by @mkoeppe in #38261- partial care for empty lines in pyx in rings ; activate E302 in pyx by @fchapoton in #38263
- some care for pep E272 (spurious white spaces) by @fchapoton in #38264
- Refactor
sage-spkg
through sage-package by @mkoeppe in #38271 dist.yml
: Build musllinux wheels, build linux aarch64 wheels via QEMU by @mkoeppe in #38272- Deprecate
is_ChowCycle
,is_CohomologyClass
,is_Divisor
,is_ToricDivisor
by @mkoeppe in #38277 - Deprecate
is_Infinite
by @mkoeppe in #38278 - Deprecate
is_SymmetricFunction
by @mkoeppe in #38279 - Deprecate
is_StringMonoidElement
, ... by @mkoeppe in #38280 - correct eclib's m4 file code to check version by @JohnCremona in #38284
is_NumberFieldElement
: Fix deprecation message by @mkoeppe in #38286- Deprecate
is_Ring
by @mkoeppe in #38288 - graph: modular decomposition of a single vertex should be a single tree node by @cyrilbouvier in #38301
- Fix DrinfeldModule is_isomorphic method absolutely' flag by @kryzar in #38303
build/pkgs/surf
: Add to distros/ by @mkoeppe in #38305- fix some typos ; mostly in graphs by @fchapoton in #38307
build/pkgs/libffi
: Update to 3.4.6 by @mkoeppe in #38308- fix typos and code details in Hecke triangle groups by @fchapoton in #38314
- adding a few more links to python standard errors in doc by @fchapoton in #38318
- Implement hypergeometric Euler factors at t=1 by @kedlaya in #38322
- Fix issue 37519 by @maxale in #38326
- Dimacs leaves junk files by @seblabbe in #38333
- Removing the automatic size labeler by @tscrim in #38334
- fix mistake in category of fraction fields by @fchapoton in #38343
build/pkgs/ecm
: Upgrade to 7.0.6 by @mkoeppe in #38345- Updated
__repr__()
to_repr_()
in ideals classes by @25shriya in #38346 - add uniform generator of random proper interval graphs by @dcoudert in #38354
- Reintroducing tight complex interval inverse by @unhyperbolic in #38360
- Support ECM 7.0.6 by @antonio-rojas in #38344
build/pkgs/tachyon
: Upgrade to 0.99.5 by @mkoeppe in #36969src/tox.ini
(coverage:run): Setconcurrency = multiprocessing,threads
by @mkoeppe in #37010build/pkgs/pytest*
: Change to standard wheel packages by @mkoeppe in #37301- src/pyproject.toml: Add 'external' section per draft PEP 725 (unbundled from #37446) by @mkoeppe in #37482
- fix quadratic_defect by @nbruin in #37657
- docstrings: large scale formatting by @gmou3 in #38155
- Implemented generators for Staircase graph, Biwheel graph and Truncated biwheel graph by @janmenjayap in #38175
- Change inheritance order in UniqueRepresentation by @enriqueartal in #38203
- Deprecate
is_Ideal
,is_LaurentSeries
,is_MPolynomialIdeal
,is_MPolynomialRing
,is_MPowerSeries
,is_PolynomialQuotientRing
,is_PolynomialRing
,is_PolynomialSequence
,is_PowerSeries
,is_QuotientRing
by @mkoeppe in #38266 - Fix lex_BFS (and co.) for directed graphs by @cyrilbouvier in #38269
- Deprecate
is_FunctionFieldElement
,is_FunctionFieldElement
by @mkoeppe in #38289 - Deprecate
is_LaurentSeriesRing
,is_MPowerSeriesRing
,is_PowerSeriesRing
by @mkoeppe in #38290 - Update fedora distro info by @enriqueartal in #38358
- add access to printlevel in libsingular by @fchapoton in #38365
- Add framework for key exchange schemes and Diffie-Hellman by @vincentmacri in #38374
- simplify some iterations (ruff PERF102) by @fchapoton in #38390
- get rid of one sage_eval in complex numbers by @fchapoton in #38391
- get rid of sage_eval in grobner_fan by @fchapoton in #38392
- get rid of one sage_eval in modular by @fchapoton in #38394
- slightly nicer fully-packed loop unicode art by @fchapoton in #38397
- Fix a bug in version selector of documentation by @kwankyu in #38401
- Add announcement banner for push to develop by @kwankyu in #38402
- Call more general algorithm when lattice basis isn't trivial by @malb in #38405
- Fix typos and outdated links in
igraph_graph()
docs by @szhorvat in #38407 - Fix layout of conda installation instructions by @saraedum in #38408
- src/sage/rings/complex_interval.pyx: Fix...
10.4
Release Notes
- adds support for GCC 14; major package upgrades
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 #37346sage/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 ofPolynomial_generic_dense_inexact
returns anInteger
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
totopology
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 toLaurentPolynomialRing
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 ofFreeModuleElement
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
insrc/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
forMPolynomialRing_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 forMPolynomial_polydict
class by @GiacomoPope in #37611 - Fix hyperelliptic curve dynamic class construction to allow proper method inheritance by @GiacomoPope in #37613
- Updated README....
10.3
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
What's Changed
- clean E702 etc in integer.pyx by @fchapoton in #36653
sage.misc.explain_pickle
: Docstring cosmetics by @mkoeppe in #36655- ruff auto-fix for C4 in modular by @fchapoton in #36664
- Laurent polynomials, Fitting ideals and characteristic varieties by @enriqueartal in #36368
- check coprimality of moduli in CRT_basis() by @yyyyx4 in #36457
- Functions for nice tree decomposition and its labelling by @guojing0 in #36504
sage --tox -e coverage.py
by @mkoeppe in #36505pkgs/sage-{docbuild,setup,sws2rst}
: Migrate fromsetup.cfg
topyproject.toml
by @mkoeppe in #36562- Replace relative imports by absolute ones in categories by @tobiasdiez in #36572
- rename the backtrack algorithm of method
longest_path
with deprecation by @dcoudert in #36574 - implemented power of graph function under basic methods by @saatvikraoIITGN in #36584
- Replace relative imports by absolute ones in rings by @tobiasdiez in #36588
- Replace relative imports by absolute ones in a few packages by @tobiasdiez in #36589
- Add pull_from_function_field to curves by @kwankyu in #36592
- Replace relative imports by absolute ones in modules by @tobiasdiez in #36597
- cylint cleanup in combinatorial polyhedra by @fchapoton in #36623
- Allow to specify output directory for generated interpreters by @tobiasdiez in #36630
- sums of elliptic-curve morphisms by @yyyyx4 in #36637
- return Weierstrass scaling factor in base field for EllipticCurveIsogeny by @yyyyx4 in #36638
sage.algebras
: Update# needs
, modularization fixes, doctest cosmetics by @mkoeppe in #36642sage.combinat.species
: Update# needs
by @mkoeppe in #36643sage.combinat.words
: Update# needs
by @mkoeppe in #36644- More fixes for e221 by @fchapoton in #36654
sage.tests
: Update# needs
by @mkoeppe in #36657sage.sat
: Update# needs
by @mkoeppe in #36658- fix documentation and random doctest failure for Cornacchia algorithm by @yyyyx4 in #35486
- test whether point is actually on the curve when evaluating elliptic-curve isomorphism by @yyyyx4 in #35799
- Bliss spkg config by @dimpase in #35830
- FriCAS spkg-configure and Feature by @dimpase in #35838
- upgrade to flint3 by @mezzarobba in #35848
- generalize EllipticCurve_field.division_field() to composite orders by @yyyyx4 in #35936
- Cythonize
LatticePolytope.normal_form(algorithm='palp_native')
, change to default, add as aPolyhedron
method by @mkoeppe in #36031 - Notebook 7, ipykernel 6.27, ipython 8.17 by @mkoeppe in #36129
sage -fixdistributions
by @mkoeppe in #36135- add class groups of binary quadratic forms by @yyyyx4 in #36184
- establish interface for instantiated classical modular polynomials by @yyyyx4 in #36190
- src/sage/doctest/control.py: double the default test timeout by @orlitzky in #36223
- refresh the file plural.pyx by @fchapoton in #36683
- less use of _an_element_impl by @fchapoton in #36689
- Implement twisted homology of simplicial sets. by @miguelmarco in #36691
- Dark Mode Compatibility: Improved Crystals Visibility by @cherry-1729-9090 in #36695
- CI Linux incremental: Set max_parallel = 8, reduce standard-sitepackages platforms by @mkoeppe in #36697
- some details in combinations by @fchapoton in #36701
- make modform rings for triangle groups use Algebras by @fchapoton in #36703
- convert Tate algebra to use Parent and category by @fchapoton in #36704
- add method to compute the length of a tree-decomposition by @dcoudert in #36705
- get rid of coerce_try by @fchapoton in #36709
- Deploy live doc preview with pdf docs by @kwankyu in #36714
- build/bin/sage-logger [V=0]: Show more lines of the log of failing builds by @mkoeppe in #36715
- Free space and repeatability for the Docker Hub workflow by @soehms in #36716
- Adding cellular bases for the SymmetricGroupAlgebra over general fields by @tscrim in #36718
- Compute dimensions of simple symmetric group modules over positive characteristic by @tscrim in #36724
- cython-lint for graphs/ by @fchapoton in #36728
- build/pkgs/pari: require pari-2.5.14, drop tests for patched v2.5.13 by @orlitzky in #36732
meson_python
0.15 by @mkoeppe in #36733- avoid importing
DiGraph
fromsage.graphs.graph
by @dcoudert in #36736 build/bin/sage-spkg
: Add options for checking, cleaning separately from build/install by @mkoeppe in #36738- ⬆️ Bump actions/github-script from 6.4.0 to 7.0.1 by @dependabot in #36739
- Plant anchors for hunks to create links in doc preview changes by @kwankyu in #36742
- Normal Python packages: postpone wheel installation to the post-install phase by @mkoeppe in #36743
- pep8 for maxima-lib interface by @fchapoton in #36744
- pep8 for axiom and sympy interfaces by @fchapoton in #36745
- pep8 in various interfaces by @fchapoton in #36746
pkgs/sagemath-{bliss,coxeter3,...}
: Move metadata fromsetup.cfg
topyproject.toml
by @mkoeppe in #36564sage.libs.pari
,sage.rings.real_mpfr
: Modularization fixes by @mkoeppe in #36645sage.interfaces
: Update# needs
by @mkoeppe in #36656- implement Bröker's algorithm for constructing supersingular curves by @yyyyx4 in #36665
- Replace relative imports by absolute ones in
sage.{algebras,arith,categories,cpython,data_structures,misc,modular,rings,sat,symbolic}
by @mkoeppe in #36666 - capitals to Hopf, Lie, Coxeter by appropriate mechanism by @fchapoton in #36673
- symengine and symengine_py 0.11 by @dimpase in #36677
src/doc
: Update# needs
by @mkoeppe in #36679src/sage/graphs
: some care with# optional
by @dcoudert in #36682- get rid of some ParentWithGens in real and complex fields by @fchapoton in #36684
.ci/merge-fixes.sh
: Obtain patches via URL, make customizable by repository variable by @mkoeppe in #36686- Codestyle improvements (mostly sort imports) by @mkoeppe in #36687
- use less _element_constructor by @fchapoton in #36700
- Python toolchain as wheel packages by @mkoeppe in #36802
- Corrected the typo in documentation - Permutation Groups by @SpaceCoder93 in #36818
- Fix linter failure in 10.3.beta0 by @mkoeppe in #36822
ipython
8.18 and related upgrades, removebackcall
by @mkoeppe in #36823- README.md: Update section on macOS arm64 by @mkoeppe in #36828
- update qepcad to B 1.74 by @dimpase in #36837
- various details in group (ruff and pycodestyle) by @fchapoton in #36851
failing doctest on Apple M1
: corrected the test case by sorting the result by @amanmoon in #36852- various details in algebras (ruff mostly) by @fchapoton in https://github.com/sagemath...
10.2
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
What's Changed
- upgrade msolve to 0.5.0, update interface by @mezzarobba in #36103
- using mute variables in combinat by @fchapoton in #36107
- some details in quadratic forms by @fchapoton in #36108
- using
# needs
in posets folder by @fchapoton in #36114 - fix cardinality, #36119, #36118, #36116 by @mantepse in #36124
- python-style loops in
partn_ref.data_structures
(partial) + some pep8 by @fchapoton in #36140 - Drop support for GCC < 8.4, drop testing of
debian-buster
andfedora-29
by @mkoeppe in #35810 sage.categories
: Update# needs
by @mkoeppe in #35945- Initial implementation of dynamical semigroups by @MatheMagicianPi in #35947
- Implemented five new operations for dynamical semigroups by @MatheMagicianPi in #35988
- Working MCDS implementation using connectivity constraints by @MrBanananator in #35990
- Implement Goss polynomials of Drinfeld modules by @DavidAyotte in #35991
- New functions
is_chebyshev
andis_Lattes
for one dimensional projective dynamical systems by @guojing0 in #36000 - Fix tests with singular 4.3.2p4 by @antonio-rojas in #36018
- Implement algebra_containment from Singular (issue #34502) by @jhpalmieri in #36030
- Implemented two new methods for dynamical semigroups by @MatheMagicianPi in #36041
- Fix sqrt(sqrt(2)) memory leak in ginac numeric.cpp by @vbraun in #36046
- New GitHub workflow to continue our images on Docker Hub by @soehms in #36047
- normaliz: Update to 3.10.1 by @mkoeppe in #36050
- cython-lint : add note about unused imports by @fchapoton in #36053
sage.arith
: Update# needs
by @mkoeppe in #36057- Speed up the creation of submatrices of
Matrix_modn_dense_template
matrices by @marizee in #36059 sage.{cpython,data_structures,databases,ext,parallel,structure}
: Update# needs
by @mkoeppe in #36067sage.{matrix,modules,probability,stats,quadratic_forms,tensor}
: Update# needs
, modularization fixes by @mkoeppe in #36070- Correct typo in class name of
Polynomial_ZZ_pEX
in.pxd
file by @GiacomoPope in #36071 sage.{interacts,misc,repl,typeset}
: Update# needs
, modularization fixes by @mkoeppe in #36078- fix and activate pycodestyle E301 in pyx files by @fchapoton in #36079
- build/pkgs/jupyter_core: Update to 4.12.0 by @mkoeppe in #36083
- some details in coxeter groups by @fchapoton in #36085
- using python-style for-loops in modular folder by @fchapoton in #36086
- using python-style for loops in calculus by @fchapoton in #36087
sage.geometry.polyhedron
: fix doctest error due to modularization by @dcoudert in #36089- Speed-up the creation of a zero matrix of type
Matrix_modn_dense_template
by @marizee in #36093 - Height function for projective subvarieties by @MatheMagicianPi in #36094
- add ordered set partitions as supported findstat collection by @mantepse in #36096
- Add additional bindings from NTL to
Polynomial_ZZ_pEX
by @GiacomoPope in #36097 - Detect and use system MathJax-3.x by @orlitzky in #36098
sage.crypto
: Update# needs
, modularization fixes by @mkoeppe in #36106- build/pkgs/cython: Update to 0.29.36 by @mkoeppe in #35084
- libatomic_ops: Update to 7.8.0 by @ivmai in #35399
- Drop support for Python 3.8 by @tobiasdiez in #35404
sage.functions
: Decouple fromsage.symbolic.expression
andmpmath
, update# needs
by @mkoeppe in #35716- gc: update to 8.2.4 by @ivmai in #35743
- Implement cocharacter and primitive Eulerian polynomials for hyperplane arrangements by @tscrim in #35914
- Delete .zenodo.json by @dimpase in #36132
- add some links to python error classes in the doc by @fchapoton in #36088
- run GitHub actions locally using gh act by @dimpase in #36117
- Bandaid for polynomial evaluation by @fchapoton in #36127
sage.combinat.root_system
: Modularization fixes,# needs
by @mkoeppe in #36136- fix Conrey number of trivial Dirichlet character by @fchapoton in #36139
- python-style loops in
sage.graphs
by @dcoudert in #36142 - Fix two "Computational Math.." book doctests by @orlitzky in #36143
- build/pkgs/mathjax/distros/gentoo.txt: Fix by @mkoeppe in #36145
- Fixing many e305 by @fchapoton in #36147
- fix the 2 broken linters by @fchapoton in #36148
- Fix doctest in
src/sage/algebras/quantum_groups/quantum_group_gap.py
by @dcoudert in #36149 - random elt for colored permutations by @fchapoton in #36155
- detect the zero series when returning an exact stream by @mantepse in #36156
- some pep for E30 and more in quadratic forms by @fchapoton in #36157
- Fix documentation previews using mathjax cdns by @kwankyu in #36160
- build/pkgs/singular: Upgrade to 4.3.2p7, reject system Singular without FLINT by @mkoeppe in #35934
- Implementing a generic one method for unital algebras by @tscrim in #36095
sage.rings.finite_rings.element_*
: Remove unused imports by @mkoeppe in #36105- Prepare for updating Cython to 3.0.0 by @infmagic2047 in #36109
- small improvements for functorial composition by @mantepse in #36115
- improve performance of stream cauchy invert by @mantepse in #35338
- Update Zariski-van Kampen functions by @enriqueartal in #35376
- using PyLong API instead of legacy PyInt API by @fchapoton in #36111
- Upgrades: scipy 1.11 and dependencies by @mkoeppe in #36112
- Coxeter arrangement by @fchapoton in #36151
sage.rings
: Update# needs
by @mkoeppe in #36152- minor details in graph_plot by @fchapoton in #36162
- Fix the ascii art for the Heisenberg Lie algebras by @tscrim in #36170
- Fix quadratic memory of berlekamp_massey by @grhkm21 in #36173
- fix and activate pycodestyle E305 in py files by @fchapoton in #36177
- Improve methods in
sage.misc.rest_index_of_methods
to fix the documentation of graphs. by @dcoudert in #36179 - more fixes in quadratic forms by @fchapoton in #36180
- fix E228 and E225 in algebras/ by @fchapoton in #36182
sage.misc.sageinspect
: fix doctest warnings due to modularisation by @dcoudert in #36183- src/sage/tests: fix another "Computational Math..." doctest by @orlitzky in #36185
- use semi-primitive root when checking kernel polynomials of isogenies by @yyyyx4 in #36187
- fix E228 and E225 in schemes/ by @fchapoton in #36191
- fix E228 then E225 in rings/ by @fchapoton in #36192
- schemes/elliptic_curves: disable a test that takes too long by @tornaria in #36195
- Fixing the iterator of SemistandardMultiSkewTableaux by @tscrim in #36200
- some micro-details in Dyck words and Parking functions by @fchapoton in #36202
- Remove self-
cimport
s by @mkoeppe in htt...
10.1
SageMath version 10.1 (released Aug 20, 2023)
Release Notes
- major package upgrades; new development tools
What's Changed
- Some fixes for Specht modules and diagrams by @tscrim in #35432
- Implement down-up algebras and their Verma modules by @tscrim in #35484
sage.rings.factorint
: Modularization fixes by @mkoeppe in #35502- Deprecate
is_SymbolicVariable
,is_SymbolicEquation
by @mkoeppe in #35505 - Some cython-linting in
modular/
folder by @fchapoton in #35516 - Make
rank
return anInteger
object by @kryzar in #35519 src/sage_docbuild/conf.py
: Do not fail ifpplpy
doc is not installed by @mkoeppe in #35536- For groups: generic
centralizer
,subgroup
methods; improvingcenter
by @tscrim in #35540 - Review of #35540 by @dwbump in #35547
- Fvector for fans by @fchapoton in #35548
- Fixing some pycodestyle warnings E251 by @fchapoton in #35549
- Removing some unused imports in cython files by @fchapoton in #35550
- Enable access to some methods in
sage/graphs/graph_decompositions
by @dcoudert in #35551 - cython-lint cleaning in
combinat/
by @fchapoton in #35553 - Make doc preview message from github bot one liner by @kwankyu in #35563
- Replace obsolescent
egrep
by @fchapoton in #35565 - Partial cython-lint in
plot
folder by @fchapoton in #35566 4ti2
: Update to 1.6.10, fixesegrep
issue, adds GCC 13 support by @mkoeppe in #35570- Some details in
posets
by @fchapoton in #35573 - Support
tox
4.x for testing modularized distributions by @mkoeppe in #35208 - Implement the logarithm and the exponential of a Drinfeld module by @DavidAyotte in #35260
- Add a few operations from linear symplectic geometry by @tobiasdiez in #35354
openblas
: Update to 0.3.23 by @mkoeppe in #35371- The Fusion Ring of the Drinfeld Double of a Finite Group by @dwbump in #35387
- Remove tag fetching in docker workflow by @tobiasdiez in #35417
sage.categories
: Add# optional
for modularization; reformat doctests by @mkoeppe in #35422- Adding bigraded Betti numbers functionality by @OP5642 in #35430
- Add ability to generate graphs based on correlations of sequences #25933 by @Bruno-TT in #35009
src/doc/en/developer/portability_testing.rst
: Update after migration by @mkoeppe in #35108- Add parallel algorithm to Graph
chromatic_number
by @dcoudert in #35145 - Some typing and code tweaks in MZV by @fchapoton in #35567
- Details on complex reflection groups by @fchapoton in #35574
- Some details in commutative dga by @fchapoton in #35575
- Simplify some trivial iterations by @fchapoton in #35576
- Refactor: outsource methods in combinatorial polyhedron by @kliem in #35577
- Refactor: improve initialization of combinatorial polyhedron by @kliem in #35578
sage.{topology,homology}
: Modularization fixes by @mkoeppe in #35581- Fix discrepancy in partitions between provided number and starting partition by @trevorkarn in #35582
- Support
networkx
3.1 by @tornaria in #35584 sage.geometry
: Add some# optional
, reformat doctests by @mkoeppe in #35586bootstrap-conda
: Skip the dummy package_sagemath
by @mkoeppe in #35589- Implement twisted affine Lie algebras by @tscrim in #35591
- Fix Max=Min warning in coin interacts by @tobiasdiez in #35596
- Remove global
sage.all
import in pytest by @tobiasdiez in #35598 src/doc/common/python3.inv
: Update by @mkoeppe in #35608- Check for empty string before trying to evaluate in
_element_constructor
by @nbruin in #35610 - Support
linbox
1.7.0 and 1.6.3 at the same time by @tornaria in #35612 - Upgrade Maxima to 5.46.0 by @dimpase in #35619
Animation.ffmpeg
: Shell-quote filenames by @mkoeppe in #35622- cython-linting of unused imports in
modules
anddynamics
by @fchapoton in #35623 - Remove jupyter-packaging for conda by @tobiasdiez in #35627
- Implement the octonions by @tscrim in #35630
- Simplify some
all(all(...))
incombinat
andgeometry
by @fchapoton in #35631 - Use fixed random-seed in the "Build & Test" CI by @tobiasdiez in #35632
- Activating more pycodestyle checks by @fchapoton in #35634
- Support
sympy
1.12 by @tornaria in #35635 - Fix typo in documentation by @antonmosich in #35641
- Avoid redundant computations in finite field
.conjugate()
method by @remyoudompheng in #35643 sage.graphs
: More# optional
and other modularization fixes by @mkoeppe in #35647- pkg-config should be
_bootstrap
, not_prereq
, on all distros by @mkoeppe in #35407 sage.rings
: Reformat doctests, add# optional
annotations by @mkoeppe in #35457- Clear up left right confusion in
ore_polynomial_element.pyx
by @kwankyu in #35562 - Make
EllipticCurve.lift_x()
deterministic by @yyyyx4 in #35644 - Remove abuse of predefined
x
in doctests by @mkoeppe in #35648 - Fix bug caused by cached representation in cohomology classes by @miguelmarco in #35650
- Installation guide: Document workaround for Jupyter server port clash on WSL by @mkoeppe in #35651
- Cleanup and details in
finite_word.py
by @fchapoton in #35657 - Fix build with
sphinx
7 by @antonio-rojas in #35658 - CI Linux: Update platforms by @mkoeppe in #35660
- SymPy 1.12 upgrade by @mkoeppe in #35662
- Changing the knot theory PD-code convention by @soehms in #35665
- cython-lint: removing unused imports in
polynomials
by @fchapoton in #35672 - cylint: remove unused imports in
pyx
files in foldersa*-geo*
by @fchapoton in #35673 - cylint: remove unused imports in
graphs
,groups
,interacts
by @fchapoton in #35674 - cylint: remove unused imports in
matrix
folder by @fchapoton in #35675 - Some pep8 in elliptic curves by @fchapoton in #35677
- Fix building the Singular docstring dict when Singular info is built with recent texinfo by @antonio-rojas in #35678
- Register magic modes for lazy imported interfaces by @miguelmarco in #35680
- Deprecation warning for #34880 by @yyyyx4 in #35683
- Unify input of matrices and vectors by @dkrenn in #35685
- Fixing a lot of pycostyle warnings in
calculus
folder by @fchapoton in #35686 - Some fixes for pycodestyle E275 by @fchapoton in #35687
- cython-lint: removed many unused imports in
rings/
by @fchapoton in #35688 - cylint: remove unused imports in folders
[s-z]*
by @fchapoton in #35689 - Correct spelling in
permgroup_named
: Diyclic => Dicyclic by @dwbump in #35694 - Fix incorrect linear branch number for non-invertible SBox by @rusydi in #35695
- cylint: remove imports in
misc/
by @fchapoton in #35697 - Fix corner case of ordered set partitions iteration by @videlec in #35700
- GAP: fix definition...
10.0
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
What's Changed
- Fix deployment of docs to netlify by @tobiasdiez in #34984
- Fix W391 linter issues by @tobiasdiez in #35109
tox.ini
(fedora-33): Do not setIGNORE_MISSING_SYSTEM_PACKAGES=no
by @mkoeppe in #35126- Mark unstable tests in
klyachko.py
due to #32773 by @tornaria in #35058 - ci-linux: Remove unmaintained local-conda runs by @mkoeppe in #35125
- Fix Cygwin CI after #32841 by @mkoeppe in #35052
- Add default devcontainer using conda by @tobiasdiez in #35072
- Improve camera positioning for threejs by @kwankyu in #34960
- Show explicit formulas in documentation of
WeierstrassIsomorphism
by @yyyyx4 in #34967 - Compute matrix kernels modulo composites by @yyyyx4 in #34968
- Cross-link matrix methods
image
andcolumn_space
by @Sandstorm831 in #34972 SignedPermutation
should allow iterables as input by @Sandstorm831 in #34974- Add
.torsion_basis()
method toEllipticCurve_finite_field
by @yyyyx4 in #34982 - Add construction of strongly regular digraph by @MatteoCati in #34986
- Trac role to GitHub by @roed314 in #35015
- Add doctest for #20847 by @mezzarobba in #34963
- Add
.twists()
toEllipticCurve_finite_field
by @yyyyx4 in #34981 - Add new skew Hadamard matrices by @MatteoCati in #34985
- Fix doctests to support numpy 1.24 by @tornaria in #34994
- Fix bug due to UB in conversion from python
int
toZZ
(python 3.11, 32 bit, gcc12) by @tornaria in #34997 - Enable dependabot for github action updates by @tobiasdiez in #34999
- Add doctest for #20846 by @mezzarobba in #35001
- Add doctest for #16031 by @mezzarobba in #35003
- Speed up some methods for quasimodular forms ring elements by @DavidAyotte in #35004
- Fix some "cannot" by @fchapoton in #35007
- Add doctest for #13569 by @mezzarobba in #35010
sage.{categories,matrix,structure}
: Replace imports fromsage.*.all
for namespace packages by @mkoeppe in #35012- Add
limit=
argument toInteger.prime_divisors()
by @yyyyx4 in #35019 - Use NTL's
MinPolyMod()
for more rings by @yyyyx4 in #34966 qqbar.clear_denominators
: crude but fast alternative algorithm by @mezzarobba in #34961- Support for tachyon >= 0.99.2 by @tornaria in #34995
- Implement check for Lorentzian polynomials #28252 by @fchapoton in #35021
- Remove upstream urls from
checksums.ini
that point to trac by @roed314 in #35023 - Fix usage of
verbose
with positional argument by @alexjbest in #35024 - Implement
__getitem__
and alias weight methods for quasimodular forms by @DavidAyotte in #35025 - gitignore another (temporary) autoconf file by @alexjbest in #35027
sage.schemes
: Replace imports fromsage.*.all
for namespace packages by @mkoeppe in #35033- Make
_multiple_x_*()
methods work for all n≠0 by @yyyyx4 in #35035 - Document argument
is_open
inManifoldSubset.complement
anddifference
by @egourgoulhon in #35040 - Add Hadamard matrices up to order 1000 by @MatteoCati in #35059
- A bijectionist's toolkit by @mantepse in #35060
- Add notes about recent changes on
KnotInfo
by @soehms in #35063 - Removing some unused imports by @fchapoton in #35064
- Upgrade eclib to 20221012 by @alexjbest in #35067
- Conform to doc requirements so that the docs look more beautiful by @alexjbest in #35069
- Document sage installation method with pip by @zovelsanj in #35070
- Combinatorial polyhedron: move list of pairs to dedicated class by @kliem in #35073
- Add ABCs
CommutativePolynomial
,MPolynomial_libsingular
,InfinitePolynomial
; deprecateis_Polynomial
,is_MPolynomial
by @mkoeppe in #35076 - Remove 'docker' from the names of the Docker images published on ghcr.io by @mkoeppe in #35079
- Add
is_supergreedy()
to linear extensions by @Sandstorm831 in #34970 - Deprecate constructing number-field fractional ideals via orders'
.ideal()
method by @yyyyx4 in #34979 is_prime
for ideals uses factorization, can be VERY slow by @yyyyx4 in #34980- Integer-valued polynomial ring by @fchapoton in #34988
- Drinfeld modules by @kryzar in #35026
- Fix the method
monomials_of_degree
by @DavidAyotte in #35043 - Convert result of multivariate polynomial evaluation into correct parent by @mezzarobba in #35045
sage.{coding,groups}
: Replace imports from sage.*.all for namespace packages by @mkoeppe in #35099- Remove direct use of
setup.py sdist
, add targetsmake SPKG-sdist
by @mkoeppe in #35104 sage.{functions,interfaces,symbolic}
: Replace imports fromsage.*.all
for namespace packages by @mkoeppe in #35105sage.{arith,crypto,databases,dynamics,lfunctions,quadratic_forms}
: Replace imports fromsage.*.all
for namespace packages by @mkoeppe in #35106sage.{finance,interacts,libs,numerical,stats,tests}
: Replace imports fromsage.*.all
for namespace packages by @mkoeppe in #35107- Deprecate
is_FiniteField
etc., makesage.rings.finite_rings
a namespace package by @mkoeppe in #35119 - Fix use of
sig_on()
/sig_off()
inCBF.integral()
by @mezzarobba in #35044 - Implementing q-commuting Laurent polynomials. by @tscrim in #35054
- Upgrade scipy to 1.10.1 by @mkoeppe in #35082
build/pkgs/pcre
: Remove by @mkoeppe in #35083- Upgrade polymake to 4.9 by @mkoeppe in #35085
- Move
single_valued
method of MZV to auxiliary F ring by @fchapoton in #35086 - Use enum for face iterator status by @kliem in #35087
sage.{algebras,combinat,matroids}
: Replace imports from sage.*.all for namespace packages by @mkoeppe in #35090- Fix and activate W391 in
pyx
files by @fchapoton in #35091 - Update GAP to 4.12.2 by @dimpase in #35093
- To determine
GAP_SO
,sage.env
looks forlibgap.so
but it should look forlibgap.so*
by @dimpase in #35094 - Simplicial set group by @miguelmarco in #35097
sage.{topology,homology}
: Replace imports fromsage.*.all
for namespace packages by @mkoeppe in #35098- New ABC
sage.structure.element.NumberFieldElement
,deprecate is_NumberFieldElement
by @mkoeppe in #35100 scip_backend
: Remove use of deprecatedsage.ext.memory_allocator
by @mkoeppe in #35101- Fix all pycodestyle E303 warnings in all folders
c*
by @fchapoton in #35151 - Update msolve to 0.4.9 by @dimpase in #35159
- Fix a slow doctest in
matrix_integer_dense_hnf.py
by @tornaria in #35162 - Fix the documentation for the so matrix Lie algebra by @tscrim in #35163
- Compute the matrix of an isogeny on a given n-torsion subgroup by @yyyyx4 in #35164
- Activate W293 and E714 in
pyx
files by @fchapoton in #35165 - Fix bug in
is_eulerian
by @dcoudert in #35170 - Speedup of Poset cha...
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
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 Composition
s 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...
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
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.
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
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()
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()
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()
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()
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')
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)
sage: complex_plot((x - 5)*sqrt(x), (-10, 10), (-10, 10), cmap='twilight', plot_points=500, tiled=True)
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
#...
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 insage.tensor.modules
(#32712) sage.tensor.modules
made independent fromsage.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
- Binary quadratic forms' .solve_integer() method now uses PARI's qfbsolve() instead of a brute-force search, which is often exponentially faster. #32782
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...