| Download
Testing latest pari + WASM + node.js... and it works?! Wow.
Project: 🧮 JSage: wasm - sagemath - zig
Views: 1566License: GPL3
Image: ubuntu2004
% Copyright (c) 2000 The PARI Group1%2% This file is part of the PARI/GP documentation3%4% Permission is granted to copy, distribute and/or modify this document5% under the terms of the GNU General Public License6\appendix{Installation Guide for the UNIX Versions}78\def\tocwrite#1{}9\section{Required tools}1011Compiling PARI requires an \kbd{ANSI C} or a \kbd{C++} compiler. If you do12not have one, we suggest that you obtain the \kbd{gcc/g++} compiler. As for13all GNU software mentioned afterwards, you can find the most convenient site14to fetch \kbd{gcc} at the address15$$\url{http://www.gnu.org/order/ftp.html}$$16%17(On Mac OS X, this is also provided in the \kbd{Xcode} tool18suite; or the lightweight ``Command-line tools for \kbd{Xcode}''.) You can19certainly compile PARI with a different compiler, but the PARI kernel takes20advantage of optimizations provided by \kbd{gcc}. This results in at least2120\% speedup on most architectures.2223\misctitle{Optional libraries and programs} The following programs and libraries are useful24in conjunction with \kbd{gp}, but not mandatory. In any case, get them before25proceeding if you want the functionalities they provide. All of them are free.26The download page on our website27$$28\url{http://pari.math.u-bordeaux.fr/download.html}29$$30contains pointers on how to get these.3132\item GNU \kbd{MP} library. This provides an alternative multiprecision33kernel, which is faster than PARI's native one, but unfortunately binary34incompatible, so the resulting PARI library SONAME is libpari-gmp.3536\item GNU \kbd{readline} library. This provides line editing under37\kbd{gp}, an automatic context-dependent completion, and an editable history38of commands.3940\item GNU \kbd{emacs} and the \tet{PariEmacs} package. The \kbd{gp}41calculator can be run in an Emacs buffer, with all the obvious advantages if42you are familiar with this editor. Note that \kbd{readline} is still useful43in this case since it provides a better automatic completion than is provided44by Emacs's GP-mode.4546\item GNU \kbd{gzip/gunzip/gzcat} package enables \kbd{gp} to read47compressed data.4849\item \kbd{perl} provides extended online help (full text from the50manual) about functions and concepts. The script handling this online help51can be used under \kbd{gp} or independently.5253\section{Compiling the library and the \kbd{gp} calculator}5455\subsec{Basic configuration} Type5657\kbd{./Configure}5859\noindent in the toplevel directory. This attempts to configure PARI/GP60without outside help. Note that if you want to install the end product in61some nonstandard place, you can use the \kbd{--prefix} option, as in6263\kbd{./Configure --prefix=}\var{/an/exotic/directory}6465\noindent (the default prefix is \kbd{/usr/local}). For example, to build a66package for a Linux distribution, you may want to use6768\kbd{./Configure --prefix=/usr}6970This phase extracts some files and creates a \var{build directory}, names71\kbd{O}\var{osname}\kbd{-}\var{arch}, where the72object files and executables will be built. The73\var{osname} and \var{arch} components depends on your architecture and74operating system, thus you can build PARI/GP for several different machines75from the same source tree (the builds are independent and can be done76simultaneously).7778Decide whether you agree with what \kbd{Configure} printed on your screen, in79particular the architecture, compiler and optimization flags. Look for80messages prepended by \kbd{\#\#\#}, which report genuine problems.81Look especially for the \kbd{gmp}, \kbd{readline} and \kbd{X11} libraries,82and the \kbd{perl} and \kbd{gunzip} (or \kbd{zcat}) binaries.83If anything should have been found and was not, consider that \kbd{Configure}84failed and follow the instructions in section~3.8586The \kbd{Configure} run creates a file \kbd{config.log} in the build87directory, which contains debugging information --- in particular, all88messages from compilers --- that may help diagnose problems. This file89is erased and recreated from scratch each time \kbd{Configure} is run.9091\subsec{Advanced configuration}92\kbd{Configure} accepts many other flags, and you may use any number of them93to build quite a complicated configuration command. See \kbd{Configure94--help} for a complete list. In particular, there are sets of flags related95to GNU MP (\kbd{--with-gmp*}) and GNU readline library96(\kbd{--with-readline*}).9798Here, we focus on the nonobvious ones:99100\kbd{--tune}: fine tunes the library for the host used for compilation. This101adjusts thresholds by running a large number of comparative tests and creates102a file \kbd{tune.h} in the build directory, that will be used from now on,103overriding the ones in \kbd{src/kernel/none/} and \kbd{src/kernel/gmp/}. It104will take a while: about 30 minutes. Expect a small105performance boost, perhaps a 10\% speed increase106compared to default settings.107108If you are using GMP, tune it first, then PARI. Make sure you tune PARI on109the machine that will actually run your computations. Do not use a heavily110loaded machine for tunings.111112You may speed up the compilation by using a parallel make:113\bprog114env MAKE="make -j4" Configure --tune115@eprog116117\kbd{--graphic=}\var{lib}: enables a particular graphic library.118The default is \kbd{X11} on most platforms, but PARI can use119\kbd{Qt}, \kbd{fltk} or \kbd{win32} (GDI), or even dump a \kbd{ps}120or \kbd{svg} file and open it using an external viewer.121122\kbd{--time=}\var{function}: chooses a timing function. The default usually123works fine, however you can use a different one that better fits your needs.124PARI can use \kbd{getrusage}, \kbd{clock\_gettime}, \kbd{times} or125\kbd{ftime} as timing functions. (Not all timing functions are available on126all platforms.) The three first functions give timings in terms of CPU usage127of the current task, approximating the complexity of the algorithm. The last128one, \kbd{ftime}, gives timings in terms of absolute (wall-clock) time.129Moreover, the \kbd{clock\_gettime} function is more precise, but much slower130(at the time of this writing), than \kbd{getrusage} or \kbd{times}.131132\kbd{--with-runtime-perl=}\var{perl}: absolute path to the runtime \kbd{perl}133binary to be used by the \kbd{gphelp} and \kbd{tex2mail} scripts. Defaults134to the path found by \kbd{Configure} on the build host (usually135\kbd{/usr/bin/perl}). For cross-compiling builds, when the target and build136hosts have mismatched configurations; suggested values are137138\kbd{/usr/bin/env perl}: the first \kbd{perl} executable found in user's139\kbd{PATH},140141\kbd{/usr/bin/perl}: \kbd{perl}'s standard location.142143The remaining options are specific to parallel programming. We provide an144\emph{Introduction to parallel GP programming} in the file145\kbd{doc/parallel.dvi}, and to multi-threaded \kbd{libpari} programs146in Appendix~D. Beware that these options change the library ABI:147148\kbd{--mt=}\var{engine}: specify the engine used for parallel computations.149Supported value are150151\item single: (default) no parallellism.152153\item pthread: use POSIX threads. This is well-suited for multi-core systems.154Setting this option also set \kbd{--enable-tls}, see below. This option155requires the pthread library.156For benchmarking, it is often useful to set \kbd{--time=ftime} so that GP157report wall-clock instead of the sum of the time spent by each thread.158159\item mpi: use the MPI interface to parallelism. This allows to take160advantage of clusters using MPI. This option requires a MPI library.161It is usually necessary to set the environment variable \kbd{CC} to162\kbd{mpicc}.163164\kbd{--enable-tls}: build the thread-safe version of the library. Implied by165\kbd{--mt=pthread}. This tends to slow down the \emph{shared} library166\kbd{libpari.so} by about $25\%$, so you probably want to use the static167library \kbd{libpari.a} instead.168169\subsec{Compilation} To compile the \kbd{gp} binary and build the170documentation, type171172\kbd{make all}173174\noindent To only compile the \kbd{gp} binary, type175176\kbd{make gp}177178\noindent in the toplevel directory. If your \kbd{make} program supports179parallel make, you can speed up the process by going to the build180directory that \kbd{Configure} created and doing a parallel make here, for181instance \kbd{make -j4} with GNU make. It should even work from the toplevel182directory.183184\subsec{Basic tests}185186To test the binary, type \kbd{make bench}. This runs a quick series of187tests, for a few seconds on modern machines.188189In many cases, this will also build a different binary (named \kbd{gp-sta} or190\kbd{gp-dyn}) linked in a slightly different way and run the tests with both.191(In exotic configurations, one may pass all the tests while the other fails192and we want to check for this.) To test only the default binary, use193\kbd{make dobench} which starts the bench immediately.194195If a \kbd{[BUG]} message shows up, something went wrong. The testing utility196directs you to files containing the differences between the test output and197the expected results. Have a look and decide for yourself if something is198amiss. If it looks like a bug in the Pari system, we would appreciate a199report, see the last section.200201\subsec{Cross-compiling}202203When cross-compiling, you can set the environment variable \kbd{RUNTEST} to a204program that is able to run the target binaries, e.g. an emulator. It will be205used for both the \kbd{Configure} tests and \kbd{make bench}.206207\section{Troubleshooting and fine tuning}208In case the default \kbd{Configure} run fails miserably, try209210\kbd{./Configure -a}211212\noindent (interactive mode) and answer all the questions: there are about 30213of them, and default answers are provided. If you accept all default answers,214\kbd{Configure} will fail just the same, so be wary. In any case, we would215appreciate a bug report (see the last section).216217\subsec{Installation directories} The precise default destinations are as218follows: the \kbd{gp} binary, the scripts \kbd{gphelp} and \kbd{tex2mail} go219to \kbd{\$prefix/bin}. The pari library goes to \kbd{\$prefix/lib} and220include files to \kbd{\$prefix/include/pari}. Other system-dependent data go221to \kbd{\$prefix/lib/pari}.222223Architecture independent files go to various subdirectories of224\kbd{\$share\_prefix}, which defaults to \kbd{\$prefix/share}, and can be225specified via the \kbd{--share-prefix} argument. Man pages go into226\kbd{\$share\_prefix/man}, and other system-independent data227under \kbd{\$share\_prefix/pari}: documentation,228sample GP scripts and C code, extra packages like \kbd{elldata} or229\kbd{galdata}.230231\noindent You can also set directly \kbd{--bindir} (executables),232\kbd{--libdir} (library), \kbd{--includedir} (include files), \kbd{--mandir}233(manual pages), \kbd{--datadir} (other architecture-independent data), and234finally \kbd{--sysdatadir} (other architecture-dependent data).235236\subsec{Environment variables} \kbd{Configure} lets the following environment237variable override the defaults if set:238239\kbd{CC}: C compiler.240241\kbd{DLLD}: Dynamic library linker.242243\kbd{LD}: Static linker.244245\noindent For instance, \kbd{Configure} may avoid \kbd{/bin/cc} on some246architectures due to various problems which may have been fixed in your247version of the compiler. You can try248249\kbd{env CC=cc Configure}250251\noindent and compare the benches. Also, if you insist on using a \kbd{C++}252compiler and run into trouble with a fussy \kbd{g++}, try to use253\kbd{g++ -fpermissive}.254255256\noindent The contents of the following variables are \emph{appended} to the257values computed by \kbd{Configure}:258259\kbd{CFLAGS}: Flags for \kbd{CC}.260261\kbd{CPPFLAGS}: Flags for \kbd{CC} (preprocessor).262263\kbd{LDFLAGS}: Flags for \kbd{LD}.264265\noindent The contents of the following variables are \emph{prepended} to266the values computed by \kbd{Configure}:267268\kbd{C\_INCLUDE\_PATH} is prepended to the list of directories269searched for include files. Note that adding \kbd{-I} flags to270\kbd{CFLAGS} is not enough since \kbd{Configure} sometimes271relies on finding the include files and parsing them, and it does not272parse \kbd{CFLAGS} at this time.273274\kbd{LIBRARY\_PATH} is prepended to the list of directories275searched for libraries.276277\noindent You may disable inlining by adding \kbd{-DDISABLE\_INLINE} to278\kbd{CFLAGS}, and prevent the use of the \kbd{volatile} keyword with279\kbd{-DDISABLE\_VOLATILE}.280281\subsec{Debugging/profiling}: If you also want to debug the PARI library,282283\kbd{Configure -g}284285\noindent creates a directory \kbd{O$xxx$.dbg} containing a special286\kbd{Makefile} ensuring that the \kbd{gp} and PARI library built there is287suitable for debugging. If you want to288profile \kbd{gp} or the library, using \kbd{gprof} for instance,289290\kbd{Configure -pg}291292\noindent will create an \kbd{O$xxx$.prf} directory where a suitable version293of PARI can be built.294295The \kbd{gp} binary built above with \kbd{make all} or \kbd{make gp} is296optimized. If you have run \kbd{Configure -g} or \kbd{-pg} and want to build297a special purpose binary, you can \kbd{cd} to the \kbd{.dbg} or \kbd{.prf}298directory and type \kbd{make gp} there. You can also invoke \kbd{make gp.dbg}299or \kbd{make gp.prf} directly from the toplevel.300301\subsec{Multiprecision kernel} The kernel can be specified via the302303\kbd{--kernel=\emph{fully\_qualified\_kernel\_name}}304305\noindent switch. The PARI kernel consists of two levels: Level 0 (operation306on words) and Level 1 (operation on multi-precision integers and reals),307which can take the following values.308309Level 0: \kbd{auto} (as detected), \kbd{none} (portable C) or310one of the assembler micro-kernels311\bprog312alpha313hppa hppa64314ia64315ix86 x86_64316m68k317ppc ppc64318sparcv7 sparcv8_micro sparcv8_super319@eprog320321Level 1: \kbd{auto} (as detected), \kbd{none} (native code only), or \kbd{gmp}322323\noindent\item A fully qualified kernel name is of the form324\kbd{\var{Level0}-\var{Level1}}, the default value being \kbd{auto-auto}.325326\noindent\item A \emph{name} not containing a dash '\kbd{-}' is an alias327for a fully qualified kernel name. An alias stands for328\kbd{\emph{name}-none}, but \kbd{gmp} stands for \kbd{auto-gmp}.329330\subsec{Problems related to readline}331\kbd{Configure} does not try very hard to find the \kbd{readline} library and332include files. If they are not in a standard place, it will not find them.333You can invoke \kbd{Configure} with one of the following arguments:334335\kbd{--with-readline[=\emph{prefix to \kbd{lib/libreadline}.xx and336\kbd{include/readline.h}}]}337338\kbd{--with-readline-lib=\emph{path to \kbd{libreadline}.xx}}339340\kbd{--with-readline-include=\emph{path to \kbd{readline.h}}}341342\misctitle{Known problems}343344\item on Linux: Linux distributions have separate \kbd{readline} and345\kbd{readline-devel} packages. You need both of them installed to346compile gp with readline support. If only \kbd{readline} is installed,347\kbd{Configure} will complain. \kbd{Configure} may also complain about a348missing libncurses.so, in which case, you have to install the349\kbd{ncurses-devel} package (some distributions let you install350\kbd{readline-devel} without \kbd{ncurses-devel}, which is a bug in351their package dependency handling).352353\item on OS X.4 or higher: these systems comes equipped with a fake354\kbd{readline}, which is not sufficient for our purpose. As a result, gp is355built without readline support. Since \kbd{readline} is not trivial to356install in this environment, a step by step solution can be found in the PARI357FAQ, see358$$359\url{http://pari.math.u-bordeaux.fr/}.360$$361362\subsec{Testing}363364\subsubsec{Known problems} if \kbd{BUG} shows up in \kbd{make bench}365366\item If when running \kbd{gp-dyn}, you get a message of the form367368\kbd{ld.so: warning: libpari.so.$xxx$ has older revision than expected $xxx$}369370\noindent (possibly followed by more errors), you already have a dynamic PARI371library installed \emph{and} a broken local configuration. Either remove the372old library or unset the \kbd{LD\_LIBRARY\_PATH} environment variable. Try to373disable this variable in any case if anything \emph{very} wrong occurs with374the \kbd{gp-dyn} binary, like an Illegal Instruction on startup. It does not375affect \kbd{gp-sta}.376377\item Some implementations of the \kbd{diff} utility (on HPUX for378instance) output \kbd{No differences encountered} or some similar379message instead of the expected empty input, thus producing a spurious380\kbd{[BUG]} message.381382\subsubsec{Some more testing} [{\sl Optional\/}]383384You can test \kbd{gp} in compatibility mode with \kbd{make test-compat}. If385you want to test the graphic routines, use \kbd{make test-ploth}. You will386have to click on the mouse button after seeing each image. There will be387eight of them, probably shown twice (try to resize at least one of them as a388further test).389390The \kbd{make bench}, \kbd{make test-compat} and \kbd{make test-ploth} runs391all produce a Postscript file \kbd{pari.ps} in \kbd{O$xxx$} which you can392send to a Postscript printer. The output should bear some similarity to the393screen images.394395\subsubsec{Heavy-duty testing} [{\sl Optional\/}]396There are a few extra tests which should be useful only for developers.397398\kbd{make test-kernel} checks whether the low-level kernel seems to work,399and provides simple diagnostics if it does not. Only useful if \kbd{make400bench} fails horribly, e.g.~things like \kbd{1+1} do not work.401402\kbd{make test-all} runs all available test suites. Thorough, but slow. Some403of the tests require extra packages (\kbd{elldata}, \kbd{galdata}, etc.)404to be available. If you want to test such an extra package \emph{before}405\kbd{make install} (which would install it to its final location, where406\kbd{gp} expects to find it), run407\bprog408env GP_DATA_DIR=$PWD/data make test-all409@eprog\noindent from the PARI toplevel directory, otherwise the test will410fail.411412\kbd{make test-io} tests writing to and reading from files. It requires413a working \kbd{system()} command (fails on Windows + MingW).414415\kbd{make test-time} tests absolute and relative timers. This test has a416tendency to fail when the machine is heavily loaded or if the granularity417of the chosen system timer is bigger than 2ms. Try it a few times before418reporting a problem.419420\kbd{make test-install} tests the GP function \kbd{install}. This may not be421available on your platform, triggering an error message (``not yet available422for this architecture''). The implementation may be broken on your platform423triggering an error or a crash when an install'ed function is used.424425\section{Installation} When everything looks fine, type426427\kbd{make install}428429\noindent You may have to do this with superuser privileges, depending on the430target directories. (Tip for MacOS X beginners: use \kbd{sudo make install}.)431In this case, it is advised to type \kbd{make all} first to avoid running432unnecessary commands as \kbd{root}.433434\misctitle{Caveat} Install directories are created honouring your \kbd{umask}435settings: if your umask is too restrictive, e.g.~\kbd{077}, the installed436files will not be world-readable. (Beware that running \kbd{sudo} may change437your user umask.)438439This installs in the directories chosen at \kbd{Configure} time the default440\kbd{gp} executable (probably \kbd{gp-dyn}) under the name \kbd{gp}, the441default PARI library (probably \kbd{libpari.so}), the necessary include442files, the manual pages, the documentation and help scripts.443444To save on disk space, you can manually \kbd{gzip} some of the documentation445files if you wish: \kbd{usersch*.tex} and all \kbd{dvi} files (assuming your446\kbd{xdvi} knows how to deal with compressed files); the online-help system447can handle it.448449\subsec{Static binaries and libraries}450By default, if a dynamic library \kbd{libpari.so} can be built, the \kbd{gp}451binary we install is \kbd{gp-dyn}, pointing to \kbd{libpari.so}. On the other452hand, we can build a \kbd{gp} binary into which the \kbd{libpari} is453statically linked (the library code is copied into the binary); that binary454is not independent of the machine it was compiled on, and may still refer to455other dynamic libraries than \kbd{libpari}.456457You may want to compile your own programs in the same way, using the static458\kbd{libpari.a} instead of \kbd{libpari.so}. By default this static library459\kbd{libpari.a} is not created. If you want it as well, use the target460\kbd{make install-lib-sta}. You can install a statically linked \kbd{gp} with461the target \kbd{make install-bin-sta}. As a rule, programs linked statically462(with \kbd{libpari.a}) may be slightly faster (about 5\% gain, possibly463up to 20\% when using \kbd{pthreads}), but use more disk space and take more464time to compile. They are also harder to upgrade: you will have to recompile465them all instead of just installing the new dynamic library. On the other466hand, there is no risk of breaking them by installing a new pari library.467468\subsec{Extra packages} The following optional packages endow PARI with some469extra capabilities:470471\item \kbd{elldata}: This package contains the elliptic curves in472John Cremona's database. It is needed by the functions \kbd{ellidentify},473\kbd{ellsearch}, \kbd{forell} and can be used by \kbd{ellinit} to initialize a curve given by its standard code.474475\item \kbd{galdata}: The default \kbd{polgalois} function can only476compute Galois groups of polynomials of degree less or equal to 7. Install477this package if you want to handle polynomials of degree bigger than 7 (and478less than 11).479480\item \kbd{seadata}: This package contains the database of modular481polynomials extracted from the ECHIDNA databases and computed by David R.482Kohel. It is used to speed up the functions \kbd{ellap}, \kbd{ellcard} and483\kbd{ellgroup} for primes larger than $10^{20}$.484485\item \kbd{galpol}: This package contains the GALPOL database of polynomials486defining Galois extensions of the rationals, accessed by \kbd{galoisgetpol}.487488\medskip489490To install package \emph{pack}, you need to fetch the separate archive:491\emph{pack}\kbd{.tgz} which you can download from the \kbd{pari} server.492Copy the archive in the PARI toplevel directory, then extract its493contents; these will go to \kbd{data/\emph{pack}/}. Typing \kbd{make494install} installs all such packages.495496\subsec{The \kbd{GPRC} file} Copy the file \kbd{misc/gprc.dft} (or497\kbd{gprc.dos} if you are using \kbd{GP.EXE}) to \kbd{\$HOME/.gprc}. Modify498it to your liking. For instance, if you are not using an ANSI terminal,499remove control characters from the \kbd{prompt} variable. You can also500enable colors.501502If desired, read \kbd{\$datadir/misc/gpalias} from the \kbd{gprc}503file, which provides some common shortcuts to lengthy names; fix the path in504gprc first. (Unless you tampered with this via Configure, \kbd{datadir} is505\kbd{\$prefix/share/pari}.) If you have superuser privileges and want to506provide system-wide defaults, copy your customized \kbd{.gprc} file to507\kbd{/etc/gprc}.508509In older versions, \kbd{gphelp} was hidden in pari lib directory and was not510meant to be used from the shell prompt, but not anymore. If gp complains it511cannot find \kbd{gphelp}, check whether your \kbd{.gprc} (or the system-wide512\kbd{gprc}) does contain explicit paths. If so, correct them according to the513current \kbd{misc/gprc.dft}.514515\section{Getting Started}516517\subsec{Printable Documentation} Building gp with \kbd{make all} also builds518its documentation. You can also type directly \kbd{make doc}. In any case,519you need a working (plain) \TeX\ installation.520521After that, the \kbd{doc} directory contains various \kbd{dvi} files:522\kbd{libpari.dvi} (manual for the PARI library), \kbd{users.dvi} (manual523for the \kbd{gp} calculator), \kbd{tutorial.dvi} (a tutorial), and524\kbd{refcard.dvi} (a reference card for GP). You can send these files to your525favorite printer in the usual way, probably via \kbd{dvips}. The reference526card is also provided as a \kbd{PostScript} document, which may be easier to527print than its \kbd{dvi} equivalent (it is in Landscape orientation and528assumes A4 paper size).529530\noindent If \kbd{pdftex} is part of your \TeX\ setup, you can produce these531documents in PDF format, which may be more convenient for online browsing532(the manual is complete with hyperlinks); type533534\kbd{make docpdf}535536\noindent All these documents are available online from PARI home page537(see the last section).538539\subsec{C programming} Once all libraries and include files are installed,540you can link your C programs to the PARI library. A sample makefile541\kbd{examples/Makefile} is provided to illustrate the use of the various542libraries. Type \kbd{make all} in the \kbd{examples} directory to see how543they perform on the \kbd{extgcd.c} program, which is commented in the544manual.545546This should produce a statically linked binary \kbd{extgcd-sta}547(standalone), a dynamically linked binary \kbd{extgcd-dyn} (loads libpari548at runtime) and a shared library \kbd{libextgcd}, which can be used from549\kbd{gp} to \kbd{install} your new \kbd{extgcd} command.550551The standalone binary should be bulletproof, but the other two may fail552for various reasons. If when running \kbd{extgcd-dyn}, you get a message553of the form ``DLL not found'', then stick to statically linked binaries554or look at your system documentation to see how to indicate at linking555time where the required DLLs may be found! (E.g.~on Windows, you will556need to move \kbd{libpari.dll} somewhere in your \kbd{PATH}.)557558\subsec{GP scripts} Several complete sample GP programs are also given in559the \kbd{examples} directory, for example Shanks's SQUFOF factoring method,560the Pollard rho factoring method, the Lucas-Lehmer primality test for561Mersenne numbers and a simple general class group and fundamental unit562algorithm. See the file \kbd{examples/EXPLAIN} for some explanations.563564\subsec{The PARI Community} PARI's home page at the address565$$\url{http://pari.math.u-bordeaux.fr/}$$566%567maintains an archive of mailing lists dedicated to PARI, documentation568(including Frequently Asked Questions), a download area and our Bug Tracking569System (BTS). Bug reports should be submitted online to the BTS, which may be570accessed from the navigation bar on the home page or directly at571$$\url{http://pari.math.u-bordeaux.fr/Bugs/}$$572%573Further information can be found at that address but, to report a574configuration problem, make sure to include the relevant \kbd{*.dif} files in575the \kbd{O$xxx$} directory and the file \kbd{pari.cfg}.576\smallskip577578There are a number of mailing lists devoted to PARI/GP, and most feedback579should be directed there. Instructions and archives can be consulted at580$$ \url{http://pari.math.u-bordeaux.fr/lists-index.html} $$581%582The most important are:583584\item \kbd{pari-announce} (\emph{read-only}): to announce major version585changes. You cannot write to this one, but you should probably subscribe.586587\item \kbd{pari-dev}: for everything related to the development of PARI,588including suggestions, technical questions or patch submissions. Bug reports589can be discussed here, but as a rule it is better to submit them directly590to the BTS.591592\item \kbd{pari-users}: for everything else.593594\noindent You may send an email to the last two without being subscribed.595To subscribe, send an message respectively to596\def\@{@}597\bprog598pari-announce-request@@pari.math.u-bordeaux.fr599pari-users-request@@pari.math.u-bordeaux.fr600pari-dev-request@@pari.math.u-bordeaux.fr601@eprog\noindent with the word \kbd{subscribe} in the \kbd{Subject:}.602You can also write to us at the address603\bprog604pari@@math.u-bordeaux.fr605@eprog\noindent but we cannot promise you will get an individual answer.606\smallskip607608If you have used PARI in the preparation of a paper, please cite it in the609following form (BibTeX format):610611\bprog612@@preamble{\usepackage{url}}613@@manual{PARI2,614organization = "{The PARI~Group}",615title = "{PARI/GP version @vers}",616year = 2021,617address = "Bordeaux",618note = "available from \url{http://pari.math.u-bordeaux.fr/}"619}620@eprog621\smallskip622623\noindent In any case, if you like this software, we would be indebted if you624could send us an email message giving us some information about yourself and625what you use PARI for.626627\medskip628{\bf Good luck and enjoy!}629\vfill\eject630631632