- major improvements and additions:
- A new option Certification for newPackage, provides information about packages that have been accepted for publication in a refereed journal. The information is displayed in the top documentation node of the package. The first three packages so certified are EdgeIdeals , PieriMaps , and Polyhedra .
- New packages OpenMath and SCSCP for communicating via SCSCP with OpenMath to programs such as GAP and Maple have been developed, thanks to Dan Roozemond. They depend on the new package XML, which uses the
`libxml2`library to parse`XML`code. - The programs 4ti2, gfan, and normaliz are now included with
*Macaulay2*binary distributions, and are compiled automatically during Macaulay2's build process, with automatic downloading available as an option. This makes the packages FourTiTwo, gfanInterface, Normaliz, and StatePolytope, each of which uses one or more of them, more readily usable. - packages newly included:
- ConvexInterface -- Interface to the Maple package Convex.
- MapleInterface -- Interface to Maple.
- OpenMath -- OpenMath support
- Posets -- a package for working with partially ordered sets
- RationalPoints -- Find the rational points of an affine variety defined over a finite field
- SCSCP -- SCSCP (Symbolic Computation Software Composability Protocol) support
- SRdeformations -- Deformations of Stanley-Reisner rings and related computations.
- XML -- an XML parser

- Improved handling of finite fields: GF now uses Conway polynomials when possible. Maps between Galois fields made with them are now easy to produce with
`map(E,F)`. (This was advertised as a change to 1.2, when the package was introduced, but the package was not pre-loaded, whereas now it is.). - Fixed a long-standing bug in saturate that caused it to give incorrect answers (too small) in the case that the following three conditions all held: the ring has a non-standard monomial ordering, such as a weight vector; all variables had degree 1; and the degree of the element being used to saturate was equal to 1.
- The function toField has been changed so that the expression
`F = toField A`returns a new ring`F`isomorphic to`A`and declares it to be field, whereas formerly`A`was declared to be a field, without creating a new ring. Users of this function should check their code and ensure that the return value`F`is used. The return value is a polynomial ring of no variables over A, with a new monomial ordering, and with degree length equal to 0. The advantage is that now various computations in polynomial rings over the newly declared field will provide correct answers. - Fixed a bug in degree(x,f) where the degrees of the grading were used instead of the actual exponents.
- Fixed a bug in read reported by Dan Roozemond: whenever it would return a string of length 4096, subsequent read operations would change the bytes in it.
- The package IntegralClosure has been rewritten. The ring used as input for integralClosure must be a domain, but the documentation describes how to get around this. The function now provides correct output when it finishes, and it can handle much larger input than before. There are some new routines and some new strategies for the computation.
- A bug in Gröbner bases over the integers was fixed, which, under certain situations, led to in incomplete Gröbner basis.
- A bug in Gröbner bases over fields and the integers was fixed, which caused, under some situations, the list of "trimmed" generators to be incomplete (but the Gröbner basis itself was correct). This impacted functions which use trim, especially decompose.
- The function eliminate has been fixed. The function previously quietly assumed a flat polynomial ring, with no quotient elements, and also quietly assumed that the ring was commutative. Now error messages are given when it would have produced incorrect answers, and it handles Weyl and skew commutative poly rings correctly. Addtionally, this function now uses an elimination order rather than a product order, improving performance in many cases.
- Fixed a a bug in independentSets, which produced incorrect answers on the cygwin version. A variable was not being initialized. Thanks to B. Roune for reporting the bug and suggesting the fix.
- A bug in decompose was unearthed that could produce incorrect answers. The problem was that trim sometimes could produce incorrect answers (fixed).
- Fixed a bug where if the degrees of the variables in a ring were not all equal to 1, and weight vectors were present, then the monomial ordering was not the documented one.
- Fixed a bug in minimalPresentation of an Ideal or Ring, which would produce incorrect answers in rare situations.

- functionality added or improved:
- The method function minimalPresentation(Ring) now allows an option, Exclude, which takes a list of integers: the variables with these indices will not be eliminated. Indices are used, because if the ring is a quotient by linear polynomials, then variables might have normal forms that are complicated polynomials.
- The function installPackage will now, when the option
`AbsoluteLinks`is set to true, will now also search the installation prefix where the package is about to be installed for the files that are linked to. This should resolve the situation where a developer uses the function to modify a package that is already incorporated into*Macaulay2*itself, and (some of) the links in the freshly installed package end up pointing to the wrong web pages. - The expression
`setRandomSeed()`can now be used to re-initialize the random number generator; see setRandomSeed. - The operator .. can now be used to generate sequences of consecutive strings.
- A new binary operator ..< provides for the generation of sequences that stop one short of those provided by .. .
- The operator .., will now deliver rectangular sequences of consecutive indexed variables, e.g.,
`x_1 .. y_2`will have the value`(x_1,x_2,y_1,y_2)`. - A new variable, handleInterrupts, specifies whether Macaulay2's interrupt handlers for SIGINT and SIGALRM are installed.
- The function EXAMPLE will now accept objects of type PRE to be interpreted as preformatted example output.
- The function openListener can now open a socket on a specified interface.
- The function doc will now handle example input expressions that span multiple lines: within in each expression, indent lines after the first one more than the first.
- Multiplication of a scalar and a mutable matrix is now not allowed. Previously attempting this could cause
*Macaulay2*to crash. - Very long lists can now be parsed without overflowing the stack and causing the program to crash. This was a problem for MacOS with lists of length greater than about 90000. In a future version we plan to reduce the amount of memory required to parse, translate, and then evaluate the list.

- functionality changed:
- The CTRL-C interrupt signal SIGINT will now interrupt system calls (such as read and write) that are in progress; formerly, they were restarted by the kernel after the handler set a flag. This necessitated reworking the handling of interrupts by the top level interpreter, which will now respond to them immediately. When the readline library is active and reading user input (such as when the emacs interface to Macaulay2 is not used), interrupts are handled just by it.
- currentDirectory is now a function rather than a string constant, in order to postpone signalling an error if a component of the path to the current working directory no longer exists.
- When the program starts, the random number seed is now initialized to a value that depends on the date, time in seconds, and the process id. The former initial state can be obtained with
`setRandomSeed()`. - The function realpath now returns a string ending in '/' if the path leads to a directory, for consistency with the convention elsewhere in Macaulay2 that directory names end in '/'.
- The UserMode option to installPackage and check now has default value null, meaning to propagate the command line option
`-q`, if present, to child processes running M2 on examples and tests - If you set the variable gbTrace to 15, then now one sees a large amount of information about the S-pairs computed during a Gröbner basis computation, if the default algorithm is in use.
- The initialization file
`init.m2`is now sought only in the user's application directory, and not also in the current directory.

- new constants and operators: