changes, 1.2

major improvements and additions:

Improved old documentation and added many new descriptions of functions.

Greatly improved the debugger. In particular, the debugger will put you directly onto the line of the program with an error, and allows the user to execute a given number of steps of the program (see step) and to conveniently display and change values of variables as they evolve.

Improved the making of packages: made it much easier for a user to create a complete package, including documentation.

Improved the handling of symmetric algebras and Rees algebras; improved implementation of things like analytic spread.

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). (Note: actually, the user must load the package manually.)

The function hilbertFunction is now faster at computing power series expansions.

Homomorphisms (maps) of modules over different rings with respect to a ring homomorphism between them are now supported. Composition, coimage (replacing pushForward1), and kernel work. An option has been added to basis to ask it to return such a homomorphism. See map(Module,Module,RingMap,Matrix), map(Module,Nothing,RingMap,Matrix), and map(Module,RingMap).

The total Ext functor now accepts multigraded modules, see Ext(Module,Module).

Macaulay2 now incorporates PARI, a free library for computing in number theory. It is used by factor(ZZ), factor(QQ), isPseudoprime(ZZ), and isPrime(ZZ).

new packages, included:

BGG  BernsteinGel'fandGel'fand correspondence

BoijSoederberg  Betti diagram routines

Bruns  produces an ideal with three generators whose 2nd syzygy module is isomorphic to a given module

ConwayPolynomials  database of Conway polynomials for use with GF

EdgeIdeals  A package for working with the edge ideals of (hyper)graphs

FourTiTwo  Interface for 4ti2

gfanInterface  a Macaulay2 interface to gfan

LocalRings  Localizations of polynomial rings at prime ideals

Polyhedra  for computations with convex polyhedra, cones, and fans

Polymake  a package for interfacing with polymake

SimpleDoc  simpler documentation for functions and methods

StatePolytope  computes state polytopes of ideals

SymmetricPolynomials  the algebra of symmetric polynomials

Text  documentation and hypertext

downloadable packages:

Kronecker, Kronecker normal form of a matrix pencil, by Edward Carter

LDL, the LDL' factorization of a positive semidefinite matrix, by Helfried Peyrl

improved packages:

new functions:

new methods for old functions:

all(ZZ,Function)  whether all elements of a list satisfy a specified condition

any(ZZ,Function)  whether any elements of a list satisfy a specified condition

degreesMonoid(List)  the ring or monoid of degrees

degreesRing(Monoid)  the ring or monoid of degrees

degreesRing(List)  the ring or monoid of degrees

export(String)  export symbols from a package

findFiles(List)  find files recursively

flattenRing(Ideal)  write a ring as a (quotient of a) polynomial ring

gcd(RingElement,ZZ)  greatest common divisor

gcd(ZZ,RingElement)  greatest common divisor

indices(Matrix)  indices of variables occurring in a polynomial

map(Module,Module,RingMap,Matrix)  homomorphism of modules over different rings

map(Module,Nothing,RingMap,Matrix)  homomorphism of modules over different rings

map(Module,RingMap)  homomorphism of modules over different rings

map(Module,ZZ,ZZ)  construct the map induced by multiplication by a ring element on the generators

max(GradedModule)

min(GradedModule)

part(InfiniteNumber,InfiniteNumber,VisibleList,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(InfiniteNumber,InfiniteNumber,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(InfiniteNumber,ZZ,VisibleList,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(InfiniteNumber,ZZ,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(Nothing,Nothing,VisibleList,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(Nothing,Nothing,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(Nothing,ZZ,VisibleList,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(Nothing,ZZ,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(ZZ,InfiniteNumber,VisibleList,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(ZZ,InfiniteNumber,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(ZZ,VisibleList,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(ZZ,Nothing,VisibleList,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(ZZ,Nothing,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(ZZ,ZZ,VisibleList,RingElement)  select terms of a polynomial by degree(s) or weight(s)

part(ZZ,ZZ,RingElement)  select terms of a polynomial by degree(s) or weight(s)

quotientRemainder(Number,RingElement)  quotient and remainder

quotientRemainder(RingElement,Number)  quotient and remainder

quotientRemainder(RingElement,RingElement)  quotient and remainder

scanLines(Function,List)  apply a function to each line of a file

support(Matrix)  list of variables occurring in a polynomial or matrix

Sequence < Thing  assignment with left side evaluated

Number _ Ring  promote to another ring

GradedModuleMap  GradedModuleMap  a binary operator, often used for horizontal concatenation

symmetricAlgebra(Matrix)  the symmetric algebra of a module

symmetricAlgebra(Nothing,Nothing,Matrix)  the symmetric algebra of a module

symmetricAlgebra(Nothing,Ring,Matrix)  the symmetric algebra of a module

symmetricAlgebra(Ring,Nothing,Matrix)  the symmetric algebra of a module

symmetricAlgebra(Ring,Ring,Matrix)  the symmetric algebra of a module

Number ^ Ring  lift to another ring

Number ^ RingFamily  lift to another ring

new variables:

new symbols:

new optional arguments to functions:

GF(...,SizeLimit=>...)  make a finite field

basis(...,SourceRing=>...)  basis or generating set of all or part of a ring, ideal or module

check(...,UserMode=>...)  perform tests of a package

fillMatrix(...,Height=>...)  fill a mutable matrix with random numbers

flattenRing(...,Result=>...)  optionally specify which output(s) to return (see Description for details)

hilbertSeries(...,Reduce=>...)  reduce the Hilbert series

installPackage(...,CacheExampleOutput=>...)  load and install a package and its documentation

installPackage(...,RunExamples=>...)  load and install a package and its documentation

installPackage(...,SeparateExec=>...)  load and install a package and its documentation

installPackage(...,UserMode=>...)  load and install a package and its documentation

installPackage(...,Verbose=>...)  load and install a package and its documentation

lift(...,Verify=>...)  lift to another ring

map(...,DegreeLift=>...)  make a ring map

monoid(...,DegreeLift=>...)  specify maps between degree groups

monoid(...,Join=>...)  specify how to handle degrees in the coefficient ring

newPackage(...,CacheExampleOutput=>...)  the preamble of a package

newRing(...,DegreeLift=>...)  make a copy of a ring, with some features changed

newRing(...,DegreeMap=>...)  make a copy of a ring, with some features changed

newRing(...,Join=>...)  make a copy of a ring, with some features changed

symmetricAlgebra(...,DegreeLift=>...)  the symmetric algebra of a module

symmetricAlgebra(...,DegreeMap=>...)  the symmetric algebra of a module

symmetricAlgebra(...,Join=>...)  the symmetric algebra of a module

tensor(Monoid,Monoid,DegreeLift=>...)  tensor product of monoids

tensor(Monoid,Monoid,DegreeMap=>...)  tensor product of monoids

tensor(Monoid,Monoid,Join=>...)  tensor product of monoids

functionality removed or changed:

Comparison of rings and ring maps with == is no longer supported. Old code can be fixed by changing the comparison operator to ===.

The variable randomHeight has been removed, replaced by fillMatrix(...,Height=>...) and random(...,Height=>...).

The function betti now uses the dot product of the heft vector of the ring with the (multi)degrees of the basis elements in a chain complex in its display. See heft vectors.

The behavior of return in the debugger has changed: it now stops in the debugger at the next available opportunity.

The function minors has been altered so the ideal of n by n minors that it provides for negative values of n is the unit ideal.

The optional argument to monoid and to polynomial ring creation named ConstantCoefficients has been removed. Specifying ConstantCoefficients=>false can be accomplished by specifying Join=>false. See Join.

functionality added or improved:

Filenames starting with ~/ will have the tilde replaced by the home directory.

The D language, in which the Macaulay2 interpreter is written, is now typesafe

During compilation of Macaulay2, as much of the computation as possible is now done to satisfy the maketarget all, with the resulting files placed in a staging area, ready for quickly satisfying the maketarget install.

During compilation of Macaulay2, it is now possible to keep the architecture independent files in a separate directory tree, saving time if versions for multiple architectures are to be built. Including those files in a source tar file will allow the distribution of a fat source tar file, speeding up compilation.

Pressing the RET key in the Macaulay2 interaction buffer on a line containing a source file name and line number will open up the source file at that position in a new buffer. This allows error messages to be treated with dispatch.

The behavior of setup has changed, in that the commands that set the paths are now placed in separate files in the home directory of the user, and those files are sourced only if they are present. That enables the user to continue to share the usual init files on multiple machines, even though Macaulay2 may be installed in various different locations.

A new division algorithm has been implemented in rings with monomials less than 1, e.g., where the monomials can involve negative exponents, and hence do not form a wellordered set. See division in polynomial rings with monomials less than 1.

A bug in irreducibleCharacteristicSeries, upon with minimalPrimes depends, was fixed. Now the new ring supporting the characteristic series will have variables with the same names and degrees, but the ordering of the variables and the monomial ordering will be different. This ensures that homogeneity will be preserved. Also, for convenience, the routine now returns a sequence, instead of a list, suitable for immediate parallel assignment.

The function part has been altered so that for multigraded rings, it does not use the first component of the degree vector. New functionality has been added, and the method for part(Sequence,RingElement) has been removed.

Heft vectors are now automatically computed, see heft vectors. Users who specify the Heft option explicitly may be able to avoid that now.

The description of a ring provided by describe is now abbreviated by making use of run length encoding.

Browsers started by viewHelp are now run in a separate process group so they don't die when Macaulay2 terminates.

The function prune and decompose are no longer exact synonyms of minimalPresentation and minimalPrimes, respectively.

The function get has been fixed so it returns an error message if the process associated with the pipe has died.

The function searchPath now does what the documentation said it would do.

The output operation s<<x, when s is a string, has been changed so that if a file with filename s is already open, that file will be used instead of opening a new file with the same name, erasing the data already written to the file.

Tensor product of a module with a ring has been modified so it will make a ring map between the two rings that is derived from the names of the variables.

The degrees in symmetric algebras have been corrected.

The default for polynomial rings over polynomial rings is now to join the degree vectors of monomials in the base to the degree vectors of the top level monoid, usually resulting in a multigraded ring. For example, QQ[x][y] is now bigraded.

Inverting a noninvertible matrix results in an error message now.

The function export, given a string (rather than a symbol) will now make a new symbol with that name, even if a symbol with the same name already exists in another visible package.

The function basis will now check finite dimensionality in advance, to avoid running out of memory.

Functions and types associated with hypertext and documentation have been isolated in a new package called Text, which gets loaded automatically by beginDocumentation.

errorCode has been renamed to current

The file layout system, as described by Layout, formerly called LAYOUT, now supports separation of architecture independent files from architecture dependent files.

The cross reference hyperlinks in the info form of the documentation have been improved, but we recommend reading it in emacs with Mx info, configuring the emacs variable Infohidenotereferences so its value is hide. See reading the documentation.

Now the function needs will reload the requested file not only if the file has not been loaded before, but also if it has changed since the previous time.

It is now possible to represent a series of three or more slashes within a string delimited by /// by typing a longer series.

The conversion of TEX to html has been improved and documented, see html(TEX).

Unicode, encoded in utf8 format, is supported in documentation pages, both in html form and in emacs info form: 你好.

When an error occurs within a string being evaluated with value, the appropriates lines of the string will be displayed if the debugger is entered.

A new method for substring accepts a pair of integers as first argument of the sort returned by regex.

Regular expression handling, by the functions regex, match, replace, and select, is now much faster because strings are not copied.

The function regex now has a form that restricts the range of the search.

Macaulay2 now incorporates frobby, a free library for computing the Alexander dual of a monomial ideal (see dual(MonomialIdeal)).

The function select will now give an error message if the function provided to it returns something neither true nor false.

The quotient and remainder for two ring elements can now be obtained simultaneously, saving time. See quotientRemainder(RingElement,RingElement).

The binary representation of a real number is now available using promote(RR,type of QQ). The code for lift(RR,type of QQ) has been tightened up so a rational number is provided that provides exactly the same real number when promoted.

The emacs commands Mx M2, bound to f12, and M2sendtoprogram, bound to f11, have some new capability. With prefix argument Cu Cu to Mx M2, the tag from which the buffer name is constructed (by prepending and appending asterisks) can be entered in the minibuffer. With a prefix argument to M2sendtoprogram, the name of the buffer to which this and future uses of the command (in this buffer) should be sent can be entered, with history.

The function symmetricAlgebra is now functorial.