001    /*
002     * Copyright (C) 2008-2010 by Holger Arndt
003     *
004     * This file is part of the Universal Java Matrix Package (UJMP).
005     * See the NOTICE file distributed with this work for additional
006     * information regarding copyright ownership and licensing.
007     *
008     * UJMP is free software; you can redistribute it and/or modify
009     * it under the terms of the GNU Lesser General Public License as
010     * published by the Free Software Foundation; either version 2
011     * of the License, or (at your option) any later version.
012     *
013     * UJMP is distributed in the hope that it will be useful,
014     * but WITHOUT ANY WARRANTY; without even the implied warranty of
015     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016     * GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public
019     * License along with UJMP; if not, write to the
020     * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
021     * Boston, MA  02110-1301  USA
022     */
023    
024    package org.ujmp.core.util.matrices;
025    
026    import java.util.ArrayList;
027    import java.util.Collections;
028    import java.util.List;
029    
030    import org.ujmp.core.Matrix;
031    import org.ujmp.core.calculation.Calculation.Ret;
032    import org.ujmp.core.enums.FileFormat;
033    import org.ujmp.core.stringmatrix.impl.DefaultDenseStringMatrix2D;
034    
035    public class MatrixLibraries extends DefaultDenseStringMatrix2D {
036            private static final long serialVersionUID = -2575195318248762416L;
037    
038            public static final int LABELCOLUMN = 0;
039    
040            public static final int VERSION = 1;
041    
042            public static final int DATE = 2;
043    
044            public static final int LICENCE = 3;
045    
046            public static final int JAVA14 = 4;
047    
048            public static final int JAVA5 = 5;
049    
050            public static final int JAVA6 = 6;
051    
052            public static final int DENSESA = 7;
053    
054            public static final int DENSEAA = 8;
055    
056            public static final int DENSEBLOCK = 9;
057    
058            public static final int SPARSEDOK = 10;
059    
060            public static final int SPARSELIL = 11;
061    
062            public static final int SPARSEYALE = 12;
063    
064            public static final int SPARSECRS = 13;
065    
066            public static final int SPARSECDS = 14;
067    
068            public static final int DOUBLE = 15;
069    
070            public static final int FLOAT = 16;
071    
072            public static final int BIGDECIMAL = 17;
073    
074            public static final int COMPLEX = 18;
075    
076            public static final int D2 = 19;
077    
078            public static final int D3 = 20;
079    
080            public static final int D3PLUS = 21;
081    
082            public static final int MULTITHREADED = 22;
083    
084            public static final int INPLACE = 23;
085    
086            public static final int CACHEDRESULTS = 24;
087    
088            public static final int TRANSPOSE = 25;
089    
090            public static final int SCALE = 26;
091    
092            public static final int PLUSMINUS = 27;
093    
094            public static final int INV = 28;
095    
096            public static final int SOLVE = 29;
097    
098            public static final int LU = 30;
099    
100            public static final int QR = 31;
101    
102            public static final int SVD = 32;
103    
104            public static final int CHOL = 33;
105    
106            public static final int EIG = 34;
107    
108            public static final int PACKAGE = 35;
109    
110            public static final int LABELROW = 0;
111    
112            public static final int ARRAY4J = 1;
113    
114            public static final int COLT = 2;
115    
116            public static final int COMMONSMATH = 3;
117    
118            public static final int EJML = 4;
119    
120            public static final int JAMA = 5;
121    
122            public static final int JAMPACK = 6;
123    
124            public static final int JBLAS = 7;
125    
126            public static final int JLINALG = 8;
127    
128            public static final int JMATHARRAY = 9;
129    
130            public static final int JMATRICES = 10;
131    
132            public static final int JSCI = 11;
133    
134            public static final int JSCIENCE = 12;
135    
136            public static final int MANTISSA = 13;
137    
138            public static final int MTJ = 14;
139    
140            public static final int OJALGO = 15;
141    
142            public static final int ORBITAL = 16;
143    
144            public static final int OWLPACK = 17;
145    
146            public static final int PARALLELCOLT = 18;
147    
148            public static final int SST = 19;
149    
150            public static final int UJMP = 20;
151    
152            public static final int VECMATH = 21;
153    
154            public static final String NONSINGULARLETTER = "n";
155    
156            public static final String NONSINGULARTEXT = "non-singular matrices only";
157    
158            public static final String ERRORTEXT = "error in implementation";
159    
160            private List<String> footnotes = new ArrayList<String>();
161    
162            public enum MatrixLibrariesFormat {
163                    DEFAULT, LATEX, HTML
164            };
165    
166            private MatrixLibrariesFormat format = MatrixLibrariesFormat.DEFAULT;
167    
168            public MatrixLibraries() {
169                    this(MatrixLibrariesFormat.DEFAULT);
170            }
171    
172            public MatrixLibraries(MatrixLibrariesFormat format) {
173                    super(36, 22);
174                    this.format = format;
175    
176                    setAsString(turn("Array4J"), LABELROW, ARRAY4J);
177                    setAsString(turn("Colt"), LABELROW, COLT);
178                    setAsString(turn("commons-math"), LABELROW, COMMONSMATH);
179                    setAsString(turn("EJML"), LABELROW, EJML);
180                    setAsString(turn("JAMA"), LABELROW, JAMA);
181                    setAsString(turn("Jampack"), LABELROW, JAMPACK);
182                    setAsString(turn("JBlas"), LABELROW, JBLAS);
183                    setAsString(turn("JLinAlg"), LABELROW, JLINALG);
184                    setAsString(turn("JMathArray"), LABELROW, JMATHARRAY);
185                    setAsString(turn("JMatrices"), LABELROW, JMATRICES);
186                    setAsString(turn("JSci"), LABELROW, JSCI);
187                    setAsString(turn("JScience"), LABELROW, JSCIENCE);
188                    setAsString(turn("Mantissa"), LABELROW, MANTISSA);
189                    setAsString(turn("MTJ"), LABELROW, MTJ);
190                    setAsString(turn("ojAlgo"), LABELROW, OJALGO);
191                    setAsString(turn("Orbital"), LABELROW, ORBITAL);
192                    setAsString(turn("OWLPack"), LABELROW, OWLPACK);
193                    setAsString(turn("Parallel Colt"), LABELROW, PARALLELCOLT);
194                    setAsString(turn("SST"), LABELROW, SST);
195                    setAsString(turn("UJMP"), LABELROW, UJMP);
196                    setAsString(turn("vecmath"), LABELROW, VECMATH);
197    
198                    setAsString("version", VERSION, LABELCOLUMN);
199                    setAsString("release", DATE, LABELCOLUMN);
200                    setAsString("licence", LICENCE, LABELCOLUMN);
201                    setAsString("Java 1.4", JAVA14, LABELCOLUMN);
202                    setAsString("Java 5", JAVA5, LABELCOLUMN);
203                    setAsString("Java 6", JAVA6, LABELCOLUMN);
204                    setAsString("multithreaded", MULTITHREADED, LABELCOLUMN);
205                    setAsString("in-place ops", INPLACE, LABELCOLUMN);
206                    setAsString("cached results", CACHEDRESULTS, LABELCOLUMN);
207                    setAsString("dense SA" + footnote("1", "single array"), DENSESA, LABELCOLUMN);
208                    setAsString("dense AA" + footnote("2", "array of arrays"), DENSEAA, LABELCOLUMN);
209                    setAsString("dense block", DENSEBLOCK, LABELCOLUMN);
210                    setAsString("sparse DOK" + footnote("3", "dictionary of key-value pairs"), SPARSEDOK,
211                                    LABELCOLUMN);
212                    setAsString("sparse LIL" + footnote("4", "list of lists"), SPARSELIL, LABELCOLUMN);
213    
214                    setAsString("sparse CSR" + footnote("5", "compressed sparse row/column"), SPARSECRS,
215                                    LABELCOLUMN);
216                    setAsString("sparse CDS" + footnote("6", "compressed sparse diagonal"), SPARSECDS,
217                                    LABELCOLUMN);
218                    setAsString("sparse Yale", SPARSEYALE, LABELCOLUMN);
219                    setAsString("complex", COMPLEX, LABELCOLUMN);
220                    setAsString("double", DOUBLE, LABELCOLUMN);
221                    setAsString("float", FLOAT, LABELCOLUMN);
222                    setAsString("BigDecimal", BIGDECIMAL, LABELCOLUMN);
223                    setAsString("2D", D2, LABELCOLUMN);
224                    setAsString("3D", D3, LABELCOLUMN);
225                    setAsString("$>$3D", D3PLUS, LABELCOLUMN);
226                    setAsString("transpose", TRANSPOSE, LABELCOLUMN);
227                    setAsString("scale", SCALE, LABELCOLUMN);
228                    setAsString("plus/minus", PLUSMINUS, LABELCOLUMN);
229                    setAsString("inverse", INV, LABELCOLUMN);
230                    setAsString("solve", SOLVE, LABELCOLUMN);
231                    setAsString("SVD", SVD, LABELCOLUMN);
232                    setAsString("LU", LU, LABELCOLUMN);
233                    setAsString("QR", QR, LABELCOLUMN);
234                    setAsString("Cholesky", CHOL, LABELCOLUMN);
235                    setAsString("Eigen", EIG, LABELCOLUMN);
236                    setAsString("package", PACKAGE, LABELCOLUMN);
237    
238                    setAsString(org.ujmp.core.UJMP.UJMPVERSION, VERSION, UJMP);
239                    setAsString(small("2010"), DATE, UJMP);
240                    setAsString(small("LGPL"), LICENCE, UJMP);
241                    setAsString(notSupported(), JAVA14, UJMP);
242                    setAsString(yes(), JAVA5, UJMP);
243                    setAsString(yes(), JAVA6, UJMP);
244                    setAsString(both(), MULTITHREADED, UJMP);
245                    setAsString(yes(), INPLACE, UJMP);
246                    setAsString(notSupported(), CACHEDRESULTS, UJMP);
247                    setAsString(yes(), DENSEAA, UJMP);
248                    setAsString(yes(), DENSESA, UJMP);
249                    setAsString(yes(), DENSEBLOCK, UJMP);
250                    setAsString(yes(), SPARSEDOK, UJMP);
251                    setAsString(notSupported(), SPARSEYALE, UJMP);
252                    setAsString(yes(), SPARSELIL, UJMP);
253                    setAsString(notSupported(), SPARSECRS, UJMP);
254                    setAsString(notSupported(), SPARSECDS, UJMP);
255                    setAsString(notSupported(), COMPLEX, UJMP);
256                    setAsString(yes(), DOUBLE, UJMP);
257                    setAsString(yes(), FLOAT, UJMP);
258                    setAsString(yes(), BIGDECIMAL, UJMP);
259                    setAsString(yes(), D2, UJMP);
260                    setAsString(yes(), D3, UJMP);
261                    setAsString(yes(), D3PLUS, UJMP);
262                    setAsString(yes(), TRANSPOSE, UJMP);
263                    setAsString(yes(), SCALE, UJMP);
264                    setAsString(yes(), PLUSMINUS, UJMP);
265                    setAsString(yes(), INV, UJMP);
266                    setAsString(squareTall(), SOLVE, UJMP);
267                    setAsString(yes(), CHOL, UJMP);
268                    setAsString(yes(), EIG, UJMP);
269                    setAsString(all(), LU, UJMP);
270                    setAsString(squareTall(), QR, UJMP);
271                    setAsString(all(), SVD, UJMP);
272                    setAsString("org.ujmp.core", PACKAGE, UJMP);
273    
274                    setAsString(small("SVN"), VERSION, ARRAY4J);
275                    setAsString(small("2008"), DATE, ARRAY4J);
276                    setAsString(small("BSD"), LICENCE, ARRAY4J);
277                    setAsString(notSupported(), JAVA14, ARRAY4J);
278                    setAsString(notSupported(), JAVA5, ARRAY4J);
279                    setAsString(yes(), JAVA6, ARRAY4J);
280                    setAsString(unknown() + footnote("m", "using native machine code"), MULTITHREADED, ARRAY4J);
281                    setAsString(yes(), INPLACE, ARRAY4J);
282                    setAsString(yes(), DENSESA, ARRAY4J);
283                    setAsString(notSupported(), DENSEAA, ARRAY4J);
284                    setAsString(notSupported(), DENSEBLOCK, ARRAY4J);
285                    setAsString(notSupported() + footnote("i", "interface only, no implementation"), SPARSEDOK,
286                                    ARRAY4J);
287                    setAsString(notSupported() + footnote("i", "interface only, no implementation"),
288                                    SPARSEYALE, ARRAY4J);
289                    setAsString(notSupported() + footnote("i", "interface only, no implementation"), SPARSELIL,
290                                    ARRAY4J);
291                    setAsString(notSupported() + footnote("i", "interface only, no implementation"), SPARSECRS,
292                                    ARRAY4J);
293                    setAsString(notSupported() + footnote("i", "interface only, no implementation"), SPARSECDS,
294                                    ARRAY4J);
295                    setAsString(notSupported() + footnote("i", "interface only, no implementation"), COMPLEX,
296                                    ARRAY4J);
297                    setAsString(notSupported() + footnote("i", "interface only, no implementation"), DOUBLE,
298                                    ARRAY4J);
299                    setAsString(yes(), FLOAT, ARRAY4J);
300                    setAsString(notSupported(), BIGDECIMAL, ARRAY4J);
301                    setAsString(notSupported(), MULTITHREADED, ARRAY4J);
302                    setAsString(yes(), INPLACE, ARRAY4J);
303                    setAsString(notSupported(), CACHEDRESULTS, ARRAY4J);
304                    setAsString(yes(), PLUSMINUS, ARRAY4J);
305                    setAsString(yes(), SCALE, ARRAY4J);
306                    setAsString(yes(), TRANSPOSE, ARRAY4J);
307                    setAsString(yes(), D2, ARRAY4J);
308                    setAsString(notSupported(), D3, ARRAY4J);
309                    setAsString(notSupported(), D3PLUS, ARRAY4J);
310                    setAsString(notSupported(), SOLVE, ARRAY4J);
311                    setAsString(notSupported(), INV, ARRAY4J);
312                    setAsString(notSupported(), SVD, ARRAY4J);
313                    setAsString(notSupported(), QR, ARRAY4J);
314                    setAsString(notSupported(), LU, ARRAY4J);
315                    setAsString(notSupported(), EIG, ARRAY4J);
316                    setAsString(notSupported(), CHOL, ARRAY4J);
317                    setAsString(notSupported(), PACKAGE, ARRAY4J);
318    
319                    setAsString(small("1.2.0"), VERSION, COLT);
320                    setAsString(small("2004"), DATE, COLT);
321                    setAsString(small("BSD"), LICENCE, COLT);
322                    setAsString(yes(), JAVA14, COLT);
323                    setAsString(yes(), JAVA5, COLT);
324                    setAsString(yes(), JAVA6, COLT);
325                    setAsString(notSupported(), MULTITHREADED, COLT);
326                    setAsString(yes(), INPLACE, COLT);
327                    setAsString(notSupported(), CACHEDRESULTS, COLT);
328                    setAsString(yes() + footnote("f", "flags matrix as transposed"), TRANSPOSE, COLT);
329                    setAsString(yes(), SCALE, COLT);
330                    setAsString(yes(), PLUSMINUS, COLT);
331                    setAsString(yes(), DENSESA, COLT);
332                    setAsString(notSupported(), DENSEAA, COLT);
333                    setAsString(notSupported(), DENSEBLOCK, COLT);
334                    setAsString(yes(), SPARSEDOK, COLT);
335                    setAsString(notSupported(), SPARSEYALE, COLT);
336                    setAsString(notSupported(), SPARSELIL, COLT);
337                    setAsString(notSupported(), SPARSECRS, COLT);
338                    setAsString(notSupported(), SPARSECDS, COLT);
339                    setAsString(notSupported(), COMPLEX, COLT);
340                    setAsString(yes(), DOUBLE, COLT);
341                    setAsString(notSupported(), FLOAT, COLT);
342                    setAsString(notSupported(), BIGDECIMAL, COLT);
343                    setAsString(yes(), D2, COLT);
344                    setAsString(yes(), D3, COLT);
345                    setAsString(notSupported(), D3PLUS, COLT);
346                    setAsString(yes(), INV, COLT);
347                    setAsString(squareTall(), SOLVE, COLT);
348                    setAsString(all(), SVD, COLT);
349                    setAsString(squareTall(), LU, COLT);
350                    setAsString(squareTall(), QR, COLT);
351                    setAsString(yes(), EIG, COLT);
352                    setAsString(yes(), CHOL, COLT);
353                    setAsString("org.ujmp.colt", PACKAGE, COLT);
354    
355                    setAsString(small("2.1"), VERSION, COMMONSMATH);
356                    setAsString(small("2010"), DATE, COMMONSMATH);
357                    setAsString(small("Apache"), LICENCE, COMMONSMATH);
358                    setAsString(notSupported(), JAVA14, COMMONSMATH);
359                    setAsString(yes(), JAVA5, COMMONSMATH);
360                    setAsString(yes(), JAVA6, COMMONSMATH);
361                    setAsString(notSupported(), MULTITHREADED, COMMONSMATH);
362                    setAsString(yes(), INPLACE, COMMONSMATH);
363                    setAsString(notSupported(), CACHEDRESULTS, COMMONSMATH);
364                    setAsString(yes(), TRANSPOSE, COMMONSMATH);
365                    setAsString(yes(), SCALE, COMMONSMATH);
366                    setAsString(yes(), PLUSMINUS, COMMONSMATH);
367                    setAsString(yes(), DENSEAA, COMMONSMATH);
368                    setAsString(notSupported(), DENSESA, COMMONSMATH);
369                    setAsString(yes(), DENSEBLOCK, COMMONSMATH);
370                    setAsString(yes(), SPARSEDOK, COMMONSMATH);
371                    setAsString(notSupported(), SPARSEYALE, COMMONSMATH);
372                    setAsString(notSupported(), SPARSELIL, COMMONSMATH);
373                    setAsString(notSupported(), SPARSECRS, COMMONSMATH);
374                    setAsString(notSupported(), SPARSECDS, COMMONSMATH);
375                    setAsString(yes(), COMPLEX, COMMONSMATH);
376                    setAsString(yes(), DOUBLE, COMMONSMATH);
377                    setAsString(notSupported(), FLOAT, COMMONSMATH);
378                    setAsString(yes(), BIGDECIMAL, COMMONSMATH);
379                    setAsString(yes(), D2, COMMONSMATH);
380                    setAsString(notSupported(), D3, COMMONSMATH);
381                    setAsString(notSupported(), D3PLUS, COMMONSMATH);
382                    setAsString(yes(), INV, COMMONSMATH);
383                    setAsString(squareTall(), SOLVE, COMMONSMATH);
384                    setAsString(all(), SVD, COMMONSMATH);
385                    setAsString(square() + footnote(NONSINGULARLETTER, NONSINGULARTEXT), LU, COMMONSMATH);
386                    setAsString(all(), QR, COMMONSMATH);
387                    setAsString(yes() + footnote("s", "symmetric matrices only"), EIG, COMMONSMATH);
388                    setAsString(yes(), CHOL, COMMONSMATH);
389                    setAsString("org.ujmp.commonsmath", PACKAGE, COMMONSMATH);
390    
391                    setAsString(small("0.12"), VERSION, EJML);
392                    setAsString(small("2010"), DATE, EJML);
393                    setAsString(small("LGPL"), LICENCE, EJML);
394                    setAsString(notSupported(), JAVA14, EJML);
395                    setAsString(notSupported(), JAVA5, EJML);
396                    setAsString(yes(), JAVA6, EJML);
397                    setAsString(notSupported(), MULTITHREADED, EJML);
398                    setAsString(notSupported(), CACHEDRESULTS, EJML);
399                    setAsString(yes(), INPLACE, EJML);
400                    setAsString(yes(), DENSESA, EJML);
401                    setAsString(notSupported(), DENSEAA, EJML);
402                    setAsString(yes(), DENSEBLOCK, EJML);
403                    setAsString(notSupported(), SPARSEDOK, EJML);
404                    setAsString(notSupported(), SPARSEYALE, EJML);
405                    setAsString(notSupported(), SPARSELIL, EJML);
406                    setAsString(notSupported(), SPARSECRS, EJML);
407                    setAsString(notSupported(), SPARSECDS, EJML);
408                    setAsString(notSupported(), COMPLEX, EJML);
409                    setAsString(yes(), DOUBLE, EJML);
410                    setAsString(notSupported(), FLOAT, EJML);
411                    setAsString(notSupported(), BIGDECIMAL, EJML);
412                    setAsString(yes(), D2, EJML);
413                    setAsString(notSupported(), D3, EJML);
414                    setAsString(notSupported(), D3PLUS, EJML);
415                    setAsString(yes(), TRANSPOSE, EJML);
416                    setAsString(yes(), SCALE, EJML);
417                    setAsString(yes(), PLUSMINUS, EJML);
418                    setAsString(yes(), INV, EJML);
419                    setAsString(squareTall(), SOLVE, EJML);
420                    setAsString(all(), SVD, EJML);
421                    setAsString(all(), LU, EJML);
422                    setAsString(square(), QR, EJML);
423                    setAsString(yes(), EIG, EJML);
424                    setAsString(yes(), CHOL, EJML);
425                    setAsString("org.ujmp.ejml", PACKAGE, EJML);
426    
427                    setAsString(small("1.0.2"), VERSION, JAMA);
428                    setAsString(small("2005"), DATE, JAMA);
429                    setAsString(small("PD"), LICENCE, JAMA);
430                    setAsString(yes(), JAVA14, JAMA);
431                    setAsString(yes(), JAVA5, JAMA);
432                    setAsString(yes(), JAVA6, JAMA);
433                    setAsString(notSupported(), MULTITHREADED, JAMA);
434                    setAsString(notSupported(), INPLACE, JAMA);
435                    setAsString(notSupported(), CACHEDRESULTS, JAMA);
436                    setAsString(yes(), DENSEAA, JAMA);
437                    setAsString(notSupported(), DENSESA, JAMA);
438                    setAsString(notSupported(), DENSEBLOCK, JAMA);
439                    setAsString(notSupported(), SPARSEDOK, JAMA);
440                    setAsString(notSupported(), SPARSEYALE, JAMA);
441                    setAsString(notSupported(), SPARSELIL, JAMA);
442                    setAsString(notSupported(), SPARSECRS, JAMA);
443                    setAsString(notSupported(), SPARSECDS, JAMA);
444                    setAsString(notSupported(), COMPLEX, JAMA);
445                    setAsString(yes(), DOUBLE, JAMA);
446                    setAsString(notSupported(), FLOAT, JAMA);
447                    setAsString(notSupported(), BIGDECIMAL, JAMA);
448                    setAsString(yes(), D2, JAMA);
449                    setAsString(notSupported(), D3, JAMA);
450                    setAsString(notSupported(), D3PLUS, JAMA);
451                    setAsString(yes(), TRANSPOSE, JAMA);
452                    setAsString(yes(), SCALE, JAMA);
453                    setAsString(yes(), PLUSMINUS, JAMA);
454                    setAsString(yes(), INV, JAMA);
455                    setAsString(squareTall(), SOLVE, JAMA);
456                    setAsString(squareTall(), SVD, JAMA);
457                    setAsString(squareTall(), LU, JAMA);
458                    setAsString(squareTall(), QR, JAMA);
459                    setAsString(yes(), EIG, JAMA);
460                    setAsString(yes(), CHOL, JAMA);
461                    setAsString("org.ujmp.jama", PACKAGE, JAMA);
462    
463                    setAsString(small("?"), VERSION, JAMPACK);
464                    setAsString(small("1999"), DATE, JAMPACK);
465                    setAsString(small("?"), LICENCE, JAMPACK);
466                    setAsString(yes(), JAVA14, JAMPACK);
467                    setAsString(yes(), JAVA5, JAMPACK);
468                    setAsString(yes(), JAVA6, JAMPACK);
469                    setAsString(notSupported(), MULTITHREADED, JAMPACK);
470                    setAsString(notSupported(), INPLACE, JAMPACK);
471                    setAsString(yes(), DENSEAA, JAMPACK);
472                    setAsString(notSupported(), DENSESA, JAMPACK);
473                    setAsString(notSupported(), DENSEBLOCK, JAMPACK);
474                    setAsString(notSupported(), SPARSEDOK, JAMPACK);
475                    setAsString(notSupported(), SPARSEYALE, JAMPACK);
476                    setAsString(notSupported(), SPARSELIL, JAMPACK);
477                    setAsString(notSupported(), SPARSECRS, JAMPACK);
478                    setAsString(notSupported(), SPARSECDS, JAMPACK);
479                    setAsString(yes(), COMPLEX, JAMPACK);
480                    setAsString(yes(), DOUBLE, JAMPACK);
481                    setAsString(notSupported(), FLOAT, JAMPACK);
482                    setAsString(notSupported(), BIGDECIMAL, JAMPACK);
483                    setAsString(yes(), D2, JAMPACK);
484                    setAsString(notSupported(), D3, JAMPACK);
485                    setAsString(notSupported(), D3PLUS, JAMPACK);
486                    setAsString(yes(), CACHEDRESULTS, JAMPACK);
487                    setAsString(yes(), TRANSPOSE, JAMPACK);
488                    setAsString(yes(), PLUSMINUS, JAMPACK);
489                    setAsString(yes(), SCALE, JAMPACK);
490                    setAsString(yes(), INV, JAMPACK);
491                    setAsString(square(), SOLVE, JAMPACK);
492                    setAsString(square(), SVD, JAMPACK);
493                    setAsString(all(), LU, JAMPACK);
494                    setAsString(all(), QR, JAMPACK);
495                    setAsString(yes(), EIG, JAMPACK);
496                    setAsString(yes() + footnote("e", ERRORTEXT), CHOL, JAMPACK);
497                    setAsString("org.ujmp.jampack", PACKAGE, JAMPACK);
498    
499                    setAsString(small("1.0.2"), VERSION, JBLAS);
500                    setAsString(small("2010"), DATE, JBLAS);
501                    setAsString(small("BSD"), LICENCE, JBLAS);
502                    setAsString(notSupported(), JAVA14, JBLAS);
503                    setAsString(yes(), JAVA5, JBLAS);
504                    setAsString(yes(), JAVA6, JBLAS);
505                    setAsString(yes() + footnote("m", "using native machine code"), MULTITHREADED, JBLAS);
506                    setAsString(yes(), INPLACE, JBLAS);
507                    setAsString(notSupported(), CACHEDRESULTS, JBLAS);
508                    setAsString(yes(), DENSESA, JBLAS);
509                    setAsString(notSupported(), DENSEAA, JBLAS);
510                    setAsString(notSupported(), DENSEBLOCK, JBLAS);
511                    setAsString(notSupported(), SPARSEDOK, JBLAS);
512                    setAsString(notSupported(), SPARSEYALE, JBLAS);
513                    setAsString(notSupported(), SPARSELIL, JBLAS);
514                    setAsString(notSupported(), SPARSECRS, JBLAS);
515                    setAsString(notSupported(), SPARSECDS, JBLAS);
516                    setAsString(yes(), COMPLEX, JBLAS);
517                    setAsString(yes(), DOUBLE, JBLAS);
518                    setAsString(yes(), FLOAT, JBLAS);
519                    setAsString(notSupported(), BIGDECIMAL, JBLAS);
520                    setAsString(yes(), D2, JBLAS);
521                    setAsString(notSupported(), D3, JBLAS);
522                    setAsString(notSupported(), D3PLUS, JBLAS);
523                    setAsString(yes(), TRANSPOSE, JBLAS);
524                    setAsString(yes(), SCALE, JBLAS);
525                    setAsString(yes(), PLUSMINUS, JBLAS);
526                    setAsString(yes(), INV, JBLAS);
527                    setAsString(square(), SOLVE, JBLAS);
528                    setAsString(notSupported(), SVD, JBLAS);
529                    setAsString(all(), LU, JBLAS);
530                    setAsString(notSupported(), QR, JBLAS);
531                    setAsString(yes() + footnote("s", "symmetric matrices only"), EIG, JBLAS);
532                    setAsString(yes(), CHOL, JBLAS);
533                    setAsString("org.ujmp.jblas", PACKAGE, JBLAS);
534    
535                    setAsString(small("0.6"), VERSION, JLINALG);
536                    setAsString(small("2009"), DATE, JLINALG);
537                    setAsString(small("GPL"), LICENCE, JLINALG);
538                    setAsString(notSupported(), JAVA14, JLINALG);
539                    setAsString(notSupported(), JAVA5, JLINALG);
540                    setAsString(yes(), JAVA6, JLINALG);
541                    setAsString(notSupported(), MULTITHREADED, JLINALG);
542                    setAsString(notSupported(), CACHEDRESULTS, JLINALG);
543                    setAsString(yes(), INPLACE, JLINALG);
544                    setAsString(yes(), DENSEAA, JLINALG);
545                    setAsString(notSupported(), DENSESA, JLINALG);
546                    setAsString(notSupported(), DENSEBLOCK, JLINALG);
547                    setAsString(notSupported(), SPARSEDOK, JLINALG);
548                    setAsString(notSupported(), SPARSEYALE, JLINALG);
549                    setAsString(notSupported(), SPARSELIL, JLINALG);
550                    setAsString(notSupported(), SPARSECRS, JLINALG);
551                    setAsString(notSupported(), SPARSECDS, JLINALG);
552                    setAsString(yes(), COMPLEX, JLINALG);
553                    setAsString(yes(), DOUBLE, JLINALG);
554                    setAsString(notSupported(), FLOAT, JLINALG);
555                    setAsString(yes(), BIGDECIMAL, JLINALG);
556                    setAsString(yes(), TRANSPOSE, JLINALG);
557                    setAsString(yes(), SCALE, JLINALG);
558                    setAsString(yes(), PLUSMINUS, JLINALG);
559                    setAsString(yes(), D2, JLINALG);
560                    setAsString(notSupported(), D3, JLINALG);
561                    setAsString(notSupported(), D3PLUS, JLINALG);
562                    setAsString(yes(), INV, JLINALG);
563                    setAsString(notSupported() + footnote("v", "only for $A \\cdot X = \\mbox{vector}$"),
564                                    SOLVE, JLINALG);
565                    setAsString(notSupported(), SVD, JLINALG);
566                    setAsString(notSupported(), LU, JLINALG);
567                    setAsString(notSupported(), QR, JLINALG);
568                    setAsString(notSupported(), EIG, JLINALG);
569                    setAsString(notSupported(), CHOL, JLINALG);
570                    setAsString("org.ujmp.jlinalg", PACKAGE, JLINALG);
571    
572                    setAsString(small("?"), VERSION, JMATHARRAY);
573                    setAsString(small("2009"), DATE, JMATHARRAY);
574                    setAsString(small("BSD"), LICENCE, JMATHARRAY);
575                    setAsString(notSupported(), JAVA14, JMATHARRAY);
576                    setAsString(yes(), JAVA5, JMATHARRAY);
577                    setAsString(yes(), JAVA6, JMATHARRAY);
578                    setAsString(notSupported(), MULTITHREADED, JMATHARRAY);
579                    setAsString(notSupported(), INPLACE, JMATHARRAY);
580                    setAsString(notSupported(), CACHEDRESULTS, JMATHARRAY);
581                    setAsString(yes(), TRANSPOSE, JMATHARRAY);
582                    setAsString(yes(), SCALE, JMATHARRAY);
583                    setAsString(yes(), PLUSMINUS, JMATHARRAY);
584                    setAsString(yes(), DENSEAA, JMATHARRAY);
585                    setAsString(notSupported(), DENSESA, JMATHARRAY);
586                    setAsString(notSupported(), DENSEBLOCK, JMATHARRAY);
587                    setAsString(notSupported(), SPARSEDOK, JMATHARRAY);
588                    setAsString(notSupported(), SPARSEYALE, JMATHARRAY);
589                    setAsString(notSupported(), SPARSELIL, JMATHARRAY);
590                    setAsString(notSupported(), SPARSECRS, JMATHARRAY);
591                    setAsString(notSupported(), SPARSECDS, JMATHARRAY);
592                    setAsString(notSupported(), COMPLEX, JMATHARRAY);
593                    setAsString(yes(), DOUBLE, JMATHARRAY);
594                    setAsString(notSupported(), FLOAT, JMATHARRAY);
595                    setAsString(notSupported(), BIGDECIMAL, JMATHARRAY);
596                    setAsString(yes(), D2, JMATHARRAY);
597                    setAsString(notSupported(), D3, JMATHARRAY);
598                    setAsString(notSupported(), D3PLUS, JMATHARRAY);
599                    setAsString(yes(), INV, JMATHARRAY);
600                    setAsString(squareTall(), SOLVE, JMATHARRAY);
601                    setAsString(squareTall(), SVD, JMATHARRAY);
602                    setAsString(squareTall(), LU, JMATHARRAY);
603                    setAsString(squareTall(), QR, JMATHARRAY);
604                    setAsString(yes(), EIG, JMATHARRAY);
605                    setAsString(yes(), CHOL, JMATHARRAY);
606                    setAsString("org.ujmp.jmatharray", PACKAGE, JMATHARRAY);
607    
608                    setAsString(small("0.6"), VERSION, JMATRICES);
609                    setAsString(small("2004"), DATE, JMATRICES);
610                    setAsString(small("LGPL"), LICENCE, JMATRICES);
611                    setAsString(yes(), JAVA14, JMATRICES);
612                    setAsString(yes(), JAVA5, JMATRICES);
613                    setAsString(yes(), JAVA6, JMATRICES);
614                    setAsString(notSupported(), MULTITHREADED, JMATRICES);
615                    setAsString(notSupported(), INPLACE, JMATRICES);
616                    setAsString(notSupported(), CACHEDRESULTS, JMATRICES);
617                    setAsString(yes(), DENSEAA, JMATRICES);
618                    setAsString(notSupported(), DENSESA, JMATRICES);
619                    setAsString(notSupported(), DENSEBLOCK, JMATRICES);
620                    setAsString(notSupported(), SPARSEDOK, JMATRICES);
621                    setAsString(notSupported(), SPARSEYALE, JMATRICES);
622                    setAsString(notSupported(), SPARSELIL, JMATRICES);
623                    setAsString(notSupported(), SPARSECRS, JMATRICES);
624                    setAsString(notSupported(), SPARSECDS, JMATRICES);
625                    setAsString(yes(), COMPLEX, JMATRICES);
626                    setAsString(yes(), DOUBLE, JMATRICES);
627                    setAsString(notSupported(), FLOAT, JMATRICES);
628                    setAsString(yes(), BIGDECIMAL, JMATRICES);
629                    setAsString(yes(), D2, JMATRICES);
630                    setAsString(notSupported(), D3, JMATRICES);
631                    setAsString(notSupported(), D3PLUS, JMATRICES);
632                    setAsString(yes(), TRANSPOSE, JMATRICES);
633                    setAsString(yes(), PLUSMINUS, JMATRICES);
634                    setAsString(yes(), SCALE, JMATRICES);
635                    setAsString(yes(), INV, JMATRICES);
636                    setAsString(squareTall(), SOLVE, JMATRICES);
637                    setAsString(square(), SVD, JMATRICES);
638                    setAsString(squareTall(), LU, JMATRICES);
639                    setAsString(squareTall(), QR, JMATRICES);
640                    setAsString(yes(), EIG, JMATRICES);
641                    setAsString(yes(), CHOL, JMATRICES);
642                    setAsString("org.ujmp.jmatrices", PACKAGE, JMATRICES);
643    
644                    setAsString(small("1.1"), VERSION, JSCI);
645                    setAsString(small("2009"), DATE, JSCI);
646                    setAsString(small("LGPL"), LICENCE, JSCI);
647                    setAsString(yes(), JAVA14, JSCI);
648                    setAsString(yes(), JAVA5, JSCI);
649                    setAsString(yes(), JAVA6, JSCI);
650                    setAsString(notSupported(), MULTITHREADED, JSCI);
651                    setAsString(notSupported(), INPLACE, JSCI);
652                    setAsString(notSupported(), CACHEDRESULTS, JSCI);
653                    setAsString(yes(), DENSEAA, JSCI);
654                    setAsString(notSupported(), DENSESA, JSCI);
655                    setAsString(notSupported(), DENSEBLOCK, JSCI);
656                    setAsString(yes(), SPARSEYALE, JSCI);
657                    setAsString(notSupported(), SPARSEDOK, JSCI);
658                    setAsString(notSupported(), SPARSELIL, JSCI);
659                    setAsString(notSupported(), SPARSECRS, JSCI);
660                    setAsString(notSupported(), SPARSECDS, JSCI);
661                    setAsString(yes(), COMPLEX, JSCI);
662                    setAsString(yes(), DOUBLE, JSCI);
663                    setAsString(notSupported(), FLOAT, JSCI);
664                    setAsString(notSupported(), BIGDECIMAL, JSCI);
665                    setAsString(yes(), D2, JSCI);
666                    setAsString(notSupported(), D3, JSCI);
667                    setAsString(notSupported(), D3PLUS, JSCI);
668                    setAsString(yes(), TRANSPOSE, JSCI);
669                    setAsString(yes(), PLUSMINUS, JSCI);
670                    setAsString(yes(), SCALE, JSCI);
671                    setAsString(notSupported() + footnote("v", "only for $A \\cdot X = \\mbox{vector}$"),
672                                    SOLVE, JSCI);
673                    setAsString(yes(), INV, JSCI);
674                    setAsString(square(), SVD, JSCI);
675                    setAsString(square() + footnote(NONSINGULARLETTER, NONSINGULARTEXT), LU, JSCI);
676                    setAsString(square(), QR, JSCI);
677                    setAsString(yes() + footnote("s", "symmetric matrices only")
678                                    + footnote("a", "results not directly accessible"), EIG, JSCI);
679                    setAsString(yes(), CHOL, JSCI);
680                    setAsString("org.ujmp.jsci", PACKAGE, JSCI);
681    
682                    setAsString(small("4.3.1"), VERSION, JSCIENCE);
683                    setAsString(small("2007"), DATE, JSCIENCE);
684                    setAsString(small("BSD"), LICENCE, JSCIENCE);
685                    setAsString(notSupported(), JAVA14, JSCIENCE);
686                    setAsString(yes(), JAVA5, JSCIENCE);
687                    setAsString(yes(), JAVA6, JSCIENCE);
688                    setAsString(yes(), MULTITHREADED, JSCIENCE);
689                    setAsString(notSupported(), INPLACE, JSCIENCE);
690                    setAsString(notSupported(), CACHEDRESULTS, JSCIENCE);
691                    setAsString(yes(), DENSEAA, JSCIENCE);
692                    setAsString(notSupported(), DENSEBLOCK, JSCIENCE);
693                    setAsString(notSupported(), DENSESA, JSCIENCE);
694                    setAsString(yes(), SPARSELIL, JSCIENCE);
695                    setAsString(notSupported(), SPARSEYALE, JSCIENCE);
696                    setAsString(notSupported(), SPARSECDS, JSCIENCE);
697                    setAsString(notSupported(), SPARSECRS, JSCIENCE);
698                    setAsString(yes(), SPARSEDOK, JSCIENCE);
699                    setAsString(yes(), COMPLEX, JSCIENCE);
700                    setAsString(yes(), DOUBLE, JSCIENCE);
701                    setAsString(notSupported(), FLOAT, JSCIENCE);
702                    setAsString(notSupported(), BIGDECIMAL, JSCIENCE);
703                    setAsString(yes(), D2, JSCIENCE);
704                    setAsString(notSupported(), D3, JSCIENCE);
705                    setAsString(notSupported(), D3PLUS, JSCIENCE);
706                    setAsString(yes() + footnote("f", "flags matrix as transposed"), TRANSPOSE, JSCIENCE);
707                    setAsString(yes(), SCALE, JSCIENCE);
708                    setAsString(yes(), PLUSMINUS, JSCIENCE);
709                    setAsString(yes(), INV, JSCIENCE);
710                    setAsString(square(), SOLVE, JSCIENCE);
711                    setAsString(notSupported(), SVD, JSCIENCE);
712                    setAsString(square() + footnote(NONSINGULARLETTER, NONSINGULARTEXT), LU, JSCIENCE);
713                    setAsString(notSupported(), QR, JSCIENCE);
714                    setAsString(notSupported(), EIG, JSCIENCE);
715                    setAsString(notSupported(), CHOL, JSCIENCE);
716                    setAsString("org.ujmp.jscience", PACKAGE, JSCIENCE);
717    
718                    setAsString(small("7.2"), VERSION, MANTISSA);
719                    setAsString(small("2007"), DATE, MANTISSA);
720                    setAsString(small("BSD"), LICENCE, MANTISSA);
721                    setAsString(yes(), JAVA14, MANTISSA);
722                    setAsString(yes(), JAVA5, MANTISSA);
723                    setAsString(yes(), JAVA6, MANTISSA);
724                    setAsString(notSupported(), MULTITHREADED, MANTISSA);
725                    setAsString(notSupported(), CACHEDRESULTS, MANTISSA);
726                    setAsString(yes(), INPLACE, MANTISSA);
727                    setAsString(yes(), TRANSPOSE, MANTISSA);
728                    setAsString(yes(), PLUSMINUS, MANTISSA);
729                    setAsString(yes(), SCALE, MANTISSA);
730                    setAsString(yes(), DENSESA, MANTISSA);
731                    setAsString(notSupported(), DENSEAA, MANTISSA);
732                    setAsString(notSupported(), DENSEBLOCK, MANTISSA);
733                    setAsString(notSupported(), SPARSEDOK, MANTISSA);
734                    setAsString(notSupported(), SPARSEYALE, MANTISSA);
735                    setAsString(notSupported(), SPARSELIL, MANTISSA);
736                    setAsString(notSupported(), SPARSECRS, MANTISSA);
737                    setAsString(notSupported(), SPARSECDS, MANTISSA);
738                    setAsString(notSupported(), COMPLEX, MANTISSA);
739                    setAsString(yes(), DOUBLE, MANTISSA);
740                    setAsString(notSupported(), FLOAT, MANTISSA);
741                    setAsString(notSupported(), BIGDECIMAL, MANTISSA);
742                    setAsString(yes(), D2, MANTISSA);
743                    setAsString(notSupported(), D3, MANTISSA);
744                    setAsString(notSupported(), D3PLUS, MANTISSA);
745                    setAsString(yes(), INV, MANTISSA);
746                    setAsString(square(), SOLVE, MANTISSA);
747                    setAsString(notSupported(), SVD, MANTISSA);
748                    setAsString(square() + footnote("a", "results not directly accessible"), LU, MANTISSA);
749                    setAsString(notSupported(), QR, MANTISSA);
750                    setAsString(notSupported(), EIG, MANTISSA);
751                    setAsString(notSupported(), CHOL, MANTISSA);
752                    setAsString("org.ujmp.mantissa", PACKAGE, MANTISSA);
753    
754                    setAsString(small("0.9.12"), VERSION, MTJ);
755                    setAsString(small("2009"), DATE, MTJ);
756                    setAsString(small("LGPL"), LICENCE, MTJ);
757                    setAsString(notSupported(), JAVA14, MTJ);
758                    setAsString(yes(), JAVA5, MTJ);
759                    setAsString(yes(), JAVA6, MTJ);
760                    setAsString(yes() + footnote("m", "using native machine code"), MULTITHREADED, MTJ);
761                    setAsString(yes(), INPLACE, MTJ);
762                    setAsString(notSupported(), CACHEDRESULTS, MTJ);
763                    setAsString(yes(), DENSESA, MTJ);
764                    setAsString(notSupported(), DENSEAA, MTJ);
765                    setAsString(notSupported(), DENSEBLOCK, MTJ);
766                    setAsString(yes(), SPARSECRS, MTJ);
767                    setAsString(yes(), SPARSECDS, MTJ);
768                    setAsString(yes(), SPARSELIL, MTJ);
769                    setAsString(notSupported(), SPARSEDOK, MTJ);
770                    setAsString(notSupported(), SPARSEYALE, MTJ);
771                    setAsString(notSupported(), COMPLEX, MTJ);
772                    setAsString(yes(), DOUBLE, MTJ);
773                    setAsString(notSupported(), FLOAT, MTJ);
774                    setAsString(notSupported(), BIGDECIMAL, MTJ);
775                    setAsString(yes(), D2, MTJ);
776                    setAsString(notSupported(), D3, MTJ);
777                    setAsString(notSupported(), D3PLUS, MTJ);
778                    setAsString(yes(), TRANSPOSE, MTJ);
779                    setAsString(yes(), SCALE, MTJ);
780                    setAsString(yes(), PLUSMINUS, MTJ);
781                    setAsString(yes(), INV, MTJ);
782                    setAsString(squareTall(), SOLVE, MTJ);
783                    setAsString(all(), SVD, MTJ);
784                    setAsString(all() + footnote("e", ERRORTEXT), LU, MTJ);
785                    setAsString(squareTall(), QR, MTJ);
786                    setAsString(yes() + footnote("s", "symmetric matrices only"), EIG, MTJ);
787                    setAsString(yes() + footnote("e", ERRORTEXT), CHOL, MTJ);
788                    setAsString("org.ujmp.mtj", PACKAGE, MTJ);
789    
790                    setAsString(small("29.8"), VERSION, OJALGO);
791                    setAsString(small("2010"), DATE, OJALGO);
792                    setAsString(small("MIT"), LICENCE, OJALGO);
793                    setAsString(notSupported(), JAVA14, OJALGO);
794                    setAsString(yes(), JAVA5, OJALGO);
795                    setAsString(yes(), JAVA6, OJALGO);
796                    setAsString(both(), MULTITHREADED, OJALGO);
797                    setAsString(yes(), INPLACE, OJALGO);
798                    setAsString(notSupported(), CACHEDRESULTS, OJALGO);
799                    setAsString(yes() + footnote("f", "flags matrix as transposed"), TRANSPOSE, OJALGO);
800                    setAsString(yes(), SCALE, OJALGO);
801                    setAsString(yes(), PLUSMINUS, OJALGO);
802                    setAsString(yes(), DENSESA, OJALGO);
803                    setAsString(notSupported(), DENSEAA, OJALGO);
804                    setAsString(notSupported(), DENSEBLOCK, OJALGO);
805                    setAsString(notSupported(), SPARSECDS, OJALGO);
806                    setAsString(notSupported(), SPARSECRS, OJALGO);
807                    setAsString(notSupported(), SPARSEYALE, OJALGO);
808                    setAsString(notSupported(), SPARSELIL, OJALGO);
809                    setAsString(notSupported(), SPARSEDOK, OJALGO);
810                    setAsString(yes(), COMPLEX, OJALGO);
811                    setAsString(yes(), DOUBLE, OJALGO);
812                    setAsString(yes(), FLOAT, OJALGO);
813                    setAsString(yes(), BIGDECIMAL, OJALGO);
814                    setAsString(yes(), D2, OJALGO);
815                    setAsString(notSupported(), D3, OJALGO);
816                    setAsString(notSupported(), D3PLUS, OJALGO);
817                    setAsString(yes(), INV, OJALGO);
818                    setAsString(squareTall(), SOLVE, OJALGO);
819                    setAsString(all(), SVD, OJALGO);
820                    setAsString(all(), LU, OJALGO);
821                    setAsString(all(), QR, OJALGO);
822                    setAsString(yes(), EIG, OJALGO);
823                    setAsString(yes(), CHOL, OJALGO);
824                    setAsString("org.ujmp.ojalgo", PACKAGE, OJALGO);
825    
826                    setAsString(small("1.3.0"), VERSION, ORBITAL);
827                    setAsString(small("2009"), DATE, ORBITAL);
828                    setAsString(small("custom"), LICENCE, ORBITAL);
829                    setAsString(yes(), JAVA14, ORBITAL);
830                    setAsString(yes(), JAVA5, ORBITAL);
831                    setAsString(yes(), JAVA6, ORBITAL);
832                    setAsString(notSupported(), MULTITHREADED, ORBITAL);
833                    setAsString(notSupported(), INPLACE, ORBITAL);
834                    setAsString(notSupported(), CACHEDRESULTS, ORBITAL);
835                    setAsString(yes(), DENSESA, ORBITAL);
836                    setAsString(yes(), DENSEAA, ORBITAL);
837                    setAsString(notSupported(), DENSEBLOCK, ORBITAL);
838                    setAsString(notSupported(), SPARSECDS, ORBITAL);
839                    setAsString(notSupported(), SPARSECRS, ORBITAL);
840                    setAsString(notSupported(), SPARSEDOK, ORBITAL);
841                    setAsString(notSupported(), SPARSELIL, ORBITAL);
842                    setAsString(notSupported(), SPARSEYALE, ORBITAL);
843                    setAsString(yes(), COMPLEX, ORBITAL);
844                    setAsString(yes(), DOUBLE, ORBITAL);
845                    setAsString(notSupported(), FLOAT, ORBITAL);
846                    setAsString(notSupported(), BIGDECIMAL, ORBITAL);
847                    setAsString(yes(), TRANSPOSE, ORBITAL);
848                    setAsString(yes(), PLUSMINUS, ORBITAL);
849                    setAsString(yes(), SCALE, ORBITAL);
850                    setAsString(yes(), D2, ORBITAL);
851                    setAsString(yes(), D3, ORBITAL);
852                    setAsString(yes(), D3PLUS, ORBITAL);
853                    setAsString(yes(), INV, ORBITAL);
854                    setAsString(notSupported(), SVD, ORBITAL);
855                    setAsString(notSupported() + footnote("v", "only for $A \\cdot X = \\mbox{vector}$"),
856                                    SOLVE, ORBITAL);
857                    setAsString(square() + footnote(NONSINGULARLETTER, NONSINGULARTEXT), LU, ORBITAL);
858                    setAsString(notSupported(), QR, ORBITAL);
859                    setAsString(notSupported(), EIG, ORBITAL);
860                    setAsString(notSupported(), CHOL, ORBITAL);
861                    setAsString("org.ujmp.orbital", PACKAGE, ORBITAL);
862    
863                    setAsString(unknown(), VERSION, OWLPACK);
864                    setAsString(small("1999"), DATE, OWLPACK);
865                    setAsString(unknown(), LICENCE, OWLPACK);
866                    setAsString(yes(), JAVA14, OWLPACK);
867                    setAsString(yes(), JAVA5, OWLPACK);
868                    setAsString(yes(), JAVA6, OWLPACK);
869                    setAsString(notSupported(), MULTITHREADED, OWLPACK);
870                    setAsString(yes(), INPLACE, OWLPACK);
871                    setAsString(notSupported(), CACHEDRESULTS, OWLPACK);
872                    setAsString(yes(), DENSEAA, OWLPACK);
873                    setAsString(notSupported(), DENSESA, OWLPACK);
874                    setAsString(notSupported(), DENSEBLOCK, OWLPACK);
875                    setAsString(notSupported(), SPARSECDS, OWLPACK);
876                    setAsString(notSupported(), SPARSECRS, OWLPACK);
877                    setAsString(notSupported(), SPARSEYALE, OWLPACK);
878                    setAsString(notSupported(), SPARSEDOK, OWLPACK);
879                    setAsString(notSupported(), SPARSELIL, OWLPACK);
880                    setAsString(yes(), COMPLEX, OWLPACK);
881                    setAsString(yes(), DOUBLE, OWLPACK);
882                    setAsString(yes(), FLOAT, OWLPACK);
883                    setAsString(notSupported(), BIGDECIMAL, OWLPACK);
884                    setAsString(yes(), TRANSPOSE, OWLPACK);
885                    setAsString(yes(), PLUSMINUS, OWLPACK);
886                    setAsString(yes(), SCALE, OWLPACK);
887                    setAsString(yes(), D2, OWLPACK);
888                    setAsString(notSupported(), D3, OWLPACK);
889                    setAsString(notSupported(), D3PLUS, OWLPACK);
890                    setAsString(notSupported() + footnote("v", "only for $A \\cdot X = \\mbox{vector}$"),
891                                    SOLVE, OWLPACK);
892                    setAsString(yes() + footnote("e", ERRORTEXT), INV, OWLPACK);
893                    setAsString(circle() + footnote("e", ERRORTEXT), SVD, OWLPACK);
894                    setAsString(notSupported(), LU, OWLPACK);
895                    setAsString(circle() + footnote("u", "unuseable without documentation"), QR, OWLPACK);
896                    setAsString(notSupported(), EIG, OWLPACK);
897                    setAsString(notSupported(), CHOL, OWLPACK);
898                    setAsString("org.ujmp.owlpack", PACKAGE, OWLPACK);
899    
900                    setAsString(small("0.9.4"), VERSION, PARALLELCOLT);
901                    setAsString(small("2010"), DATE, PARALLELCOLT);
902                    setAsString(small("BSD"), LICENCE, PARALLELCOLT);
903                    setAsString(yes(), JAVA14, PARALLELCOLT);
904                    setAsString(yes(), JAVA5, PARALLELCOLT);
905                    setAsString(yes(), JAVA6, PARALLELCOLT);
906                    setAsString(both(), MULTITHREADED, PARALLELCOLT);
907                    setAsString(yes(), INPLACE, PARALLELCOLT);
908                    setAsString(yes() + footnote("f", "flags matrix as transposed"), TRANSPOSE, PARALLELCOLT);
909                    setAsString(yes(), SCALE, PARALLELCOLT);
910                    setAsString(yes(), PLUSMINUS, PARALLELCOLT);
911                    setAsString(notSupported(), CACHEDRESULTS, PARALLELCOLT);
912                    setAsString(yes(), DENSESA, PARALLELCOLT);
913                    setAsString(yes(), DENSEAA, PARALLELCOLT);
914                    setAsString(notSupported(), DENSEBLOCK, PARALLELCOLT);
915                    setAsString(yes(), SPARSECRS, PARALLELCOLT);
916                    setAsString(yes(), SPARSELIL, PARALLELCOLT);
917                    setAsString(yes(), SPARSEDOK, PARALLELCOLT);
918                    setAsString(notSupported(), SPARSEYALE, PARALLELCOLT);
919                    setAsString(notSupported(), SPARSECDS, PARALLELCOLT);
920                    setAsString(yes(), COMPLEX, PARALLELCOLT);
921                    setAsString(yes(), DOUBLE, PARALLELCOLT);
922                    setAsString(yes(), FLOAT, PARALLELCOLT);
923                    setAsString(notSupported(), BIGDECIMAL, PARALLELCOLT);
924                    setAsString(yes(), D2, PARALLELCOLT);
925                    setAsString(yes(), D3, PARALLELCOLT);
926                    setAsString(notSupported(), D3PLUS, PARALLELCOLT);
927                    setAsString(yes(), INV, PARALLELCOLT);
928                    setAsString(squareTall(), SOLVE, PARALLELCOLT);
929                    setAsString(all(), SVD, PARALLELCOLT);
930                    setAsString(squareTall(), LU, PARALLELCOLT);
931                    setAsString(squareTall(), QR, PARALLELCOLT);
932                    setAsString(yes(), EIG, PARALLELCOLT);
933                    setAsString(yes(), CHOL, PARALLELCOLT);
934                    setAsString("org.ujmp.parallelcolt", PACKAGE, PARALLELCOLT);
935    
936                    setAsString(small("1.10"), VERSION, SST);
937                    setAsString(small("2009"), DATE, SST);
938                    setAsString(small("LGPL"), LICENCE, SST);
939                    setAsString(notSupported(), JAVA14, SST);
940                    setAsString(yes() + footnote("j", "jar does not work with Java 5"), JAVA5, SST);
941                    setAsString(yes(), JAVA6, SST);
942                    setAsString(notSupported(), MULTITHREADED, SST);
943                    setAsString(yes(), INPLACE, SST);
944                    setAsString(yes(), TRANSPOSE, SST);
945                    setAsString(yes(), SCALE, SST);
946                    setAsString(yes(), PLUSMINUS, SST);
947                    setAsString(notSupported(), CACHEDRESULTS, SST);
948                    setAsString(yes(), DENSESA, SST);
949                    setAsString(notSupported(), DENSEAA, SST);
950                    setAsString(notSupported(), DENSEBLOCK, SST);
951                    setAsString(yes(), SPARSEDOK, SST);
952                    setAsString(notSupported(), SPARSELIL, SST);
953                    setAsString(notSupported(), SPARSEYALE, SST);
954                    setAsString(notSupported(), SPARSECDS, SST);
955                    setAsString(notSupported(), SPARSECRS, SST);
956                    setAsString(yes(), COMPLEX, SST);
957                    setAsString(yes(), DOUBLE, SST);
958                    setAsString(notSupported(), FLOAT, SST);
959                    setAsString(notSupported(), BIGDECIMAL, SST);
960                    setAsString(yes(), D2, SST);
961                    setAsString(yes(), D3, SST);
962                    setAsString(yes(), D3PLUS, SST);
963                    setAsString(yes(), INV, SST);
964                    setAsString(notSupported(), SOLVE, SST);
965                    setAsString(all(), SVD, SST);
966                    setAsString(notSupported(), LU, SST);
967                    setAsString(notSupported(), QR, SST);
968                    setAsString(yes(), EIG, SST);
969                    setAsString(notSupported(), CHOL, SST);
970                    setAsString("org.ujmp.sst", PACKAGE, SST);
971    
972                    setAsString(small("1.5.1"), VERSION, VECMATH);
973                    setAsString(small("2007"), DATE, VECMATH);
974                    setAsString(small("other"), LICENCE, VECMATH);
975                    setAsString(notSupported(), JAVA14, VECMATH);
976                    setAsString(yes(), JAVA5, VECMATH);
977                    setAsString(yes(), JAVA6, VECMATH);
978                    setAsString(notSupported(), MULTITHREADED, VECMATH);
979                    setAsString(yes(), INPLACE, VECMATH);
980                    setAsString(yes(), TRANSPOSE, VECMATH);
981                    setAsString(notSupported(), SCALE, VECMATH);
982                    setAsString(yes(), PLUSMINUS, VECMATH);
983                    setAsString(notSupported(), CACHEDRESULTS, VECMATH);
984                    setAsString(yes(), DENSEAA, VECMATH);
985                    setAsString(notSupported(), DENSESA, VECMATH);
986                    setAsString(notSupported(), DENSEBLOCK, VECMATH);
987                    setAsString(notSupported(), SPARSEDOK, VECMATH);
988                    setAsString(notSupported(), SPARSELIL, VECMATH);
989                    setAsString(notSupported(), SPARSECDS, VECMATH);
990                    setAsString(notSupported(), SPARSECRS, VECMATH);
991                    setAsString(notSupported(), SPARSEYALE, VECMATH);
992                    setAsString(notSupported(), COMPLEX, VECMATH);
993                    setAsString(yes(), DOUBLE, VECMATH);
994                    setAsString(notSupported(), FLOAT, VECMATH);
995                    setAsString(notSupported(), BIGDECIMAL, VECMATH);
996                    setAsString(yes(), D2, VECMATH);
997                    setAsString(notSupported(), D3, VECMATH);
998                    setAsString(notSupported(), D3PLUS, VECMATH);
999                    setAsString(yes(), INV, VECMATH);
1000                    setAsString(notSupported(), SOLVE, VECMATH);
1001                    setAsString(circle() + footnote("e", ERRORTEXT), SVD, VECMATH);
1002                    setAsString(square() + footnote(NONSINGULARLETTER, NONSINGULARTEXT), LU, VECMATH);
1003                    setAsString(notSupported(), QR, VECMATH);
1004                    setAsString(notSupported(), EIG, VECMATH);
1005                    setAsString(notSupported(), CHOL, VECMATH);
1006                    setAsString("org.ujmp.vecmath", PACKAGE, VECMATH);
1007    
1008            }
1009    
1010            public String yes() {
1011                    switch (format) {
1012                    case LATEX:
1013                            return "\\bf{$+$}";
1014                    default:
1015                            return "yes";
1016                    }
1017            }
1018    
1019            public String both() {
1020                    switch (format) {
1021                    case LATEX:
1022                            return "\\bf{$+/-$}";
1023                    default:
1024                            return "configurable";
1025                    }
1026            }
1027    
1028            public String all() {
1029                    switch (format) {
1030                    case LATEX:
1031                            return "\\scalebox{0.6}[1.0]{$\\square$}\\,$\\square$\\,\\scalebox{1.0}[0.6]{$\\square$}";
1032                    default:
1033                            return "all";
1034                    }
1035            }
1036    
1037            public String squareTall() {
1038                    switch (format) {
1039                    case LATEX:
1040                            return "\\scalebox{0.6}[1.0]{$\\square$}\\,$\\square$";
1041                    default:
1042                            return "square, tall";
1043                    }
1044            }
1045    
1046            public String square() {
1047                    switch (format) {
1048                    case LATEX:
1049                            return "$\\square$";
1050                    default:
1051                            return "square";
1052                    }
1053            }
1054    
1055            public String tall() {
1056                    switch (format) {
1057                    case LATEX:
1058                            return "$\\tall$";
1059                    default:
1060                            return "tall";
1061                    }
1062            }
1063    
1064            public String fat() {
1065                    switch (format) {
1066                    case LATEX:
1067                            return "$\\fat$";
1068                    default:
1069                            return "fat";
1070                    }
1071            }
1072    
1073            public String circle() {
1074                    switch (format) {
1075                    case LATEX:
1076                            return "$\\circ$";
1077                    default:
1078                            return "square";
1079                    }
1080            }
1081    
1082            public String notSupported() {
1083                    switch (format) {
1084                    case LATEX:
1085                            return "\\bf{$-$}";
1086                    default:
1087                            return "yes";
1088                    }
1089            }
1090    
1091            public String unknown() {
1092                    switch (format) {
1093                    default:
1094                            return "?";
1095                    }
1096            }
1097    
1098            public String turn(String text) {
1099                    switch (format) {
1100                    case LATEX:
1101                            return "\\begin{turn}{90}" + text + "\\end{turn}";
1102                    default:
1103                            return "";
1104                    }
1105            }
1106    
1107            public String small(String text) {
1108                    switch (format) {
1109                    case LATEX:
1110                            return "\\small " + text;
1111                    default:
1112                            return text;
1113                    }
1114            }
1115    
1116            public String footnote(String footnote, String text) {
1117                    switch (format) {
1118                    case LATEX:
1119                            String f = "\\footnotesize{$^\\mathrm{" + footnote + "}$ " + text + "}";
1120                            if (!footnotes.contains(f)) {
1121                                    footnotes.add(f);
1122                            }
1123                            return "$^{\\mathrm{" + footnote + "}}$";
1124                    default:
1125                            f = footnote + " " + text;
1126                            if (!footnotes.contains(f)) {
1127                                    footnotes.add(f);
1128                            }
1129                            return text;
1130                    }
1131            }
1132    
1133            public List<String> getFootnotes() {
1134                    return footnotes;
1135            }
1136    
1137            public static void main(String[] args) throws Exception {
1138                    MatrixLibraries ml = new MatrixLibraries(MatrixLibrariesFormat.LATEX);
1139                    Matrix m = ml.deleteRows(Ret.NEW, ml.getRowCount() - 1);
1140                    String s = m.exportToString(FileFormat.TEX);
1141                    s = s.replaceAll("table", "sidewaystable");
1142                    s = s.replaceAll("\\\\centering", "");
1143                    s = s.replaceAll("\\\\toprule", "");
1144                    s = s
1145                                    .replaceAll(
1146                                                    "\\\\begin\\{tabular\\}",
1147                                                    "\\\\caption{Overview of matrix libraries in Java}\n\\\\bigskip\n\\\\begin{centering}\n\\\\scalebox{0.8}{%\n\\\\begin{tabular}");
1148                    s = s.replaceAll("latest version", "\\\\toprule\nlatest version");
1149                    s = s.replaceAll("\\\\end\\{sidewaystable\\}", "");
1150                    s = s.replaceAll("\\\\end\\{tabular\\}", "\\\\end{tabular}}\n\\\\end{centering}");
1151                    s = s.replaceAll("version &", "\\\\toprule\nversion &");
1152                    s = s.replaceAll("Java 1.4 &", "\\\\midrule\nJava 1.4 &");
1153                    s = s.replaceAll("multithreaded &", "\\\\midrule\nmultithreaded &");
1154                    s = s.replaceAll("dense SA", "\\\\midrule\ndense SA");
1155                    s = s.replaceAll("sparse DOK", "\\\\midrule\nsparse DOK");
1156                    s = s.replaceAll("double &", "\\\\midrule\ndouble &");
1157                    s = s.replaceAll("2D &", "\\\\midrule\n2D &");
1158                    s = s.replaceAll("transpose &", "\\\\midrule\ntranspose &");
1159                    s = s.replaceAll("inverse &", "\\\\midrule\ninverse &");
1160                    s = s + "\\medskip\n";
1161                    s = s
1162                                    + "\\begin{tabular}{p{0.25\\textwidth}p{0.25\\textwidth}p{0.25\\textwidth}p{0.25\\textwidth}}\n";
1163                    s += "\\renewcommand{\\tabcolsep}{30pt}";
1164                    List<String> fn = ml.getFootnotes();
1165                    Collections.sort(fn);
1166                    for (int i = 0; i < fn.size(); i++) {
1167                            String f = fn.get(i);
1168                            s = s + f;
1169                            if (i % 4 == 3) {
1170                                    s = s + "\\\\\n";
1171                            } else {
1172                                    s = s + " & ";
1173                            }
1174                    }
1175                    s = s + "\\end{tabular}\n";
1176                    s = s + "\\end{sidewaystable}";
1177                    System.out.println(s);
1178            }
1179    
1180            public long getColumnForPackage(String label) {
1181                    for (long c = getColumnCount(); --c != -1;) {
1182                            String p = getAsString(PACKAGE, c);
1183                            if (label.equals(p)) {
1184                                    return c;
1185                            }
1186                    }
1187                    return -1;
1188            }
1189    }