-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathREADME.md
122 lines (91 loc) · 4.08 KB
/
README.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# PML (Polynomial Matrix Library)
Additions to the NTL and FLINT libraries, with a focus on univariate polynomial
matrices, structured matrices, and their applications.
Version 0.3
Warning: the FLINT-based part of PML (flint-extras folder) is work in progress
and currently unstable. Its components are continuously changing as some parts
become obsolete after being integrated in FLINT directly. Furthermore, some of
these components only compile with specific versions of FLINT.
## Authors
Current maintainers:
- Vincent Neiger
- Eric Schost
Contributors:
- Seung Gyu Hyun
- Kevin Tran
## Licensing
PML v0.3 is distributed under the GNU General Public License version 2.0
(GPL-2.0-or-later). This applies to all files in the directory of this README
as well as in all subdirectories. See the file COPYING for a copy of the
license.
PML v0.3 is heavily based on [NTL](https://libntl.org/) and
[FLINT](https://flintlib.org/). See the file `ntl-extras/COPYING_NTL` for
NTL's copyright notice. FLINT is distributed under LGPL 2.1 (GNU Lesser General
Public License), see `flint-extras/COPYING_FLINT` for the license.
## Citing PML
```
@inproceedings{HyunNeigerSchost2019,
author = {Hyun, S. G. and Neiger, V. and Schost, {\'E}.},
title = {Implementations of Efficient Univariate Polynomial Matrix Algorithms and Application to Bivariate Resultants},
year = {2019},
isbn = {9781450360845},
publisher = {ACM},
doi = {10.1145/3326229.3326272},
booktitle = {Proceedings ISSAC 2019},
pages = {235--242},
numpages = {8},
keywords = {algorithms, implementation, resultant, polynomial matrices},
note = {\url{https://github.com/vneiger/pml}},
}
@manual{pml,
key = {PML},
author = {The {PML} team},
title = {{PML}: {P}olynomial {M}atrix {L}ibrary},
year = {2023},
note = {Version 0.3, \url{https://github.com/vneiger/pml}}
}
```
## Installation
If compiling the NTL version, NTL should be installed, version at least 11.3.1
required.
The FLINT version is work in progress, and currently compiles with the latest
git version of FLINT. Currently, some parts of flint-extras may not compile on
processors without avx512 instructions.
Building PML has mostly been tested on linux distributions. Installation relies
on "make", and the documentation relies on Doxygen.
Each directory should contain one or more .h file and subdirectories `src`,
`test`, `timings` (sometimes also `tune`).
Running "make" at the root (of either ntl-extras or flint-extras) (re)builds
the entire library from scratch. Running "make doc" (after "make") builds a
Doxygen documentation that can be found in `ROOT/include/html/index.html`
(building the documentation requires having doxygen and graphviz installed).
The NTL version uses C++ code and .cpp files, whereas the FLINT version uses C
and .c files.
In `src`,
- "make": compile the object files.
- "make clean": clean compilation products.
In `test`, test files should be called test-something.\{c,cpp\}
- "make" or "make clean": removes all executables and check files (.chk)
- "make all": compiles all test files
- "make run": runs all executables, outputs results to something.chk
- "make something.exe": compiles only test-something.\{c,cpp\}
- "make something.chk": runs only test-something
In `timings`, timing files should be called time-something.\{c,cpp\}
- "make" or "make clean": removes all executables and data files (.dat)
- "make all": compiles all timing files
- "make run": runs all executables, outputs results to something.dat
- "make something.exe": compiles only time-something.\{c,cpp\}
- "make something.chk": runs only time-something
## For developers
Code style:
- with vim and emacs, simply respect the modelines
- no hard tabulation
- soft tabulations, 4 spaces
- scope delimiter \{ \} on their own line
- scope delimiters are not required here when they are not required by C++
(e.g. for one-line if or for)
- when creating a new file, add the modelines at the bottom of the file:
```
/* -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
// vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s
```