Skip to content

Releases: sagemath/sage

4.4.2

17 Aug 00:24
Compare
Choose a tag to compare

Sage 4.4.2 (released May 19, 2010; changelog)

65 tickets (PRs) merged, 44 contributors

Full Changelog: 4.4.1...4.4.2

4.4.1

17 Aug 00:23
Compare
Choose a tag to compare

Sage 4.4.1 (released May 2, 2010; changelog)

55 tickets (PRs) merged, 50 contributors

Full Changelog: 4.4...4.4.1

4.4

17 Aug 00:22
Compare
Choose a tag to compare
4.4

Sage 4.4 (released Apr 25, 2010; changelog)

132 tickets (PRs) merged, 63 contributors

Full Changelog: 4.3.5...4.4

4.3.5

17 Aug 00:22
Compare
Choose a tag to compare

Sage 4.3.5 (released Mar 28, 2010; changelog)

3 tickets (PRs) merged, 6 contributors

Full Changelog: 4.3.4...4.3.5

4.3.4

17 Aug 00:21
Compare
Choose a tag to compare

Sage 4.3.4 (released Mar 19, 2010; changelog)

120 tickets (PRs) merged, 55 contributors

Full Changelog: 4.3.3...4.3.4

4.3.3

17 Aug 00:20
Compare
Choose a tag to compare

Sage 4.3.3 (released Feb 21, 2010; changelog)

131 tickets (PRs) merged, 54 contributors

Full Changelog: 4.3.2...4.3.3

4.3.2

17 Aug 00:20
Compare
Choose a tag to compare

Release Tour

Sage 4.3.2 was released on Feb 6, 2010 (changelog), 126 tickets (PRs) merged, 41 contributors.

Major features

  • much improved interface to Singular which makes using any Singular function much more efficient and easy (cf. Libraries section below)

Libraries

  • much improved interface to Singular which makes using any Singular function much more efficient and easy #7939
sage: P.<x,y,z> = QQ[];
sage: A = Matrix(ZZ,[[1,1,0],[0,1,1]])
sage: toric_ideal = sage.libs.singular.ff.toric__lib.toric_ideal # we load the function
sage: toric_ideal(A,"du") # the integer matrix does not tell us which ring we want
Traceback (most recent call last)
...
ValueError: Could not detect ring.

sage: toric_ideal(A,"du",ring=P) # so we try again
[x*z - y]

Geometry

  • a major refactoring of the Polyhedron class fixed many bugs, added new functionality, and created a cleaner structure that should make future improvements much easier.

Full Changelog: 4.3.1...4.3.2

4.3.1

17 Aug 00:19
Compare
Choose a tag to compare

Release Tour

Sage 4.3.1 was released on Jan 20, 2010 (changelog), 193 tickets (PRs) merged, 55 contributors.

Major features

  • Substantial work towards a complete SPARC Solaris 10 port. This is due to the hard work of David Kirkby. The relevant tickets include #6595, #7067, #7138, #7162, #7387, #7505, #7781, #7815, #7817, #7849
  • We're moving closer towards a FreeBSD port, thanks to the work of Peter Jeremy at ticket #7825.

Algebra

  • Chinese Remainder Theorem for polynomials #7595 (Robert Miller) -- An implementation of the Chinese Remainder Theorem is needed for general descents on elliptic curves. Here are some examples for polynomial rings:
sage: K.<a> = NumberField(x^3 - 7)
sage: R.<y> = K[]
sage: f = y^2 + 3
sage: g = y^3 - 5
sage: CRT(1,3,f,g)
-3/26*y^4 + 5/26*y^3 + 15/26*y + 53/26
sage: CRT(1,a,f,g)
(-3/52*a + 3/52)*y^4 + (5/52*a - 5/52)*y^3 + (15/52*a - 15/52)*y + 27/52*a + 25/52
 

This also works for any number of moduli:

sage: K.<a> = NumberField(x^3 - 7)
sage: R.<x> = K[]
sage: CRT([], [])
0
sage: CRT([a], [x])
a
sage: f = x^2 + 3
sage: g = x^3 - 5
sage: h = x^5 + x^2 - 9
sage: k = CRT([1, a, 3], [f, g, h]); k
(127/26988*a - 5807/386828)*x^9 + (45/8996*a - 33677/1160484)*x^8 + (2/173*a - 6/173)*x^7 + (133/6747*a - 5373/96707)*x^6 + (-6/2249*a + 18584/290121)*x^5 + (-277/8996*a + 38847/386828)*x^4 + (-135/4498*a + 42673/193414)*x^3 + (-1005/8996*a + 470245/1160484)*x^2 + (-1215/8996*a + 141165/386828)*x + 621/8996*a + 836445/386828
sage: k.mod(f)
1
sage: k.mod(g)
a
sage: k.mod(h)
3
 

Basic arithmetic

  • Implement conjugate() for RealDoubleElement #7834 (Dag Sverre Seljebotn) --- New method conjugate() in the class RealDoubleElement of the module sage/rings/real_double.pyx for returning the complex conjugate of a real number. This is consistent with conjugate() methods in ZZ and RR. For example, ```txt
    sage: ZZ(5).conjugate()
    5
    sage: RR(5).conjugate()
    5.00000000000000
    sage: RDF(5).conjugate()
    5.0
* Improvements to complex arithmetic-geometric mean for real and complex double fields  <a class="http" href="http://trac.sagemath.org/sage_trac/ticket/7739">#7739</a> (Robert Bradshaw, John Cremona) --- Adds an `algorithm` option to the method `agm()` for complex numbers. The values of `algorithm` be can: 
   * "pari" --- Call the agm function from the Pari library. 
   * "optimal" --- Use the AGM sequence such that at each stage `(a,b)` is replaced by `(a_1,b_1) = ((a+b)/2,\pm\sqrt{ab})` where the sign is chosen so that `|a_1-b_1| \le |a_1+b_1|`, or equivalently `\Re(b_1/a_1)\ge0`. The resulting limit is maximal among all possible values. 
   * "principal" --- Use the AGM sequence such that at each stage `(a,b)` is replaced by `(a_1,b_1) = ((a+b)/2,\pm\sqrt{ab})` where the sign is chosen so that `\Re(b_1/a_1)\ge0` (the so-called principal branch of the square root). The following examples illustrate that the returned value depends on the algorithm parameter: ```txt
sage: a = CDF(-0.95, -0.65)
sage: b = CDF(0.683, 0.747)
sage: a.agm(b, algorithm="optimal")
-0.371591652352 + 0.319894660207*I
sage: a.agm(b, algorithm="principal")
0.338175462986 - 0.0135326969565*I
sage: a.agm(b, algorithm="pari")
0.080689185076 + 0.239036532686*I
 

The same thing for multiprecision real and complex numbers has also been implemented #7719 and will be in the next release.

  • New decorator coerce_binop #383 (Robert Bradshaw) --- The new decroator coerce_binop can be applied to methods to ensure the arguments have the same parent. For example
@coerce_binop
def quo_rem(self, other):
    ...
 

will guarantee that self and other have the same parent before this method is called.

Combinatorics

  • Weyl group optimizations #7754 (Nicolas M. Thiéry) --- Three major improvements that indirectly also improve efficiency of most Weyl group routines:
    • Faster hash method calling the hash of the underlying matrix (which is set as immutable for that purpose).
    • New __eq__() method.
    • Action on the weight lattice realization: optimization of the matrix multiplication. Some operations are now up to 34% faster than previously:
BEFORE

sage: W = WeylGroup(["F", 4])
sage: W.cardinality()
1152
sage: %time list(W);
CPU times: user 10.51 s, sys: 0.05 s, total: 10.56 s
Wall time: 10.56 s
sage: W = WeylGroup(["E", 8])
sage: %time W.long_element();
CPU times: user 1.47 s, sys: 0.00 s, total: 1.47 s
Wall time: 1.47 s


AFTER

sage: W = WeylGroup(["F", 4])
sage: W.cardinality()
1152
sage: %time list(W);
CPU times: user 6.89 s, sys: 0.04 s, total: 6.93 s
Wall time: 6.93 s
sage: W = WeylGroup(["E", 8])
sage: %time W.long_element();
CPU times: user 1.21 s, sys: 0.00 s, total: 1.21 s
Wall time: 1.21 s
 
  • Implement the Gale Ryser theorem #7301 (Nathann Cohen, David Joyner) --- The Gale Ryser theorem asserts that if p_1, p_2 are two partitions of n of respective lengths k_1, k_2, then there is a binary k_1 \times k_2 matrix M such that p_1 is the vector of row sums and p_2 is the vector of column sums of M, if and only if p_2 dominates p_1. T.S. Michael helped a great deal with the refereeing process. Here are some examples:
sage: from sage.combinat.integer_vector import gale_ryser_theorem
sage: p1 = [4, 2, 2]
sage: p2 = [3, 3, 1, 1]
sage: gale_ryser_theorem(p1, p2)
[1 1 1 1]
[1 1 0 0]
[1 1 0 0]
sage: p1 = [4, 2, 2, 0]
sage: p2 = [3, 3, 1, 1, 0, 0]
sage: gale_ryser_theorem(p1, p2)
[1 1 1 1 0 0]
[1 1 0 0 0 0]
[1 1 0 0 0 0]
[0 0 0 0 0 0]
 
  • Iwahori Hecke algebras on the T basis #7729 (Daniel Bump, Nicolas M. Thiéry) --- Iwahori Hecke algebras are deformations of the group algebras of Coxeter groups, such as Weyl groups (finite or affine). Here are some examples:
sage: R.<q> = PolynomialRing(QQ)
sage: H = IwahoriHeckeAlgebra("A3", q)
sage: [T1, T2, T3] = H.algebra_generators()
sage: T1 * (T2 + T3) * T1
T1*T2*T1 + (q-1)*T3*T1 + q*T3
 
  • Coxeter groups: more Bruhat and weak order features #7753 (Nicolas M. Thiéry, Daniel Bump) --- Four new methods implementing the Bruhat order for Coxeter groups. The method bruhat_le() for Bruhat comparison:
sage: W = WeylGroup(["A", 3])
sage: u = W.from_reduced_word([1, 2, 1])
sage: v = W.from_reduced_word([1, 2, 3, 2, 1])
sage: u.bruhat_le(u)
True
sage: u.bruhat_le(v)
True
sage: v.bruhat_le(u)
False
sage: v.bruhat_le(v)
True
sage: s = W.simple_reflections()
sage: s[1].bruhat_le(W.one())
False
 

The method weak_le() for comparison in weak order:

sage: W = WeylGroup(["A", 3])
sage: u = W.from_reduced_word([1, 2])
sage: v = W.from_reduced_word([1, 2, 3, 2])
sage: u.weak_le(u)
True
sage: u.weak_le(v)
True
sage: v.weak_le(u)
False
sage: v.weak_le(v)
True
 

The method bruhat_poset() returns the Bruhat poset of a Weyl group:

sage: W = WeylGroup(["A", 3])
sage: P = W.bruhat_poset()
sage: u = W.from_reduced_word([3, 1])
sage: v = W.from_reduced_word([3, 2, 1, 2, 3])
sage: P(u) <= P(v)
True
sage: len(P.interval(P(u), P(v)))
10
sage: P.is_join_semilattice()
False
 

The method weak_poset() returns the left (resp. right) poset for weak order:

sage: W = WeylGroup(["A", 2])
sage: P = W.weak_poset(); P
Finite poset containing 6 elements
sage: W = WeylGroup(["B", 3])
sage: P = W.weak_poset(side="left")
sage: P.is_join_semilattice(), P.is_meet_semilattice()
(True, True)
 
  • Interval exchange transformations #7145 (Vincent Delecroix) --- New module for manipulating interval exchange transformations and linear involutions. Here, we create an interval exchange transformation:
sage: T = iet.IntervalExchangeTransformation(('a b','b a'),(sqrt(2),1))
sage: print T
Interval exchange transformation of [0, sqrt(2) + 1[ with permutation
a b
b a
 

It can also be initialized using permutation (group theoretic ones):

sage: p = Permutation([3,2,1])
sage: T = iet.IntervalExchangeTransformation(p, [1/3,2/3,1])
sage: print T
Interval exchange transformation of [0, 2[ with permutation
1 2 3
3 2 1
 

For the manipulation of permutations of IET, there are special types provided by this module. All of them can be constructed using the con...

Read more

4.3

17 Aug 00:18
Compare
Choose a tag to compare
4.3

Sage 4.3 Release Tour

Sage 4.3 was released on Dec 24, 2009 (changelog), 237 tickets (PRs) merged, 63 contributors.

Major features:

  • Improvements in the build system.
  • Major new features in the Sage notebook server.
  • Numerous new features in the combinatorics module.
  • Many improvements in the graph theory module, both the backend implementation and new features.
  • Updates/upgrades to 15 packages.

Algebra

Algebraic Topology

Calculus

Categories

Combinatorics

Commutative Algebra

Documentation

Graph Theory

Group Theory

Linear Algebra

Miscellaneous

Numerical

Packages

Statistics

Symbolics

Full Changelog: 4.2.1...4.3

4.2.1

17 Aug 00:18
Compare
Choose a tag to compare

Sage 4.2.1 (released Nov 14, 2009; changelog)

94 tickets (PRs) merged, 42 contributors

Full Changelog: 4.1.2...4.2.1