To learn the power of p in the last Smith form entry we can q-adicallly lift
one coefficient of x, where (p^k I + q A(I + ev^t))x = b, for random
vectors v and b and random prime q and e = (1 1 ... 1).
Butterfly networks can be used to build efficient preconditioners
for the "leading cols independent" problem.
A survey of preconditioners is proposed.
apply will take a handle to the arithmetic (the matrix domain in bds request) apply will take iterators rather than vectors - this deserves checking the details and further review. Integers: We use the Givaro Integer (in Linbox called "integer"), which wraps GMP, giving them the look and feel of a widening of long. [ The domain class (a ring) which uses these as element type s called Integers. It is suggested when instantiating to use the name "Z" as in "Integers Z; " ] We should move to use of int_32 (int or long) and int_64 (long long) when it is necessary or desired to use truncated integers. Naming conventions Domain type names are capitalized. The associated classes of a linbox type X are class X_archetype, class X_abstract, class X_envelope : public X_abstract {...}; class X_verifier : public X_envelope data member names in a class have underscore prefix, "_rowdim". Domain names are capitalized. All Domains have the interface typedef SOME_TYPE element and basic object things on the element type. ..and basic "set" things. Fields, Vector spaces, and other domains extend from this. Wrappers contain name of package (NTL Giv etc) Header files: name of file = name of class (of a predominant class in the file)
We adopted automake/autoconf, made some directory organizational changes:
1. We agreed to adopt a new directory structure It has a two level source directory organized by purpose. This organization mixes in one directory the archetype system as well as those wrappers and generic codes whose product meets the archetype (or a closely related archetype). The purposes are field: fields and rings blackbox: the matrix types algorithm: alg implementations (wiedemann, lancos, berlekamp-massey, ...) randiter: random element generators util: error, debug, integer, commentator element: basics needed for archetype system solutions: simple interfaces by matrix problem (rank, det, solve, ...) to selected algorithms A corresponding two level include directory will be built by "make install." For example for the source directory linbox, there are files such as linbox/field/modular.h linbox/blackbox/butterfly.h The corresponding include directives are #include "linbox/field/modular.h" #include "linbox/blackbox/butterfly.h" 2. Every field, blackbox, algorithm, and solution has a unit test in the tests directory. Make the appropriate entries in the tests/Makefile.am so that the unit test is run as part of linbox's "make check" feature. 3. We agreed that FieldArchetype and BlackboxArchetype are frozen, meaning no changes are made to these classes without full team consensus. 4. To capture the distinction between wrappers dependent on other software and non-dependent generic code, we agreed to generally prefix wrapper names with the wrapped library, thus "givaro-zech-log.h" wraps the Zech log fields of givaro (or so I wish), and "ntl-RR.h" wraps NTL rationals. Also we agreed to have a system of header files defined by dependency on external software systems. Thus, for example, linbox/field/ntl.h contains: #include "linbox/field/ntl-RR.h" #include "linbox/field/ntl-ZZ_p.h" #include "linbox/field/ntl-zz_p.h" 5. We agreed to capitalize all class names (except integer). When a name is a a multiword phrase, each word is capitalized. Thus "Element", "DenseMatrix". However filenames are in lowercase, "diagonal.h", distinguishing them from build system files such as "ChangeLog" and "Makefile". Generally, in filenames, hyphenation replaces internal word capitalization, "dense-matrix.h". 6. We agreed to apply the GNU Library General Public License to linbox and to assert our copyright in most files with preamble entries like: * Copyright (C) 2002 William J. Turner * See COPYING for license information. Assertions of authorship are also generally part of the preamble comment of files. Use entries like "Written by X", "Created by X". Where one file serves as a template for another, but is finally pretty much overwritten, an entry such as "evolved from F.h by X" is appropriate. Where a developer makes significant changes, entries like "modified by Y", "slightly modified by Y" may be added to the authorship of a file. When a new person takes primary responsibility for a file previously created by another, a line like "maintained by X" may be useful. 7. This version currently resides in the CVS repository "linbox-new". When committing changes, make an entry in the directory's ChangeLog and copy it into the CVS log as well. ChangeLog entries will be accessbile to users who download a tarball, whereas CVS log entries are only available to developers.