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 123 124 125 126 127 128 129 130 131
|
<p align="center">
<img alt="logo" src="https://github.com/flatsurf/e-antic/raw/master/logo.svg?sanitize=true" width="300px">
</p>
<h1><p align="center">e-antic</p></h1>
<p align="center">
<img src="https://img.shields.io/badge/License-LGPL_3.0_or_later-blue.svg" alt="License: LGPL 3.0 or later">
<a href="https://github.com/flatsurf/e-antic/actions/workflows/test.yml"><img src="https://github.com/flatsurf/e-antic/actions/workflows/test.yml/badge.svg" alt="Test"></a>
<a href="https://codecov.io/gh/flatsurf/e-antic"><img src="https://codecov.io/gh/flatsurf/e-antic/branch/master/graph/badge.svg" alt="Coverage"></a>
<a href="https://doi.org/10.5281/zenodo.5166953"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.5166953.svg" alt="DOI 10.5281/zenodo.5166953"></a>
</p>
<p align="center">(Real Embedded) Algebraic Number Theory</p>
<hr>
e-antic is a C/C++/Python library to deal with real embedded number fields
built on top of [ANTIC](https://github.com/wbhart/antic). It aims to provide
the fastest possible exact arithmetic operations and comparisons.
Source tarballs can be downloaded at https://github.com/flatsurf/e-antic/releases.
This repository contains two related projects:
* **libeantic** a C/C++ library
* **pyeantic** a Python wrapper for **libeantic**
The dependencies are:
- [FLINT 2.6, 2.7, 2.8, or 2.9](https://flintlib.org)
- [Arb](https://arblib.org/)
- [ANTIC](https://github.com/wbhart/antic)
- [Boost](https://www.boost.org/) for the C++ library
- [cppyy](https://cppyy.readthedocs.io/en/latest/) for the Python wrapper
## Build from the Source Code Repository or a Tarball
If you have cloned the source directory you will need to setup the
configure script and Makefile using autotools. That is
git submodule update --init
./bootstrap
If you obtained a tarball of the sources or if the preceding step
worked, you just have to do
./configure
make
make check # to run our test suite
make install # to install into /usr/local
If you happen to have any of FLINT, Arb, or ANTIC installed in a non standard
directory, you will have to specify the `CPPFLAGS` and `LDFLAGS` variables for
the configure script
./configure CPPFLAGS=-I/my/path/include LDFLAGS=-L/my/path/lib
For best performance run `CFLAGS="-O3" CXXFLAGS="-O3" ./configure` instead of
`./configure`. You might want to add `-g3` to `CFLAGS` and `CXXFLAGS` which
does not hurt performance but gives a better debugging experience. For the best
debugging experience, you might want to replace `-O3` with `-Og` or even `-O0`
but the latter results in poor performance.
If your compiler supports it, you can try to add `-fvisibility=hidden
-fvisibility-inlines-hidden` to your `CXXFLAGS`. This hides internal bits in
the resulting library which have lead to crashes in the past due to conflicting
header-only libraries.
If your linker supports it, you should use `./configure --with-version-script`
to shrink the resulting shared library to an exact curated list of versioned
symbols.
perf works well to profile when you make sure that `CFLAGS` and `CXXFLAGS`
contain `-fno-omit-framepointer`. You can then for example run our test suite
with `perf record --call-graph dwarf make check`. Apart from perf itself there
are several ways to analyze the output,
[hotspot](https://github.com/KDAB/hotspot) might be the most convenient one at
the time of this writing.
For more detailed but generic instructions please refer to the INSTALL file.
## Installation
See [our documentation](https://flatsurf.github.io/e-antic/libeantic/#installation)
for installation instructions.
## Run with binder in the Cloud
You can try out the projects in this repository in a very limited environment
online by clicking the following links:
* **libeantic** [](https://mybinder.org/v2/gh/flatsurf/e-antic/2.0.2?filepath=binder%2FSample.libeantic.ipynb)
* **pyeantic** [](https://mybinder.org/v2/gh/flatsurf/e-antic/2.0.2?filepath=binder%2FSample.pyeantic.ipynb)
## Build with conda-forge Dependencies
To build all of e-antic, you need a fairly recent C++ compiler and probably
some packages that might not be readily available on your system. If you don't
want to use your distribution's packages, you can use these dependencies from
[conda-forge](https://conda-forge.org). Download and install
[Mambaforge](https://github.com/conda-forge/miniforge#mambaforge), then run
mamba create -n e-antic-build ccache
mamba env update -n e-antic-build -f libeantic/environment.yml
mamba env update -n e-antic-build -f pyeantic/environment.yml
mamba env update -n e-antic-build -f doc/environment.yml
conda activate e-antic-build
export CC="ccache cc" # to speed up future compilation
export CXX="ccache c++" # to speed up future compilation
git clone --recurse-submodules https://github.com/flatsurf/e-antic.git
cd e-antic
./bootstrap
./configure --prefix="$CONDA_PREFIX"
make
make check # to run our test suite
make html # to build the documentation
## How to Cite this Project
If you have used this project in the preparation of a publication, please cite
it as described [on our zenodo page](https://doi.org/10.5281/zenodo.5166953).
## Acknowledgements
* Julian Rüth's contributions to this project have been supported by the Simons
Foundation Investigator grant of Alex Eskin.
## Maintainers
* [@saraedum](https://github.com/saraedum)
* [@videlec](https://github.com/videlec)
|