Skip to content

Releases: sagemath/sage

3.1.1

17 Aug 00:01
Compare
Choose a tag to compare

Sage 3.1.1 (released Aug 17, 2008; changelog)

See Sage 3.1 for the feature tour. The 3.1.1 release was a bug fix release that fixed one critical bug in Sage 3.1.

Full Changelog: 3.1...3.1.1

3.1

17 Aug 00:00
Compare
Choose a tag to compare
3.1

Release Tour

Sage 3.1.1 was released on August 17th, 2008 (changelog)

114 tickets (PRs) merged, 44 contributors). For the official, comprehensive release notes, see the HISTORY.txt file that comes with the release.

New Coercion Infrastructure

Robert Bradshaw, David Roe: new coercion model

Graph and Plotting Improvements

Arnaud Bergeron, Jason Grout, Robert Miller, Franco Saliola

  • (Robert Miller, Franco Saliola) Automatic plotting of trees and posets.

Major Update to Root Systems

Dan Bump, Nicolas Thiery, Nicolas Borie, Mike Hansen

Steenrod Algebra Calculations

John Palmieri

Notebook improvements

Timothy Clemans

Free Modules Revision

David Kohel

Multimodular Algorithm for Bernoulli Numbers

David Harvey

Partition Refinement

Robert Miller

  • Generalized the existing algorithms for graphs and binary codes, rewrote algorithm to be substantially more legible and maintainable.

Integral Point Finding for Elliptic Curves over Q

Tobias Nagel, Michael Mardaus, John Cremona

  • Integral points on elliptic curves over Q: done, in 3.1.1
  • S-integral points on elliptic curves over Q: in progress

New sage_input Function

Carl Witty

New printing for intervals and QQbar elements

Carl Witty

Sage 3.1.1 introduces a new way to print intervals and QQbar elements:

sage: QQbar(sqrt(2))
1.414213562373095?

The question mark syntax indicates that the real value is within 1.414213562373094 and 1.414213562373096 (that the last digit could vary by up to plus or minus one). For QQbar elements, Sage knows the real value and uses that value in calculations.

Full Changelog: 3.0.5...3.1

3.0.6

16 Aug 23:58
Compare
Choose a tag to compare

Release Tour

Sage 3.0.6 was released on July 30th, 2008 (changelog), 39 tickets (PRs) merged, 22 contributors. For the official, comprehensive release notes, see the HISTORY.txt file that comes with the release.

FIXME

Full Changelog: 3.0.5...3.0.6

3.0.5

16 Aug 23:58
Compare
Choose a tag to compare

Release Tour

Sage 3.0.5 was released on July 11th, 2008 (changelog), 5 tickets (PRs) merged, 3 contributors. For the official, comprehensive release notes, see the HISTORY.txt file that comes with the release.

FIXME

Full Changelog: 3.0.4...3.0.5

3.0.4

16 Aug 23:56
Compare
Choose a tag to compare

Release Tour

Sage 3.0.3 was released on July 9th, 2008 changelog), 131 tickets (PRs) merged, 34 contributors. For the official, comprehensive release notes, see the HISTORY.txt file that comes with the release.

Integer polynomials now use FLINT (Burcin Erocal, Carl Witty)

The polynomial ring ZZ['x'] is now implemented using FLINT, rather than NTL; this gives huge speedups on many operations (such as multiplication of large polynomials). (The old NTL implementation is still available with PolynomialRing(ZZ, 'x', implementation='NTL').)

Sage startup time improvements

Notebook updates

@parallel and pyprocessing

Full Changelog: 3.0.3...3.0.4

3.0.3

16 Aug 23:56
Compare
Choose a tag to compare

Release Tour

Sage 3.0.3 was released on June 23rd, 2008 (changelog), 85 tickets (PRs) merged, 23 contributors. For the official, comprehensive release notes, see the HISTORY.txt file that comes with the release.

FIXME

Cyclotomic Linear Algebra

#3042

Build fixes for 64-bit OS X

Full Changelog: 3.0.2...3.0.3

3.0.2

16 Aug 23:54
Compare
Choose a tag to compare

Release Tour

Sage 3.0.2 was released on May 24th, 2008 (changelog), 138 tickets (PRs) merged, 27 contributors. For the official, comprehensive release notes, see the HISTORY.txt file that comes with the release.

Portability of Sage to 64 bit OSX and Cygwin (Michael Abshoff, William Stein)

William Stein and Michael Abshoff fixed many issues to build Sage on Cygwin and Michael Abshoff did also fix many 64 bit issues on OSX. Neither one of those ports is "ready for prime time" yet, but we are making steady progress so that hopefully Sage will be fully supported on Cygwin again and also work on OSX in 64 bit mode.

Posets and Semi-Lattices (Peter Jipsen and Franco Saliola)

Sage now includes basic support for finite posets and semi-lattices. There are several ways to define a finite poset.

  1. A tuple of elements and cover relations:
sage: Poset(([1,2,3,4,5,6,7],[[1,2],[3,4],[4,5],[2,5]]))
Finite poset containing 7 elements
  1. Alternatively, using the cover_relations=False keyword, the relations need not be cover relations (and they will be computed).
sage: elms = [1,2,3,4]
sage: rels = [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
sage: P = Poset( (elms,rels) ,cover_relations=False); P
Finite poset containing 4 elements
sage: P.cover_relations()
[[1, 2], [2, 3], [3, 4]]
  1. A list or dictionary of upper covers:
sage: Poset({'a':['b','c'], 'b':['d'], 'c':['d'], 'd':[]})
Finite poset containing 4 elements
sage: Poset([[1,2],[4],[3],[4],[]])
Finite poset containing 5 elements    
  1. An acyclic directory graph:
sage: dag = DiGraph({0:[2,3], 1:[3,4], 2:[5], 3:[5], 4:[5]})
sage: Poset(dag)
Finite poset containing 6 elements

Once a poset has been created, several methods are available:

sage: dag = DiGraph({0:[2,3], 1:[3,4], 2:[5], 3:[5], 4:[5]})
sage: P = Poset(dag)

sage: P.has_bottom()
False
sage: P.has_top()
True
sage: P.top()
5

sage: P.linear_extension()
[1, 4, 0, 2, 3, 5]

sage: P.is_meet_semilattice()
False
sage: P.is_join_semilattice()
True

sage: P.mobius_function_matrix()
[ 1 -1  0  0 -1  1]
[ 0  1  0  0  0 -1]
[ 0  0  1 -1 -1  1]
[ 0  0  0  1  0 -1]
[ 0  0  0  0  1 -1]
[ 0  0  0  0  0  1]

sage: type(P(5))
<class 'sage.combinat.posets.elements.PosetElement'>
sage: P(5) < P(1)
False
sage: P(1) < P(5)
True

sage: x = P(4)
sage: [v for v in P if v <= x] 
[1, 4]

sage: P.show()

Frobby for monomial ideals (Bjarke Hammersholt Roune)

Frobby is software for computations with monomial ideals, and is included in Sage 3.0.2 as an optional spkg. The current functionality of the Sage interface to Frobby is irreducible decomposition of monomial ideals, while work is on-going to expose more of the capabilities of Frobby, such as Hilbert-Poincare series, primary decomposition and Alexander dual. Frobby is orders of magnitude faster than other programs for many of its computations, primarily owing to an optimized implementation of the Slice Algorithm. See http://www.broune.com/frobby/ for more on Frobby.

Self-orthogonal Binary Codes (Robert Miller)

Based on a part of the Supersymmetry project described in the SCREMS grant proposal, this is an implementation of the method of canonical augmentation on self-orthogonal binary linear error-correcting codes of length up to 32 (or, with trivial modification, 64). Based on the existing code to do automorphism groups and canonical labels.

Notebook Improvements (William Stein, Tom Boothby)

Tom Boothby and William Stein spent a long day just systematically fixing numerous bugs in the Sage notebook. This should improve the overall quality of the notebook and make future development easier.

Full Changelog: 3.0.1...3.0.2

3.0.1

16 Aug 23:53
Compare
Choose a tag to compare

Release Tour

Sage 3.0.1 was released on May 4th, 2008 (changelog); 75 tickets (PRs) merged, 24 contributors. For the official, comprehensive release notes, see the HISTORY.txt file that comes with the release.

PBuild (Gary Furnish)

PBuild is the new parallel build system for the Sage library that is experimentally available in 3.0.1. To turn it on, do export SAGE_PBUILD=yes and optionally export SAGE_BUILD_THREADS=numthreads, where numthreads is the number of threads to work with. PBuild does not currently work correctly with all of DSage (Bug #3097, to be fixed in 3.0.2). PBuild will be replacing the standard non-parallel build system as soon as possible. Please report any bugs encountered.

Convex Hulls And Polyhedral Functions Improvements (Marshall Hampton)

This fixed a number of problems in the sage-native polyhedral code (that only uses cddlib), mainly with unbounded polytopes, and improved 3D plotting of polytopes (for example, in the gfan interface). There are probably still some issues lurking with this code as its still pretty new and untested. In the near future, major design decisions should be made on how polytopes will be handled in Sage: more Sage-native code or better coordination with Polymake and other external packages (LattE, 4ti2, lrs, etc) (or both)?

Lattice Polytope Update (Andrey Novoseltsev)

This update includes: change in the behavior of LatticePolytope constructor, now compute_vertices=True by default; ReflexivePolytope(s) - databases of all (representatives of GL(Z)-orbits of) reflexive polytopes in 2 and 3 dimensions with some precomputed data; LatticePolytope.index - search in the above databases for the representative of the GL(Z)-orbit of the given polytope; LatticePolytope.plot3d - 3D-plotting for 3-dimensional polytopes; convex_hull and minkowski_sum - without the requirement for points to span the ambient space, which LatticePolytope has; NEFPartition.dual - computing the dual NEF-partition; minor improvements to other functions and documentation, shortcuts like LatticePolytope.vertex.

zeta_function Method for Schemes (Kiran Kedlaya)

For C a scheme over GF(p) for p prime, C.zeta_series(n, t) will return the first n terms of the power series expansion of the zeta function of C, expressed as a power series in the variable t. This is a completely generic algorithm, and thus will be extremely slow for p or n large; we expect later to override this for specific classes of schemes (e.g., hyperelliptic curves). Also, we expect to support schemes over GF(q) once an improved coercion system is stably in place.

More Debianization (Tim Abbott)

The Debian packages for SAGE work again for the first time since SAGE 2.10.4. The process for building Debian packages from the SAGE sources is now almost completely automated, and the quality of the Debian packaging has improved substantially, which should help the Debian packaging track the SAGE releases. The Debian package distribution is approaching a viable installation option. Many of the packages are also ready to be included in the main Debian archive; work has begun on moving those that are to Debian upstream and on writing patches implementing shared library versioning for those spkgs that need it.

Default Mode for Notebook no longer uses SSL (William Stein)

William Stein rewrote the notebook(...) command so that by default on localhost it does not use SSL. This should resolve many problems people have been having when using the notebook, but will not compromise security. This could cause some confusion though, so people should report any problems, since this is a significant change.

Full Changelog: 3.0...3.0.1

3.0

16 Aug 23:51
Compare
Choose a tag to compare
3.0

Release Tour

Sage 3.0 was released on April 21st, 2008 (changelog), 277 tickets (PRs) merged, 48 contributors. For the official, comprehensive release notes, see the HISTORY.txt file that comes with the release.

Random Numbers

Sage has a new random number framwork (by Carl Witty) with a global random number state, so that results using pseudo-random numbers can be reproducible. Randomized doctests are now actually tested, instead of having their results ignored. Use set_random_seed(n) to set a new random number seed, and initial_seed() to find the most recently set seed (or the seed set at Sage startup, if no new seed has been set). For much more information on the new random number framework, type sage.misc.randstate?.

GCC 4.3 Support

Sage 3.0 has full GCC 4.3 support, which means that every included package was fixed to compile with GCC 4.3 and the changes were pushed upstream.

New Default Binaries

  • RedHat Enterprise Linux 5/Itanium
  • Ubuntu 6.06 Long Term Support
  • Arch Linux

Boolean Polynomials

The PolyBoRi library was updated to version 0.3.1 leading to greater stability and better performance. The interface to PolyBoRi was also improved and the documentation updated. Also the conversion to/from PolyBoRi, Singular and Magma was greatly improved.

Example Usage:

sage: sr = mq.SR(1,1,1,4,gf2=True) # create a small scale AES system
sage: F,s = sr.polynomial_system()
sage: P = F.ring() # polynomial ring
sage: B = BooleanPolynomialRing(P.ngens(),P.variable_names(),order='lex') # quotient ring
sage: IB = Ideal([B(f) for f in F]) # create ideal
sage: IM = IB._magma_() # convert to Magma
sage: IS = IB._singular_() # convert to Singular
sage: gb = IS.groebner() 
sage: P.change_ring(order='lex') == B.cover_ring()
True

Modular Abelian Varieties

Sage now has support for computing with modular abelian varieties, including computing endomorphism rings, intersections, kernels of morphisms, etc., with complete documentation.

sage: J = J0(389)
sage: D = J.decomposition()
sage: D
[
Simple abelian subvariety 389a(1,389) of dimension 1 of J0(389),
Simple abelian subvariety 389b(1,389) of dimension 2 of J0(389),
Simple abelian subvariety 389c(1,389) of dimension 3 of J0(389),
Simple abelian subvariety 389d(1,389) of dimension 6 of J0(389),
Simple abelian subvariety 389e(1,389) of dimension 20 of J0(389)
]
sage: G, _ = D[4].intersection(D[0] + D[1] + D[2] + D[3])
sage: G
Finite subgroup with invariants [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 40, 40] over QQ of Simple abelian subvariety 389e(1,389) of dimension 20 of J0(389)

Increased Doctest Coverage

We dramatically increased our automated testing and example suite so that 51.5 % of functions have autotested examples. There are now nearly 60,000 lines of input examples. In February our testing was in the 30% range. This was a huge amount of work by many many Sage developers, and it has the practical impact that when you type foo? it is nearly twice as likely that you'll see a helpful example.

$ cd devel/sage/sage
$ ../../../sage -coverage .
...
Overall weighted coverage score:  51.5%
Total number of functions:  19514

R Pexpect Interface

There is now a new interface to R that uses a pseudotty; this is a completely different alternative to rpy, which makes it possible for the web-based Sage notebook to work as an R GUI, and also makes it so any R command can be used from Sage 100% exactly as in R. It is still clunky and has numerous issues, but it is fairly usable, documented, and has a test suite.

Crystals

FIXME

Laurent Polynomials

FIXME

Full Changelog: 2.11...3.0

2.11

16 Aug 23:43
Compare
Choose a tag to compare

Release Tour

Sage 2.11 was released on March 30, 2008. For the official, comprehensive release notes, see the HISTORY.txt file that comes with the release. For the latest changes see sage-2.11.txt.

ATLAS

Michael Abshoff and Burcin Erocal upgraded ATLAS to the 3.8.1 release. In addition tuning info for 32 bit Prescott CPUs as well as Powerbook G4s under Linux was added.

zn_poly

David Harvey's zn_poly library is now a standard package for Sage. zn_poly is a new C library for polynomial arithmetic in $(Z/nZ)[x]$ where $3 \le n \le ULONG_MAX$ (i.e. any machine-word-sized modulus). The main benefit is speed. Three examples on sage.math, from my current development code (this code is not yet in the spkg):

  • Multiplying length $200$ polynomials over $Z/nZ$ where n has 10 bits:
    * NTL (zz_pX): 113 µs
    * Magma: 44 µs
    * zn_poly: 13 µs
  • Multiplying length $10^6$ polynomials over $Z/nZ$ where n has 40 bits and is odd:
    * NTL (zz_pX): 9.1s
    * Magma: 8.3s
    * zn_poly: 2.06s
  • Reciprocal of a length $10^6$ power series over $Z/nZ$ where n has 40 bits and is odd:
    * NTL (zz_pX): 25.4s
    * Magma: ludicrously slow, maybe I'm doing something wrong
    * zn_poly: 3.62s
    The library is used so far only to compute the zeta function for hyperelliptic curves.

small roots method for polynomials mod N (N composite)

Coppersmith's method for finding small roots of univariate polynomials modulo $N$ where $N$ is composite was implemented. An application of this method is to consider RSA. We are using 512-bit RSA with public exponent $e=3$ to encrypt a 56-bit DES key. Because it would be easy to attack this setting if no padding was used we pad the key $K$ with 1s to get a large number.

sage: Nbits, Kbits = 512, 56
sage: e = 3

We choose two primes of size 256-bit each.

sage: p = 2^256 + 2^8 + 2^5 + 2^3 + 1
sage: q = 2^256 + 2^8 + 2^5 + 2^3 + 2^2 + 1
sage: N = p*q
sage: ZmodN = Zmod( N )

We choose a random key

sage: K = ZZ.random_element(0, 2^Kbits)

and pad it with $512-56=456$ $1$s

sage: Kdigits = K.digits()
sage: M = [0]*Kbits + [1]*(Nbits-Kbits)
sage: for i in range(len(Kdigits)): M[i] = Kdigits[i]
sage: M = ZZ(M, 2)

Now we encrypt the resulting message:

sage: C = ZmodN(M)^e

To recover $K$ we consider the following polynomial modulo $N$:

sage: P.<x> = PolynomialRing(ZmodN)
sage: f = (2^Nbits - 2^Kbits + x)^e - C

and recover its small roots:

sage: Kbar = f.small_roots()[0]
sage: K == Kbar
True

Generic Multivariate Polynomial Arithmetic

Joel Mohler improved the efficiency of the generic multivariate polynomial arithmetic in Sage. Before his patch was applied:

sage: R.<x,y,z,a,b>=ZZ[]
sage: f=prod([2*g^2-4*g+8 for g in R.gens()])
sage: %time _=f*f
CPU times: user 2.23 s, sys: 0.00 s, total: 2.23 s
Wall time: 2.24

and after:

sage: R.<x,y,z,a,b>=ZZ[]
sage: f=prod([2*g^2-4*g+8 for g in R.gens()])
sage: %time _=f*f
CPU times: user 0.22 s, sys: 0.00 s, total: 0.22 s
Wall time: 0.22

k-Schur Functions and Non-symmetric Macdonald Polynomials

$k$-Schur functions $s_\lambda^{(k)}$ are a relatively new family of symmetric functions which play a role in $\mathbb{Z}[h_1, \ldots, h_k]$ as the Schur functions $s_\lambda$ do in $\Lambda$. The $k$-Schur functions, amongst other things, provide a natural basis for the quantum cohomology of the Grassmannian. The $k$-Schur functions can be used like any other symmetric functions and are created with kSchurFunctions.

sage: ks3 = kSchurFunctions(QQ,3); ks3
k-Schur Functions at level 3 over Univariate Polynomial Ring in t over Rational Field
sage: s(ks3([3,2,1]))
s[3, 2, 1] + t*s[4, 1, 1] + t*s[4, 2] + t^2*s[5, 1]

Non-symmetric Macdonald polynomials in type A can now be accessed in Sage. The polynomials are computed from the main theorem in "A Combinatorial Formula for the Non-symmetric Macdonald Polynomials" by Haglund, Haiman, and Loehr. ( http://arxiv.org/abs/math.CO/0601693 )

sage: from sage.combinat.sf.ns_macdonald import E
sage: E([0,1,0])
((-t + 1)/(-q*t^2 + 1))*x0 + x1
sage: E([1,1,0])
x0*x1

Improved capabilities for solving matrix equations

William Stein implemented code so that one can now solve matrix equations $AX = B$ and $XA=B$ whenever a solution exists. In particular, solving linear equations now works even if $A$ is singular or nonsquare.

sage: A = matrix(QQ,2,3, [1,2,3,2,4,6]); v = vector([-1/2,-1])
sage: x = A \ v; x
(-1/2, 0, 0)
sage: A*x == v
True

Generators for congruence subgroups

Robert Miller implemented an algorithm for very quickly computing generators for congruence subgroups $\Gamma_0(N)$, $\Gamma_1(N)$, and $\Gamma_H(N)$.

sage: Gamma0(11).generators()
[[1 1]
[0 1],
 [-1  0]
[ 0 -1],
...
 [10 -1]
[11 -1],
 [-10   1]
[-11   1]]
sage: time G = Gamma0(389).generators()
CPU times: user 0.03 s, sys: 0.01 s, total: 0.04 s
Wall time: 0.04
sage: time G = Gamma0(997).generators()
CPU times: user 0.14 s, sys: 0.00 s, total: 0.14 s
Wall time: 0.14
sage: time G = Gamma0(2008).generators()
CPU times: user 0.82 s, sys: 0.00 s, total: 0.82 s
Wall time: 0.82
sage: len(G)
3051  

gfan-0.3 upgrade, improved interface

@interact
def gfan_browse(p1 = input_box('x^3+y^2',type = str, label='polynomial 1: '), p2 = input_box('y^3+z^2',type = str, label='polynomial 2: '), p3 = input_box('z^3+x^2',type = str, label='polynomial 3: ')):
    R.<x,y,z> = PolynomialRing(QQ,3)
    i1 = ideal(R(p1),R(p2),R(p3))
    gf1 = i1.groebner_fan()
    testr = gf1.render()
    html('Groebner fan of the ideal generated by: ' + str(p1) + ', ' + str(p2) + ', ' + str(p3))
    show(testr, axes = False, figsize=[8,8*(3^(.5))/2])

gfan_1b

Bugfixes/Upgrades (incomplete)

  • misc:
    * #2148 PolyBoRi monomial orders are wrong
    * #2437 Update eclib.spkg to eclib-20080304
    * #2468 inverting a non-invertible matrix over RDF returns weird results
    * #2517 ignore bad values in plot
    * #2545 FractionFieldElement lacks derivative method
    * #2566 fix all known bugs in graph_isom and binary_code
    * #2571 problem with copy() on sage.rings.integer_mod.IntegerMod_gmp
    * #2574 problem with Abelian groups and trivial elements
    * #2576 preserve docstrings of decorated methods in multi_polynomial_ideal.py
    * #2579 Inconsistency in integer quotient
    * #2581 extend solve_right to all cases; implement solve_left
    * #2582 fix bug in PermutationGroupElement
    * #2585 padic bugfix - check=False in constructor
    * #2587 subgroup of a permutation group is so slow it's silly
    * #2588 documentation and tests for sage.schemes.hyperelliptic_curves.jacobian_morphism
    * #2593 Sage chokes on utf-8 in .sage files
    * #2594 MPolynomial_polydict floordiv wrong arithmetic fixed
    * #2602 plot_vector_field docs are unnecessarily complicated (and use the slow lambda functions!)
    * #2584 printing bug with list_function()

Full Changelog: 2.10.3...2.11