PARI / GP Häufig gestellte Fragen Dieses Dokument wird von Karim Belabas betreut. Den aktuellen PARI / GP-Betreuer (Feedback Welcome). Es ist bemüht, für alle Versionen von PARI / GP nützlich zu sein, dokumentiert aber vorerst das Verhalten der neuesten Versionen in den Stall - und Testzweigen. Und kann auf Features, die in der Entwicklungs-Version, nur über GIT verfügbar eingeführt. Allgemeine Informationen Was ist PARI / GP PARI / GP ist ein weit verbreitetes Computer-Algebra-System für schnelle Berechnungen in der Zahlentheorie (Faktorisierungen, algebraische Zahlentheorie, elliptische Kurven), sondern enthält auch eine große Anzahl weiterer nützlicher Funktionen zur Berechnung mit mathematischen Entitäten wie Matrizen, Polynome, Potenzreihen, algebraische Zahlen usw. und viele transzendentale Funktionen. PARI ist eine C - Bibliothek (C - kompatibel). Das Schreiben von C (oder C) - Programmen und die Verknüpfung mit libpari ist der einzige Weg, um den vollständigen Satz von PARI-Routinen (Sie können die meisten von ihnen unter gp installieren, aber das ist nicht so portabel). Es wird viel schneller Code für Low-Level-Anwendungen produzieren. Gp ist eine interaktive Shell, die den Zugriff auf PARI-Funktionen ermöglicht und einfacher zu bedienen ist. Low-Level-Scripts sind typischerweise viermal langsamer als der direkt geschriebene C-Code. High-Level-Scripts, deren Laufzeit von einigen Anrufen an PARI-Funktionen dominiert wird, entstehen nicht. GP ist der Name der gps Skriptsprache. Was ist gp2c Es ist der GP-to-C-Compiler. Es kompiliert GP-Skripte auf die Sprache C, wodurch die Aufgabe des Schreibens von PARI-Programmen. Es kann sie automatisch zu Objektcode kompilieren und die resultierenden Funktionen in gp laden. Niedrige gp2c-kompilierte Skripts werden normalerweise 3 oder 4 Mal schneller ausgeführt. Gp2c versteht derzeit nur eine Teilmenge der GP-Sprache und einige Funktionalitäten sind auf Unix-Betriebssysteme beschränkt. Was ist GNU readline Es ist eine Bibliothek, die Linienbearbeitung bietet (Cursorbewegung, Befehlshistorie, Fertigstellung usw.). Alle Anwendungen, die mit dieser Bibliothek erstellt werden, beispielsweise die bash-Shell, profitieren von einer konsistenten und komfortablen Benutzeroberfläche. Es wird dringend empfohlen, um sicherzustellen, dass readline auf Ihrem System vorhanden ist, bevor Sie gp selbst (readline ist in der Windows-Binärdatei, die wir verteilen). In der Tat, vor dem Ausführen von Configure, so dass diese eine Chance, es zu erkennen bekommt. Die gp-Shell funktioniert ohne Zeilenbearbeitung, aber die Eingabe wird langweilig. Was GNU MP GNU MP oder kurz GMP ist, ist eine Multipreßbibliothek, die insbesondere asymptotisch schnelle Routinen für arithmetische Operationen zwischen ganzen Zahlen zur Verfügung stellt. Der PARI-Multiprecision-Kernel kann native Implementierungen verwenden oder GMP nutzen, wenn er verfügbar ist. Wir empfehlen Ihnen, GMP vor dem Konfigurieren von PARI herunterzuladen und zu installieren. Stellen Sie sicher, dass Sie Version 4.2 oder neuer, wegen dieses Problems herunterladen. Wie kann ich Bugs melden oder neue Funktionen anfordern? Benutzen Sie bitte das Bug Tracking System von PARI / GPs. Andere können Ihre Anfrage sehen und kommentieren, und Sie werden einzeln benachrichtigt, wenn eine Lösung an den GIT-Server gebunden ist. Ich brauche in meiner Arbeit PARI / GP offiziell zu zitieren. Wenn Sie PARI / GP bei der Vorbereitung eines Papiers verwendet haben, dann würden wir es begrüßen. Wenn ein Autor formal die Verwendung eines Computer-Algebra-Systems oder Paket in der Bibliographie eines Papiers zitiert, dann erhalten Systementwickler Gutschrift in Zitatindizes. Diese Praxis fördert die Entwicklung von Systemen und Paketen und hilft, Anerkennung für diese Arbeit, die ähnlich wie die, die von denjenigen, die Forschungsartikel veröffentlicht zu genießen. Es macht auch Ihre experimentellen Ergebnisse reproduzierbar. Sie können Zitieren von PARI in der folgenden Form (BibTeX-Format) (ändern Sie die Versionsnummer auf die Version, die Sie tatsächlich verwendet entsprechen), die auf etwas wie übersetzen würde Was sind die Lizenzbedingungen PARI / GP ist freie Software. Es ist freigegeben unter GNUs General Public License (kurz GPL), wie von der Free Software Fundation veröffentlicht, entweder Version 2 der Lizenz oder (nach Ihrer Wahl) jede spätere Version. Warum verwenden Sie eine solche restriktive Lizenz wie die GPL Sie ändern es Die kurze Antwort auf die zweite Frage ist nein. Wir sind mit der GPL sehr zufrieden. Die ursprüngliche Lizenz (für alle Versionen von 1.xx) war proprietär, zu locker formuliert und führte zu verschiedenen Konflikten. Ab der Version 2.0 wollten wir eine bewährte Lizenz für das gesamte PARI / GP-Paket, die den Mitwirkenden bei der zukünftigen Verwendung ihres Codes sicher bleiben würde und so weit wie möglich nicht verhindern kann, dass jemand aushelft. Es wurde bald vereinbart, dass PARI / GP freie Software werden sollte. Die GPL war eine natürliche Wahl. Es ist sicher bekannt, und es befriedigte alle Entwickler an dem Projekt beteiligt, sowie ihre jeweiligen Arbeitgeber. Für die letzteren wären die Alternativen restriktiver, sicherlich nicht näher an der LGPL, BSD oder der künstlerischen Lizenz. Die meisten freien Computer Algebra-Systeme verwenden auch die GPL, vermutlich aus verwandten Gründen. Ist dies die PARI-Website Ja. Früher gab es eine Trennung zwischen pari. math. u-bordeaux. fr/ (entwicklerorientiert) und math. u-bordeaux. fr/ belabas / pari (user-oriented). Beide Standorte wurden am 13. Oktober 2012 zusammengeführt. Gibt es eine Dokumentation Die Testverteilung umfasst zwei Benutzerhandbücher (für den GP-Rechner und die libpari C-Bibliothek), ein Tutorial, einen zu kurzen Entwicklerhandbuch und eine Referenzkarte. Online oder herunterladbare Versionen gibt es unter pari. math. u-bordeaux. fr/doc. html. Für weitere Informationen über die verwendeten Algorithmen, check out Henri Cohens zwei Bücher (Graduate Texts in Mathematik 138 und 193. Springer). Wurde die Dokumentation übersetzt. Nein, nur englisch. PARI wird von einer kleinen Gruppe von Freiwilligen geschrieben, und die Aufrechterhaltung einer ausreichenden Dokumentation in einer Sprache hat sich bereits als eine schwierige Aufgabe erwiesen. Bitte belästigen Sie uns nicht mit Übersetzungswünschen oder Vorträgen zum sprachlichen Imperialismus. Einige Entwickler sind einheimische französische Sprecher, und sind in der Tat bewusst einer Reihe von störenden linguistischen Fragen. Aber das bedeutet nicht, dass wir unbegrenzte Zeit haben, vorhandene Dokumente zu übersetzen, ganz zu schweigen von der Schaffung und Pflege neuer. PARI ist freie Software, und Sie sind herzlich eingeladen, eine Übersetzung auf die Sprache Ihrer Wahl zu übernehmen oder zu sponsern. Informieren Sie uns bitte, wenn Sie tun. Was ist die aktuelle Version Aktuelle stabile Version ist pari-2.9.0. Test-Schnappschuss ist pari-2.6.1. - Neueste Entwicklungsabteilung steht immer über GIT zur Verfügung. Was ist diese stabile / Prüfsache? Wir halten gleichzeitig zwei Versionen (oder Zweige) von PARI: stabile ungerade kleinere Versionsnummer, z. B. 2.5.x: nur modifiziert, um große Probleme zu beheben, die mit kleinen Änderungen heilbar sind. Weder kleinere Verbesserungen noch komplizierte Änderungen werden eingebaut. Das primäre Ziel ist nicht, Arbeits-Skripte oder Code zu stören. So können Sie mit Vertrauen von einem Patchlevel zum anderen aktualisieren, innerhalb der gleichen Version Zweig, z. B. 2.5.x bis 2.5.y. Dieser Zweig kann weit hinter dem Testen liegen. In diesem Fall wird es mehr bekannte Fehler enthalten und einige nützliche Funktionen fehlen. Testen sogar kleinere Versionsnummer, z. B. 2.4.x: Dies ist eine Entwicklungsversion, und nichts ist garantiert, obwohl alles in der Regel funktioniert. Große Abschnitte des Codes werden modifiziert, Funktionen erscheinen oder werden abgebrochen, Schnittstellen ändern sich entsprechend dem Feedback, das wir erhalten, viele Fehler sind behoben und neue schleichen ein. Irgendwann fällt die Testversion zu einem stabilen und ein neuer Testzweig wird gestartet . In beiden Filialen werden nummerierte Versionen (oder Snapshots) immer dann freigegeben, wenn sie bereit sind: Sie kompilieren ohne Warnungen und führen alle Regressionstests auf einer Vielzahl von Systemen durch. Da dies viel Zeit in Anspruch nimmt, sind diese Veröffentlichungen weit weniger häufig, als wir es gerne hätten. In der Zwischenzeit können Sie mit unserem GIT-Server den aktuellsten Code auf beiden Files herunterladen. Welche Version sollte ich verwenden? Abhängig von Ihren Bedürfnissen beschreiben wir ein paar plausible Szenarien. Zuerst immer die neueste Version in einem bestimmten Zweig, stabil oder Test. Wenn stabil kann Ihre Skripte ohne Probleme laufen, und Sie brauchen keine der neueren Funktionen, nur stabil verwenden, wenn Sie nur wollen, geben Sie PARI / GP einen Versuch oder haben bereits Probleme mit stable. Dann probieren Sie es aus. Im Allgemeinen enthält es weniger Fehler, mehr Funktionen und Funktionen können Größenordnungen schneller sein. Wenn Sie Probleme mit dem Testen haben. Benutzen Sie bitte unseren GIT Server: Ihr Problem ist vermutlich schon gelöst. Wenn nicht, melden Sie bitte Ihr Problem mit unserem Bug Tracking System. Dann aktualisieren, sobald das Problem gelöst wird in der Regel höchstens ein oder zwei Tage später. (Personen, die einen Fehlerbericht übermitteln, werden einzeln benachrichtigt, wenn eine Lösung für ihr Problem an den GIT-Server gebunden ist.) Release 2.1.4 Was bedeutet das? Die Versionsnummer hat drei Komponenten M. m.p. Z. B. 2.1.4: M ist die Major-Versionsnummer und wurde nur einmal geändert, seit PARI / GP erstellt wurde. M ist die Nebenversionsnummer. Ungerade Versionsnummern entsprechen stabilen Versionen, gerade Zahlen entsprechen Testversionen. P ist die Patch-Revision und ändert sich häufig. Die Idee ist, dass Patchlevel gestoßen wird, wenn eine Reihe von Änderungen abgeschlossen ist und kleinere Versionsnummer erhöht wird, wenn eine Testversion als robust genug angesehen wird, um die neue stabile Version zu werden. Dann wird ein neuer Testzweig angelegt. Dies hat eine Reihe von Implikationen in Bezug auf die Grenzflächenstabilität. Wann wird die nächste Version verfügbar sein, wenn sie bereit ist. Wir haben keinen definierten Zeitplan: Wenn Sie durch ein bestimmtes Problem belästigt werden oder neue Verbesserungen ausprobieren möchten, nutzen Sie bitte die über GIT verfügbare Entwicklungsversion. Hier ist die Geschichte der vergangenen Veröffentlichungen. Können Sie mich abmelden (abonnieren Sie mir) die Mailing-Liste Bitte tun Sie es selbst: Abhängig von der Liste (n), die Sie interessiert sind, senden Sie bitte eine E-Mail an eine der Einschreiben entweder abonnieren oder Abmelden in der Nachricht Betreff. Um das Abonnement abzubrechen, stellen Sie sicher, dass Sie das gleiche E-Mail-Konto verwenden, als Sie ursprünglich abonniert haben. Ich habe ein Problem mit einer Liste. Wer sollte ich kontaktieren Installation / Build Probleme Math :: Pari Problem Bitte melden Sie es direkt an Math :: Pari Autor und Betreuer Ilya Zakharevich. PariEmacs Problem Bitte melden Sie sich direkt an den Betreuer der pariemacs Paket Olivier Ramar. Getting PARI Quellen Ich holte xxx. gz von der Download-Seite, und die Dateien sind beschädigt Einige Webbrowser leise erweitern alles, was der Webserver ihnen sagt, ist gzip. Und wird dennoch bieten Sie es mit der. GZ endet, jetzt unangemessen zu speichern. Sie sind wahrscheinlich auf der Suche xxx unter dem Namen xxx. gz. Unter Unix sollte die Datei xxx. gz herausfinden, was das Dateiformat wirklich ist. Die Dateigrößen sollten auch ein Tell-tale sein. Wo ist Ihr CVS / Subversion Server Sie sind weg. Wir verwenden jetzt GIT. Was ist GIT GIT ist ein Open-Source-Revisions-Kontrollsystem. Für die Entwickler von PARI / GP bietet sie eine netzwerkübergreifende Quellensteuerung. Für gewöhnliche Benutzer stellt es eine sehr bequeme Weise zur Verfügung, um gepatchte Versionen (nur Quellcode) in zwischen Freigaben zu erhalten oder Entwicklungszweige zu folgen. GIT Clients sind für alle gängigen Plattformen verfügbar: Unix, MacOS, Windows. Insbesondere ist der git-Befehlszeilen-Client in allen Linux-Distributionen verfügbar. Wenn Ihr GIT-Client zum ersten Mal mit unserem GIT-Repository-Server verbunden ist, kopiert er den Quellcode auf Ihrer Festplatte, genau so, als ob Sie eine Quellfreigabe geholt und extrahiert hätten. PARI kann dann in der üblichen Weise kompiliert und installiert werden. Spätere Verbindungen aktualisieren Sie Ihre lokale Kopie mit den neuesten verfügbaren Quellen und holen nur geänderte Dateien. Es ist leicht, auf eine bestimmte Version zu beschränken, auf veröffentlichte Snapshots zu beschränken oder um Ihr lokales Repository auf eine ältere Kopie zurückzusetzen. Weitere Details zum GIT-Setup für PARI. Ich habe ein Upgrade von GIT und Build fehlschlägt Erstens, es gibt keine Garantie, dass bluten Randquellen aus dem Entwicklungsserver tatsächlich kompilieren wird. Sie können Pech haben, und holen Sie eine gebrochene Version. Wahrscheinlicher ist, dass neue Code-Module hinzugefügt wurden, die nicht kompiliert wurden. Versuchen Sie einfach, nach dem Update Configure auszuführen. Neue Dateien werden dann von den neu erzeugten Makefiles berücksichtigt. Sie können auch versuchen, eine saubere, wenn Sie immer noch Probleme haben. Configure not found Wenn Sie eine Fehlermeldung des Formularkommandos erhalten, die beim Versuch, Pari zu konfigurieren, nicht gefunden wird. Ist nicht in Ihrem Suchpfad für Befehle. Sie müssen das toplevel-Verzeichnis eingeben. Ich baute gp und Linie redigierend arbeitet nicht Sie Notwendigkeit, GNU readline zuerst anzubringen und führen Sie dann Configure laufen. Überprüfen Sie die Configure-Ausgabe, um sicherzustellen, dass die readline-Bibliothek erkannt wird. Sie können helfen, Konfigurieren mit den Flags, wenn Sie Ihre Bibliothek in einem exotischen Ort installiert haben, oder Sie viele installiert und Configure nimmt die falsche. Versuchen Sie, einen Bug sauber zu machen, bevor Sie einen Fehler melden: Es kann sein, dass ein vorheriger Build mit falschen Konfigurationsoptionen den jetzt korrekten Versuch stört. Ich verwende --with-xxx aber Konfigurieren noch wählt die falsche Bibliothek Zum Beispiel Configure --with-gmp Pfad. Aber die Standard-libgmp wird statt der beabsichtigten gefunden. Der Befehl ist ein Alias für Configure --with-gmp-lib Pfad / lib --with-gmp-include Pfad / include und ein allgemeines Problem ist, dass lib64 anstelle von lib vorgesehen war. Die Lösung besteht darin, eine spezielle Überschreibung wie in Linux zu formulieren: readline / ncurses nicht gefunden Linux-Distributionen haben separate readline - und readline-devel-Pakete. Wenn nur readline installiert ist, wird Configure sich beschweren: readline ist da, so dass vorkompilierte Binärdateien ordnungsgemäß funktionieren können, müssen beide installiert werden, um Programme mit readline Unterstützung zu kompilieren. Configure kann sich auch über eine fehlende libncurses. so beschweren. In diesem Fall installieren Sie das Paket ncurses-devel. (Einige Distributionen können Sie readline-devel ohne ncurses-devel, die ein Bug in ihrer Paketabhängigkeit Behandlung ist zu installieren.) Linux: X11 Grafikbibliotheken nicht gefunden Variante dieser FAQ. Es wurde berichtet, dass in SuSE-Distributionen sowohl xorg-x11-libs als auch xorg-x11 installiert werden müssen. Der Build schlägt mit undefinierten Symbolen fehl. Bevor Sie einen Fehlerbericht senden, versuchen Sie Folgendes: Manchmal wird ein vorheriger Build (z. B. unterbrochen oder nach einer Aktualisierung von GIT) die nachfolgende Kompilierung unterbinden make clean löscht alle zwischengespeicherten Informationen aus dem Buildverzeichnis. Meine Quellen befinden sich im Verzeichnisnamen mit Leerzeichen. Build bricht geheimnisvoll. Dies wurde speziell auf Mac OS X berichtet, während versucht, GNU readline kompilieren. Die genaue Meldung war: Dies wurde durch ein Verzeichnis namens Macintosh HD die Verzeichniskette zwischen dem Benutzerverzeichnis und dem Stammverzeichnis verursacht. Insbesondere die Umgebungsvariable HOME enthielt Leerzeichen, was von der readline-5-Konfiguration nicht verarbeitet werden kann. Einige Versionen von PARI konnten sie nicht verarbeiten, aber dies sollte nicht mehr der Fall sein. Wenn die Umbenennung der beleidigenden Verzeichnisse keine Option ist, war eine einfache Lösung, die folgenden dann CD zu / tmp / tmpreadline zu tun und das Standardverfahren neu zu starten. Das obige schafft eine Ableitung (symbolische Verknüpfung) von / tmp / tmpreadline (enthält keine Leerzeichen) in das Verzeichnis, das wir beabsichtigten zu arbeiten. Passen Sie auf Ihre spezifischen Bedürfnisse an. Bei Verwendung von GIT-Quellen schlägt die Kompilierung in parse. y fehl. Diese yacc-Datei muss mit einem neueren GNU-Bison verarbeitet werden. Version 2.4 oder höher. Die Distribution enthält bereits die kompilierten Dateien parse. c und parse. h. Daher ist dieses Problem spezifisch für GIT: Menschen Download der Verteilung brauchen nicht bison. Ich kann nicht bauen eine 64bit sparcv9 ausführbare Datei In der sparcv9-Architektur, eine 32-Bit-Binärdatei wird standardmäßig erstellt. Um dies zu überschreiben, müssen Sie etwas eingeben (GNU cc). Sie können stattdessen kernelnone-gmp festlegen, aber es ist entscheidend, den portablen nativen Kernel und nicht den sparcv9 zu verwenden, da dieser 32bit-spezifisch ist. (Da sparc64 die Multiplikation von 64-Bit-Operanden in der Hardware nicht unterstützt, war es nicht sinnvoll, den sparc32 PARI-Assembler-Kernel zu portieren.) Weitere Probleme können auftreten, wenn der Linker anstelle seines 64-Bit-Äquivalents einige 32-Bit-Bibliotheken aufnimmt. Dies kann für benutzerdefinierte Bibliotheken wie libgcc oder libgmp passieren. Versuchen Sie in diesem Fall, LDLIBRARYPATH (oder setzen Sie es auf einen geeigneten Wert zurückzusetzen) und möglicherweise LDRUNPATH auf das 64-Bit-Verzeichnis. Im mit SELinux und pari-dyn scheitert mit Berechtigung verweigert Dies kam unter Fedora Core 6 als Bug 621. Andrew van Herick berichtete das Problem und arbeitete um es durch Anpassung SELinux Sicherheitspolitik. Unter Verwendung von Fedoras grafischen Schnittstellen, ist dies wie folgt: In Gnome, gehen Sie auf Klicken Sie auf die Registerkarte SELinux unter Aktivieren der Box mit der Beschriftung Ich bekomme einen internen Compiler-Fehler in. Wir versuchen nicht, gebrochene Compiler zu unterstützen. Sie können versuchen, das fehlerhafte Code-Modul mit einer niedrigeren Optimierungsstufe (z. B. - O anstelle von - O3) zu kompilieren. Oder die Umstellung auf eine stabile Version eines zuverlässigen Compilers, z. B. Gcc. Unsere kontinuierliche Integrationsplattform berichtet über den aktuellen Stand der Master - (Test-) und stabilen Branchen in Bezug auf eine Reihe von Architekturen und Compilern. Im mit gcc-2.96 und Kompilierung fehlschlägt in. Gcc-2.96 ist eine inoffizielle Version von gcc, die leider mit vielen Linux-Distributionen ausgeliefert wurde. Diese ersten Versionen sind auf einer Anzahl von Architekturen, z. B. ia64, schlecht gebrochen. Aktualisieren Sie Im mit MacOS X und. Erzeugt einen Segmentierungsfehler. Wie in Bug 565. Versuchen Sie zuerst, Ihre Version von XCode zu aktualisieren. Überprüfen Sie insbesondere die Buildnummer für gcc (z. B. in gp-Headern, Apple Computer Inc. build xxx). Builds lt 5300 sind sehr buggy, bauen 5363 funktioniert gut. Im mit MacOS X und machen Bank fällt schrecklich. Zum Beispiel liefert bezout (32.432) 1,0,32. Versuchen Sie zuerst, PARI auf Version 2.7.0 oder höher zu aktualisieren, die einen Workaround für das Problem enthält. Wenn es immer noch nicht funktioniert, bitte benachrichtigen Sie uns, dann lesen Sie weiter: Dies ist ein schmerzhafter Bug in OS X Lion Standard-Compiler (LLVM Build 2335.15.00), berichtet als Bug 1252. Wir schlagen vor, Sie versuchen und installieren GCC-4.5, Einfachste Möglichkeit, um MacPorts in diesem Fall sollten Sie nach Hause zu sehen. Eine andere Möglichkeit, als temporäre Problemumgehung, die eine langsamere gp-Binärdatei erzeugt, aber die Neuinstallation von gcc vermeidet: Eine BUG-Meldung wird in der Programmtest-Suite angezeigt In Version 2.9 und oben ist etwas falsch. Bitte benachrichtigen Sie uns. In Pre-2.9-Versionen hat die Programm-Bank die Install-Funktion ausprobiert, die auf allen Systemen nicht unterstützt wird. Überprüfen Sie die relevante diff-Datei am Ende der Bench-Ausgabe erwähnt. Wenn der einzige Unterschied aus einer fehlgeschlagenen Installation oder Verwendung von addii kommt. Bedeutet dies nur, dass install () nicht auf Ihrem System unterstützt wird, so dass Sie diese Funktion nicht verwenden können. Außerdem können Sie die Warnung ignorieren. Mein eigenes Programm kompiliert OK, aber wenn ich versuche, es auszuführen, erhalte ich eine Fehlermeldung beim Laden von gemeinsam genutzten Bibliotheken: libpari. so Auf den meisten Plattformen, make installieren baut und installiert eine gemeinsame PARI-Bibliothek libpari. so (was bedeutet, dass die erforderlichen Funktionen geladen werden Die Bibliothek zur Laufzeit, nicht kopiert in die ausführbare Datei bei Link-Zeit). Diese Bibliothek geht standardmäßig zu / usr / local / lib /. Leider reicht das oft nicht aus, um Ihr System auf die neue Bibliothek aufmerksam zu machen. Da der Link-Befehl in deinem Makefile wahrscheinlich so etwas wie mit LIBDIR angibt, das im Verzeichnis mit libpari. so steht. Die Verbindungsphase gelingt. Leider registriert dies nicht in der Binärdatei, in der die freigegebene Bibliothek gefunden werden kann, und das Ausführen der Binärdateien schlägt mit dem obigen Fehler fehl. Sie können mit ldd myprog überprüfen, was die von Ihrem Programm benötigten freigegebenen Bibliotheken sind und welche vom dynamischen lib loader gefunden werden. Dies sollte mit einer ähnlichen Meldung wie oben geschehen. Folgende Lösungen stehen zur Verfügung: Führen Sie etwas wie ldconfig aus, um Ihr System auf die neue Bibliothek aufmerksam zu machen. (Benötigt root Powers.) Hardcode einen dynamischen Runpath in Ihrer Binärdatei, indem etwas wie - Wl, - rpath meine exotische libpath in den Link-Befehl Ihres Makefile. Siehe Beispiele / Makefile, wie es auf Ihrem System zu tun. (Dies ist die gewählte Lösung für die gp-Binärdatei.) Erfordert, dass alle Benutzer des Programms ihren LDLIBRARYPATH ändern. Das kann so einfach sein wie das Hinzufügen einer. bashprofile. Eine andere Möglichkeit ist, statt myprog laufen. GP Specific Wie kann ich Tastenbelegungen anpassen Dies ist nur möglich, wenn die readline-Bibliothek kompiliert ist (der gp-Header gibt diese Informationen beim Start). In diesem Fall müssen Sie eine. inputrc-Datei erstellen. Sie können diese in Ihrem Home-Verzeichnis unter Unix oder einem beliebigen Ort, die Sie wollen, legen Sie dann die Umgebungsvariable INPUTRC auf den vollständigen Pfad der. inputrc-Datei erstellen. In dieser Datei können Sie Aktionen zu Sequenzen von Tastendrücken, z. B. Assoziiert Esc 1 5 C. die Sequenz, die durch Schlagen von Control-RightArrow auf meinem System erzeugt wird, auf das Action-Forward-Wort. Bewegen Sie den Cursor um ein Wort nach rechts. Ebenso verknüpfen die anderen Linien Control-LeftArrow mit Backward-Wort. UpArrow zum History-Search-Backward. Und DownArrow zum History-Search-Forward. Weitere Informationen finden Sie im Handbuch Readlines. Um festzustellen, welche Sequenz einer bestimmten Kombination von Tastendrücken zugeordnet ist, können Sie auf Control-V treffen. Dann drücken Sie die entsprechenden Tasten. Gp wird die entsprechende Sequenz ausgeben, mit Esc codiert als. Die Liste der gebundenen Befehle und zugehörigen Tastenbelegungen ist über bind - p in der bash-Shell verfügbar. Ich konfiguriert PARI für die Verwendung von Readline und TAB Completion funktioniert nur, wenn die Fertigstellung ist einzigartig, anstatt alle möglichen Completions Dies ist das Standard-Readline-Verhalten. Wenn es mehr als eine Übereinstimmung gibt, schließt das TAB einmal nur das längste gemeinsame Präfix. Wenn Sie TAB ein zweites Mal drücken, wird die Liste der möglichen Vervollständigungen angezeigt. Sie können das zweite Verhalten direkt nach einem einzelnen TAB durch Hinzufügen in HOME /.inputrc (readlines-Konfigurationsdatei) erhalten. So suchen Sie Readlines Geschichte von Befehlen unter gp Readline bietet eine Fülle von Funktionen, um durch die Befehlshistorie für Zeilen mit einer angegebenen Zeichenfolge zu suchen. Es gibt zwei Suchmodi: inkrementell (Suche nach Typ) und nicht-inkremental (geben Sie ein Präfix ein und starten Sie die Suche). Einige dieser Befehle sind standardmäßig gebunden (alle inkremental): Einige sind ungebunden (alle nicht inkremental): Die letzten beiden geben GAP / Magma-Stil Geschichte Fertigstellung zu binden dann auf UpArrow und DownArrow. Hinzufügen in HOME /.inputrc (readlines-Konfigurationsdatei). Ergebnis x ist Historieneintrag n, aber sie verhalten sich nicht gleich Die Funktion simplify wird auf das gps-Ergebnis angewendet, bevor es in der Historie gespeichert wird, aber nachdem der Befehl vollständig ausgewertet wird, insbesondere nach jeder Variablenzuweisung. Heres ein Beispiel: a ist noch ein Polynom von Grad 0 in x, aber 1 wurde vereinfacht. Sie können vereinfachen, wann immer Sie sicherstellen möchten, dass ein Objekt den erwarteten einfachsten möglichen Typ hat. Wie kann ich sortieren, indem ich den absoluten Wert sortiere Ersetzen Sie die Standardvergleichsfunktion durch einen anonymen Verschluss: oder durch eine spezielle Hilfsfunktion. Die letztere Lösung erzeugt leider eine global sichtbare cmp-Funktion. Sie können die folgende Zwischenkonstruktion verwenden, um Ad-hoc-Subroutinen auf einen Funktionsumfang zu beschränken: Wie kann ich eine Prozedur schreiben (void return value) Verwenden Sie return (). Ohne Argumente. Ich möchte Funktionen innerhalb einer Benutzerfunktion definieren Zum Beispiel funktioniert das folgende, aber das funktioniert nicht. Tatsächlich definiert das Aufrufen von letzterem die Funktion f (x), deren Definition ist, was nicht beabsichtigt ist. Tatsächlich gibt die GP-Grammatik an, dass das Ende einer Funktionsdefinition das Ende der längsten Expressionssequenz ist, die dem Prototyp folgt. Und das oben genannte ist leider eine gültige Ausdrucksfolge. Die Lösung ist einfach: Wenn ein Aufruf von init ausgewertet wird, wird der Code in Klammern zuerst ausgewertet, wobei separat f dann g definiert wird. Uninitialisierte Argumente werden auf 0 gesetzt Ich möchte einen Fehler anstatt Im Interesse der Abwärtskompatibilität mit früheren GP-Versionen (die die Funktionsargumente verwendet haben, um lokale Variablen vor der Einführung von my zu deklarieren), wird ein nicht initialisiertes Argument für eine Benutzerfunktion auf 0 gesetzt : In der aktuellen GP gibt es keinen Grund, unnötige Variablen in der Argumentliste hinzuzufügen, UND wir haben die Möglichkeit, explizit einen Default-Wert wie in setzen So ein fehlendes Argument ist wahrscheinlich ein Fehler und es wäre sinnvoller, eine Warnung als zu erhalten , Um mit den falschen Daten fortzufahren, wie für eingebaute Funktionen: Um dieses (rückwärts inkompatibles) Verhalten zu aktivieren, setze default (strictargs, 1) vor dem Definieren der Funktion oder set strictargs 1 in deinem gprc: Kann ich () installieren C-Funktion, die ein GEN zurückgibt, das NULL GEN sein kann, das ein Zeigertyp ist, ist es gültig C, eine Variable vom Typ GEN auf NULL zu setzen und dieses als einen Sentinelwert zu interpretieren. Dieser Wert ist jedoch ungültig für den GP-Interpreter, der nur Nicht-NULL-Objekte erwartet. Also, wenn Ihre instaled Funktion geschieht, NULL zurückzugeben. Wird der Evaluator mit einem Segmentierungsfehler abstürzen. Die richtige Lösung, wie wenn man versucht, Funktionen zu installieren, deren Prototyp nicht von GP unterstützt wird, ist es, eine kleine Wrapper-Funktion zu schreiben und diese zu installieren. Der folgende schmutzige Trick arbeitet auch im reinen GP, ohne zu müssen, mit C-Code zu verwirren (nicht empfohlen). NULL erlaubt es dem GP-Evaluator in einer ganz besonderen Situation: fehlende Argumente in Funktionen zu kodieren. Also die folgenden Werke: input () funktioniert nicht von einem Skript Es tut. Lesen Sie die folgenden aus einer Datei (oder kopieren Sie es einfügen) Dann Tipping Fun () von der gp-Eingabeaufforderung wartet auf einige Benutzereingaben. Der Grund, warum die einfachere nicht funktioniert, ist, dass input () liest Ausdruck aus der Programm-Standard-Eingabe (stdin). Während Sie das Skript in gp lesen, wird das Skript selbst in stdin gespeist. So erhält die Eingabe einige Daten, insbesondere deren Rückgabewert 0 ist, und gibt dann sofort zurück. In der Zwischenzeit wurde das expandierte a2 isa2 gedruckt, da a2 a2 ist, da an diesem Punkt der Wert von a nicht verändert wurde. Wenn Sie die gleichen Befehle in gp erneut lesen, wird es jetzt drucken a2 ist 0. Wie kann ich aus einer Datei lesen, ein Element zu einem Zeitpunkt, Lesen funktioniert nicht, da es in der gesamten Datei liest, und alle Zwischenwerte sind Verworfen. Die einfachste Lösung ist, alle Daten in einen Vektor oder eine Liste zu schreiben und diese zu speichern. Eine weitere Lösung ist die Verwendung der readvec-Funktion. Es gibt einen Vektor zurück, dessen Einträge die Ergebnisse aller Ausdrucksequenzen aus der Datei enthalten. Lassen Sie Datei enthalten Dann Ein paar amüsante Hacks: Wenn Sie in einer Datei mit r lesen (nicht mit lesen), werden alle History-Einträge gefüllt werden, und Sie können später Zugriff auf sie einzeln. Die folgende Konstruktion könnte hilfreich sein: Auf einem Unix-System können Sie den folgenden Trick (mit freundlicher Genehmigung von Markus Endres) verwenden, um die n-te Zeile einer bestimmten Datei einzugeben. Auf einem Unix-System können Sie die folgenden schönen Hack (mit freundlicher Genehmigung von Bill Allombert) mit benannten FIFO-Dateien: Erstellen Sie ein FIFO und starten Sie lesen von ihm. Schreiben Sie in einer anderen Shell Ihre Daten an sie. Zum Beispiel: Die Möglichkeit, Dateiobjekte im GP zu behandeln, ohne auf solche Extremitäten zurückzugreifen, befindet sich in der TODO-Liste. Wie kann ich lese-getrennte Daten aus einer Datei lesen, eine Zeile auf einmal Beste Antwort: gehe und lerne eine von awk / sed / perl / python und verarbeite deine Datei Zweite beste Antwort: du hast danach gefragt Wie kann ich Zahlen aus lesen? Eine Datei und speichern sie in einem Vektor Wie kann ich Integers in hexadezimal eingeben Sie können die folgende Funktion, mit freundlicher Genehmigung von Martin Larsen auf pari-Benutzer. Die oben genannten funktioniert nicht mit gp2c, weil der Eval. Hier ist eine robustere (und effizientere) Version In pari-2.6. Und oben, die oben genannten kann gestrafft werden, wie Gibt es ein Tutorial für extern Hier ist ein Beispiel für Cremonas mwrank ausgearbeitet. Wie kann ich Schleife über Permutationen Wie kann ich Schleife über alle Teilmengen von S Wie kann ich Schleife über Teilmengen von S mit k Elemente Wie kann ich Schleife über Partitionen In 2.6.1 und höher, verwenden Sie forpart (). Für ältere Versionen, passen Sie den folgenden Code: Wie kann ich Schleife über Divisoren von Polynomen Verwenden Sie fordiv. Es ist nicht mehr spezifisch für ganze Zahlen. Ich möchte größere Listen, 65533 ist nicht genug Verwenden Sie pari-2.2.6 oder neuer: die Grenze ist weg. Listen können etwa so groß sein wie Vektoren (etwa 2 24 Einträge). Wenn Sie eine ältere Version verwenden, ist dies nicht einfach, da das Limit in die Objektdarstellung hartcodiert ist. Sie können brechen Sie Ihre Liste in kleinere Stücke (verwenden Vektoren von Vektoren) Sie können eine 64-Bit-Maschine verwenden: die Grenze geht von 2 16 - 3 bis 2 46 - 3 Ich möchte mehr Variablen, 16383 ist nicht genug Nicht direkt, dies Wird in die Objektdarstellung hartcodiert. Sie können statt separater Variablen (x1, x2 etc. anstelle von x1, x2) Vektoren verwenden. Sie können eine 64-Bit-Maschine verwenden: die Grenze geht von 2 14 - 1 bis 2 16 - 1 Wie kann ich die maximale Rekursionstiefe erhöhen Die maximale Rekursionstiefe wird durch den dem gp-Prozess zugewiesenen maximalen Stapelplatz (nicht zu verwechseln Mit gps-Stack). Verwenden Sie die folgenden Befehle aus der Shell, bevor Sie gp starten, um die Prozess-Stackgröße auf 20000 KByte zu erhöhen, sagen Sie: Wenn Ihre Shell sh-basiert ist (bash, ksh, sh, zsh): Wenn Ihre Shell csh-basiert ist (csh , Tcsh): Timing-Funktionen nehmen nicht die Systemzeit in Betracht, wo der zweite Befehl tatsächlich etwa 10 Sekunden auf meinem Rechner benötigt. Das ist beabsichtigt. PARI unterstützt vier Zeitfunktionen. mal. Ftime und getrusage. Der letzte ist standardmäßig ausgewählt, da er der zuverlässigste ist, und er berichtet die Benutzerzeit. Nicht System - oder Wanduhrzeit. Insbesondere sollte es nicht von der Systembelastung abhängen. Wenn Sie wirklich wollen, Wanduhrzeit, verwenden Sie Timer funktioniert nicht, wenn extern beteiligt ist Die Zeit in den Befehlen, die über extern aufgerufen wird, wird von gps-Timer nicht berücksichtigt. Vielleicht möchten Sie verwenden Ein Patch wurde vorgeschlagen, um zu berücksichtigen, die Kinder der wichtigsten gp-Prozess, aber das aktuelle Verhalten wurde als bevorzugt. Wie kann ich einen Befehl Timeout, wenn ich PARIs nativen Kernel oder den GMP-Kernel verwenden Der GMP-Kernel ist schneller als die native ein. Hier sind detaillierte Benchmarks für Integer - und Fließkommarithmetik, die die beiden Kernel vergleichen. Der einzige Nachteil der Verwendung des GMP-Kernels ist, dass er manchmal etwas langsamer für winzige Eingaben ist und dass die GMP-fähige PARI-Bibliothek nicht mit der nativen kompatibel ist. Insbesondere müssen alle Programme, die mit einer nativen gemeinsamen Bibliothek erstellt wurden, neu erstellt werden, wenn sie durch einen GMP-fähigen ersetzt werden. Kann PARI beliebig große Zahlen behandeln Es hängt davon ab, was du mit Griff meinst. Auf einem 32-Bit-Rechner kann PARI nicht einmal ganze Zahlen größer als 2 darstellen (229) oder Fließkommazahlen, deren absoluter Binärexponent größer als 230 ist. Das Hauptproblem ist jedoch, dass der native Kernel PARIs nicht genug schnelle Algorithmen enthält, die es ermöglichen würden Große Zahlen in einer anständigen Zeit zu verarbeiten. (Integer-Multiplikation ist fast linear, aber Integer-Division ist zum Beispiel quadratisch.) Ich würde sagen, Mantissen von 10000 Dezimalstellen sind eine sinnvolle praktische Grenze für die intensive Anzahl Knirschen mit PARIs nativen Kernel. Verwenden des GMP-Kernels. Sind nahezu lineare Algorithmen verfügbar, und nur die physikalischen Einschränkungen der PARIs-Darstellung von Ganzzahlen und Schwimmern bleiben bestehen. Warum sind Gleitkomma-Operationen so langsam, wenn die Präzision groß ist Karatsuba-Multiplikation wurde nicht standardmäßig für den Typ tREAL aktiviert, bis Version 2.2.4 enthalten war und stattdessen ein quadratischer Algorithmus verwendet wurde. Ab der Version 2.2.5 ist dies nicht mehr der Fall. Beachten Sie, dass alle Divisionsalgorithmen im nativen Kernel quadratisch sind. Fast lineare Algorithmen sind über den GMP-Kernel verfügbar. Why are divisions so slow All division algorithms in the current PARI kernel are quadratic. Almost linear algorithms are available through the GMP kernel. How do I enable the GMP kernel if you do not want to mess up with the binaries built using the native kernel. Using the GMP kernel, my session dies on a huge division This is a general problem in GMP before version 4.2. It may allocate a huge amount of memory in the process stack space (using alloca ). The best solution is to upgrade to GMP version 4.2 or higher. Otherwise, one can increase the maximum size of the process stack segment before starting gp from the shell. Alternatively, you can configure an old GMP with but this will slow down GMP. Do you have Fast Fourier Transforms Not publicly exported. The library functions FFTinit and FFT are available for classic (complex) polynomial FFT. The integer arithmetic uses DFT-based almost-linear algorithm, but do not export the transformed inputs: you cannot precondition on a constant operand, for instance. Why is cos(Pi) -1 but sin(Pi) -5.04870979 E-29 and not exactly 0 For gp, Pi is a rational approximation to pi, not exactly pi. With default precision it is within 10 -28 of pi. In particular, its sine is not 0. In fact cos(Pi) is not -1 either, but rather a real number close to -1: How do I get the list of variables appearing in an expression Here is a possibility, using 2.7. syntax: This code recursively inspects all components of an expression. It works around the following complication: there is no builtin function returning the components of an object, Vec works when applied to most types handled by variable. but tRFRAC and tPOLMOD must still be treated separately. In version 2.8. and above, use the built-in variables How can I expand a multivariate polynomial The reason is that PARI only knows about univariate polynomials (whose coefficient may themselves be polynomials, thus emulating multivariate algebra). The result above is really a simplified form of There is no flat or sparse representation of polynomials, and in particular no way to obtain parentheses-free expanded expressions like On the other hand, the following routine (courtesy of Michael Somos) comes close to what was requested: Mod(yx, y-1) returns 0 If you expected to get Mod(x, y-1), you need to understand the concept of variable priority. Due to variable priority, the computation takes place in Q(y)x in which 0 is the correct result. Please see subst(p, x, polroots(p)1) is huge Assuming p has exact coefficients, then the output of polroots. is exact to the current accuracy. This means that for each (non-zero) x in the output vector, there exists a complex root z of p such that the relative error x - z / x is small: its base-10 logarithm is less than - realprecision. This is guaranteed by the algorithm, due to Shnhage and refined by Gourdon, and any other behaviour is a bug worth reporting. On the other hand, the value p(x) itself may be large. For instance, with 28 digits of accuracy: Do you support sparse matrices/polynomials How does PARI factor integers The integer factorizer implements a variety of algorithms: Trial Division (all primes up to certain bound, plus user-defined private primetable, via addprimes ), Pure powers, Shankss SQUFOF, Pollard-Brent rho, Lenstras ECM (with Brent and Montgomery improvements), MPQS (self-initializing, single large prime variation). Output primes are BPSW-pseudoprimes. How efficient is factorint How does it compare with other free implementations It cannot compare with special-purpose high-performance implementations, especially non portable ones. PARIs ECM is slower than GMP-ECM (portable), written by Paul Zimmermann on top of GMP. comparative benches needed here . PARIs Quadratic Sieve routinely (less than 1 minute) factors general numbers in the 60 digits range. A few minutes are needed for 70 digits, a few hours for 80 and it has not really been tested in the 90 range. Besides PARI, we are aware of two other free MPQS implementations: mpqs4linux. written by Jens Franke, (ix86Linux)-specific. PPMQS-2.8. written by S. Tomabechi, ix86-specific, available for Windows or Linux. On my P4 1.6GHz, PARIs MPQS is 2 to 4 times faster than PPMPQS-2.8 in the 60 digits range, 2 times faster for 70 digits, and gets increasingly slower afterwards. E. g is already 3 times slower for 80 digits. We have not tested mpqs4linux . Are the factors guaranteed to be primes The factors output are not proven primes if they are larger than 2 64. They are Baillie-Pomerance-Selfridge-Wagstaff pseudoprimes, among which no composite has been found yet, although it is expected infinitely many exist. If you need a proven factorization, use Another possibility is to set This ensures that a true primality proof is computed whenever we do not explicitly ask for partial factorization. This will slow down PARI if largish primes turn up often. I monitor isprime() at g2 and I get untested integer messages. Can I trust the output Yes The message looks like: It is harmless: during tests of Pocklington-Lehmer type, isprime() calls factor() which may produce this message, but it does go on to prove recursively that the prime factors encountered really are prime. What primality tests do you use ispseudoprime(N) uses Baillie-Pomerance-Selfridge-Wagstaff deterministic test, which is a strong Rabin-Miller test for base 2, followed by a strong Lucas test for the sequence (P, -1), where P is the smallest positive integer such that P2 - 4 is not a square modulo N. It has been checked that no composite smaller than 2 64 passes this test. ispseudoprime(N, k) with k gt 0. performs a strong Rabin-Miller test for k randomly chosen bases (with end-matching to catch roots of -1). This variant is about as fast as ispseudoprime(N) when k 3. and slower afterwards. isprime(N) first performs an ispseudoprime test. If N is larger than 2 64. Selfridge-Pocklington-Lehmer p-1 test is performed if N-1 is smooth (factored part is larger than N 1/3 -- Konyagin-Pomerance or more involved algorithms based on lattice reduction are not implemented). Otherwise we use APR-CL (Adleman-Pomerance-Rumely, Cohen-Lenstra). A number of improvements should be implemented: N1 test and combined N-1/N1 tests, higher cyclotomic tests (Bosma-Van der Hulst). An ECPP would be nice. PARIs APR-CL can prove primality of numbers with 1000 digits in a few hours. Some examples on a 2.8GHz Pentium IV: Do you have AKS In its present form (January 2006), the Agrawal-Kayal-Saxena primality test is not practical for large numbers. Efficiency not being a primary concern, it is a simple exercise in GP programming to implement the algorithm. I monitor factorint() at g4, and ECM seems to be stuck You get messages of the form and the last line is repeated seemingly forever. The short answer is: ECM is still making progress, although the diagnostics do not show it (detailed explanation ). MPQS gives a sizing marginal warning This problem is specific to version 2.2.10 and occurs while factoring smallish integers with MPQS. For instance This diagnostic was left in place to detect suboptimal behaviour with respect to the chosen tunings. This is not a bug and the result is correct. The associated tuning problem is fixed in 2.2.11. Let Knfinit(x21). Routine xxx dies on ideal J 5, 4 0, 1 Assuming that K. zk 1, x (which it should be, given nfinit s current implementation), J is not an ideal. It is a matrix in HNF form, but the Z-module generated by its columns is not an O K - module ( exercise ). In fact, the two ideals above 5 are PARI routines transform suitable objects (element in K, prime ideal) to an ideal (matrix in HNF), but do not check that matrices of the right dimension do indeed correspond to ideals, which would be quite costly. If you are unsure about how to input ideals, use idealhnf systematically, or ideals produced by other PARI routines. If you insist on finding the O K - module generated by the columns of your matrix, you may use something like For better efficiency, J is put in HNF form first. You can also use directly idealhnf if your matrix does not have maximal rank, yielding the faster variant: As written, this assumes J is contained in O K and does not work if J has Z-rank 0 or 1, but you get the idea. How to compute nfinit(P) when I cannot factor disc(P) Use something like This computes an nf structure from P . containing a tentative maximal order, which is only required to be maximal at primes less than B . The result is guaranteed to be correct whenever the field discriminant is B - smooth, i. e. has no prime divisor larger than B . If it has (at least two distinct) large prime divisors, on the other hand, the result will be wrong. If such prime factors of the discriminant are known, you can use for each such p . or addprimes(L) for a list L of such primes. The output can be certified, independently of B: nfcertify(nf) outputs either an empty vector: all is fine, the nf structure is correct or a vector of composite integers, which you must factor in order to produce a proven (possibly different) result you may then use addprimes with the corresponding prime divisors. Which computations depend on the truth of the GRH The routines bnfinit and quadclassunit assume the truth of the Generalized Riemann Hypothesis, in order to have a small set of generators for the class group. From 2.4.0 on, they assume no more than the GRH. They are marginally slower than before, but no longer output wrong results (that we know of ). to certify the bnf unconditionally. If the discriminant is large, this will be slow . and may overflow the possibilities of the implementation. Results obtained using a certified bnf do not depend on the GRH. Note that output from quadclassunit cannot be certified. Use bnfinit instead if certification is important. Finally, quadunit and quadregulator do not assume the GRH (and are much slower than quadclassunit ). This paragraph is relevant for version numbers less than 2.4.0 In fact, bnfinit assumed more than GRH, namely that the ideals of norm less than 0.3 log( disc(K) ) 2 generate the class group of K. This is not known even under the GRH, which implies the above with 12 in place of 0.3, a famous result of Eric Bach the constant can be further optimized depending on the signature and assuming the discriminant is large enough, but not down to 0.3 in any case. Also, there are counter-examples even for relatively large discriminants. unlucky random seeds actually gave a wrong result. So, technically, any result computed using a bnf from bnfinit was conditional, depending on a heuristic strengthening of a result already depending on the GRH. One could make sure that no more than the GRH is used with instead of bnfinit(P) . This is slower, of course. At worst about 40 times slower when the original result would have been right. The routine quadclassunit had the same problem as bnfinit (0.3 being replaced by 0.2). If you want to use no more than the GRH, use Besides all functions using a bnf argument, the routines bnfclassunit. bnfclgp. bnfreg are trivial wrappers around bnfinit and make the same assumptions. All these routines predate the introduction of member functions and are now obsolete: bnfinit gives much more information in about the same time, is about as easy to use (using member functions), and has the further advantage of being an init function. ellap(E, p) is very slow when p is large, or even raises an exception If E/Fp has complex multiplication by a principal imaginary quadratic order, we use a very fast explicit formula (quadratic in log p). Otherwise we rely on Shanks-Mestres baby-step giant step method, whose run-time is unfortunately exponential. Hence this naive algorithm becomes unreasonable when p has about 30 decimal digits. To go beyond that (assuming you are running PARI version 2.4.3 or higher), please install the optional package SEAdata. implementing the Schoof-Elkies-Atkin algorithm. It should work at least up to 400 decimal digits, way beyond cryptographic sizes. Can I use Cremonas mwrank with gp You may use SAGE. As for most external stand-alone programs without a graphical user interface, you may also call mwrank directly from gp, using extern. What is a BIB. What happens when my input doesnt make sense Many routines expect operands of a specified type and shape, for instance nf, bnf, bnr, ell, modpr structures, or satisfying certain documented preconditions, e. g. an integer which is actually a prime. For reasons of efficiency, PARI routines trust the user input and only perform minimal sanity checks. When a subtle undetected violation is performed, any of the following may occur: a regular exception is raised, the PARI stack overflows, a SIGSEGV or SIGBUS signal is generated, or we enter an infinite loop. The function can also quietly return a mathematically meaningless result: junk in, junk out. Bugs in this class (Bad Input Bugs, or BIBs for short) are never fixed whenever a noticeable code complication or performance penalty would occur. All PARI objects and internals are exposed and at your disposal, which is both convenient and unsafe. There are plans to add more semantic to PARI types so that e. g. an ell structure would record the fact that it is not an arbitrary vector, but actually associated to an elliptic curve. Noch nicht. intnum() gives ridiculous results This paragraph applies to versions prior to 2.2.9. For instance The first integral should be indistinguishable from the integral to infinity, which is sqrt(Pi)/4. and the second is exactly Pi/2. Numeric integration evaluates the function at regularly spaced points in the integration interval, then uses a standard quadrature rule. This is tried for a few decreasing values of the subdivision diameter until the value appears to stabilize (in fact, was accurately predicted by interpolation from the four last values). This gives incorrect results for functions of period a large power of 2 as in the second example. Or if most of the weight is concentrated in a very small interval as in the first example, where the function is essentially 0 in most of the interval. For the time being, the user must break the integral into harmless chunks, or perform relevant change of variables herself. E. g make sure the function varies slowly, move singularities to the boundary or (better) remove them, restrict the interval to a region where the function is not negligible. Starting from version 2.2.9, we use the double exponential method instead of standard Romberg, and get better results: It still helps a lot to split the integral into pieces, and indicate the growth rate and oscillation pattern of the function at their boundary, and possibly to use more sampling points for oscillating functions. Otherwise, loss of accuracy may be expected. Modular objects behave strangely Elementary operations involving INTMOD s and POLMOD s with different moduli p and q first project both operands to the quotient modulo the ideal (p, q) . In the above, the moduli 2 and 3 are coprime and we obtain the 0 ring. This explains the first example. For the second, notice that the result of Mod(1,2)x is a polynomial in (Z/2Z)x whose constant coefficient is Mod(0,2). Another example is whereas one might expect Mod(0,4) instead. Modular object operate with respect to a fixed modulus, which is never increased (it may be replaced by a strict divisor as explained above). To keep track of accuracy, you may use PADIC s, but operations will be much slower than with INTMOD s. If efficiency is a primary concern, use INT s, keeping track of denominators separately, and reduce with relevant moduli to avoid coefficient explosion. Is PARI suitable for high performance computation It depends on what you mean by that. PARI was not written to handle huge objects (e. g. millions of digits, dimension in the thousands). It can do it, but different algorithms should be used for these ranges, which are not currently implemented. PARI is quite good for heavy-duty computations in algebraic number theory. System Specific How can I get/use GP under Windows A self-installing binary is available from the download page. How can I get GP2C under Windows We do not distribute any GP2C binaries for Windows currently: GP2C generates C files that need to be compiled with a C compiler. If you do not have a working C compilation environment, then GP2C cannot work for you. Users with a working C compilation environment can build GP2C from source. I cannot read in a GP file I am assuming that you started the GP. EXE program by (double) clicking on the PARI link which was created on the windows Desktop. Check the Properties of the link in the right-click menu. If you did not tamper with it at installation time, it states that the program starts in directory This is where GP expects to find its input files. That is if you type in this will work if and only if we have a file foo or foo. gp in Update the path default in gprc. txt if you want to store your GP files in some other directory. Another possibility: some Windows editors, e. g. NotePad, automatically append a. txt suffix to the files they create. Make sure your file is really called foo and not foo. txt. Cutn Paste does not work Right click on the GP icon and change Properties-gtMisc. select Quick Edit and deselect Fast Pasting. See also the GAP help pages on the subject. I cannot enter the - key You are running a keyboard driver for some non-English languages. These drivers catch the character to produce the circumflex accent and do not pass it properly to PARI. You may try to type a SPACE after the dead key, to produce a true it may or may not fix the problem. The Delete key does not work This depends on your Windows installation and the compilers used when building the binary. It may work properly, or it may emit a beep and prints a tilde character . In the latter case, no fix is known: use Backspace instead, or readline commands. I would like a 64-bit gp. exe application. Since pari-2.7.5, we now distribute both 32-bit and 64-bit binaries. What is Cygwin Do I need it for GP Cygwin is a UNIX environment for Windows, developed by Red Hat Software. It consists of two parts: A library (DLL, called cygwin1.dll) which acts as a UNIX emulation layer providing substantial UNIX functionality. A collection of tools, ported from UNIX, which provide UNIX/Linux look and feel. The gp. exe binary we provide used to rely on the DLL (which we distributed together with the binary), but this is no longer the case. If you wish to compile gp yourself, as described in the manual for Unix systems, you need the Cygwin building tools. I installed Cygwin, but cant get it to build gp If the error looks like then you did not install the full Cygwin distribution (specifically, you are missing Cygwins gcc here). In the example above, there are already versions of gcc and make available from the mingw compiler, adding to the confusion. How can I build a libpari DLL Using recent Cygwin development tools (downloaded March 20 2003) and GIT version of PARI, a DLL is produced which at least works under Cygwin. I do not know whether it still works in other build environments. Please test and report How can I get/use gp under MacOS 9 and below This version of gp is not maintained anymore. You can get a 6 years-old legacy binary gp-2.0.14.sit. bin from the FTP archives. This is a sit archive, which may be extracted using StuffIt expander. How can I get/use gp under MacOS X and above You can get gp from the Fink or MacPorts distribution. But both only provide the stable version of pari, and you may want to try new features. Alternatively you can install Apples Developer Tools, which should be on one of your installations CDs. The current name of the tool suite is XCode. Then you can compile pari yourself: download the Unix source archive ( pari. tgz. tar. gz format). It is also possible to download PARI sources via GIT. extract the content of the archive: tar zxf pari. tgz change directory to the extracted folder pari xxx / read README file You probably want to read this FAQ. which solves a very common problem. I cant get readline to work under MacOS X.4 (or later) Towards the end, Configure prints the message You can still compile gp. but line editing, history and command completion will not work. Although a libreadline. dylib library is part of OS 10.4, it is a fake: a simple link to a replacement library, editline. which is only partially compatible with readline. So we must install the true readline library. Extract the archive ( tar zxf readline-6.3.tar. gz ), then copy-paste the following in a Terminal: This installs a proper shared library for readline, under /usr/local (thus it does not disturb your vendors libraries and wont cause problems in other parts of the system). Now rejoice: you have solved the readline problem once and for all. Now, you can compile and install PARI, making sure that the proper readline is used: Caveat. It is in principle possible to install readline in a different location by using when configuring readline. Dont do that. this breaks the library, which will now raise a runpath error on startup ( dyld: library not loaded ). The technical reason is that libreadlines install-name is set incorrectly when libreadline is created, in this case. How can I get hi-res graphics under MacOS Under MacOS 9 and below, you cant. With MacOS X, if you have installed an XFree server and X11 developers libraries, then compile gp as explained above. it should pick up the X11 installation. Starting from version 2.6.0, hi-res graphics should work out of the box: Configure will default to the plotps graphic engine, which requires no external library. make install fails for pari-2.7.0 Indeed it fails with This is a glitch affecting OS/X systems, when building without GMP. In the file change the target install-lib-dyn-link. by prepending a - (minus) sign on the first line. So that on line 498 becomes Then you can re-run Configure and make install should work. gp(1) - Linux man page gp - PARI calculator Description Invokes the PARI-GP calculator, loading the file1, file2. (written in the GP language) on startup. gp is an advanced programmable calculator, which computes symbolically as long as possible, numerically where needed, and contains a wealth of number-theoretic functions (elliptic curves, class field theory. ). It can be programmed with the GP scripting language. Its basic data types are numbers integers, real numbers, exact rational numbers, algebraic numbers, p - adic numbers, modular integers (integers modulo n ), complex numbers, polynomials, rational functions, and power series, integral binary quadratic forms, matrices, vectors, and lists, character strings, and recursive combinations of these. Command line options are availaible in both short form (-f) and POSIX-like (--fast). Numeric arguments can be followed by a modifier k . M or G at the users convenience in that case the argument is multiplied by 103, 106, or 109 respectively. - f, --fast Fast start (or factory settings). Do not read. gprc (see below) upon startup. - p, --primelimit limit Upon startup, gp computes a table of small primes used in number-theoretic applications. If primelimit is set, the table include primes up to that bound instead of the default. Unreasonably high values will considerably increase startup time. Exceedingly small values will cause some number-theoretic functions to fail with the message not enough precomputed primes. - q, --quiet Quiet mode. Dont print headers or history numbers, dont say goodbye. - s, --stacksize limit Size of gp internal stack allocated on startup. When gp runs out of space, it interrupts the current computation and raises a stack overflow exception. If this occurs frequently, start with a bigger stack. The stack size can also be increased from within gp, using default(parisize, . ) it may be convenient to set stacksize from your. gprc. Note that computations with a smaller stack may be more efficient due to better data locality. Most computations should need less than 20MB. --emacs gp can be run in an Emacs shell (see GP Users manual for details). This flag is then required for smooth interaction with the relevant Emacs package (pari. el). It is set automatically by the pari. el package, and will produce nice display oddities if you set it outside of an Emacs session. --help print a summary of available command-line options. --test run gp in test mode: suppress printing of history numbers and wrap long output lines (to get readable diff output). For benches only. --texmacs gp can be run from a TeXmacs frontend. This flag is set by TeXmacs, to enable special purpose communication channels. Do not set it yourself. --version output version info (banner) then exit. --version-short output version number then exit. to get online help. to get extended online help (more precisely, to call the external help program, gphelp by default) quit (or q), or EOF (Ctrl-D) to quit gp . The following works only when gp was linked with GNU readline library: arrow keys for editing and viewing the input history. TAB for automatic completion The following material is included in the standard distribution (originally in TeX format): The Users Guide to PARI/GP (users. dvi) The Users Guide to the PARI library (library. dvi) PARI/GP, a tutorial (tutorial. dvi) PARI/GP reference card (refcard. ps): 4 pages, based on an earlier version by Joseph H. Silverman. pariemacs. txt explains the use of the pari. el package, and how to customize it (prompt, colors). gp main executable HOME/.gprc (or GPRC if set) read at beginning of execution by each gp shell. A default gprc gprc. dft is provided with the distribution. If this file cannot be found, /etc/gprc is checked instead. pari. log default logfile (can be changed in. gprc or interactively using default() ) pari. ps default psfile used for postscript output (as above) gphelp default external help program (as above) pari. el elisp package to run pari in an Emacs shell. Must be loaded from your. emacs file..gp GP programs Environment GPRC place to look for the users gprc file (before HOME/.gprc. /gprc, and /etc/gprc in this order). GPDATADIR directory containing precomputed data. For now, the Galois resolvents files in directory galdata/, needed by the polgalois function, in degrees 8 to 11. GPHELP name of the external help program invoked by. und. shortcuts. GPTMPDIR name of the directory where temporary files will be generated. Mailing Lists There are three mailing lists devoted to the PARI/GP package (run courtesy of Dan Bernstein), and most feedback should be directed to those. They are: - pari-announce (moderated): for us to announce major version changes. - pari-dev: for everything related to the development of PARI, including suggestions, technical questions, bug reports or patch submissions. - pari-users: for everything else. To subscribe, send empty messages respectively to Bug Reports Bugs should be submitted online to our Bug Tracking System, available from PARIs home page, or directly from the URL pari. math. u-bordeaux. fr/Bugs/ Further instructions can be found on that page. Despite the leading G, GP has nothing to do with GNU. The first version was originally called GPC, for Great Programmable Calculator. For some reason, the trailing C was eventually dropped. PARI has nothing to do with the French capital. The name is a pun about the projects early stages when the authors started to implement a library for Pascal ARIthmetic in the PASCAL programming language (they quickly switched to C). For the benefit of non-native French speakers, heres a slightly expanded explanation: Blaise Pascal (1623-1662) was a famous French mathematician and philosopher who was one of the founders of probability and devised one of the first arithmetic machines. He once proposed the following proof of the existence of God for the unbelievers: whether He exists or not I lose nothing by believing in Him, whereas if He does and I misbehave. This is the so-called pari de Pascal (Pascals Wager). Note that PARI also means fairy in Persian. PARI was originally written by Christian Batut, Dominique Bernardi, Henri Cohen, and Michel Olivier in Laboratoire A2X (Universite Bordeaux I, France), and was maintained by Henri Cohen up to version 1.39.15 (1995), and by Karim Belabas since then. A great number of people have contributed to the successive improvements which eventually resulted in the present version. See the AUTHORS file in the distribution. This program is free software you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program if not, write to the Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA. Referenced ByAn identifier which does not refer to a value. A non-referential identifier will usually print as a string containing its name. Expressions containing non-referential identifiers will not be evaluated, though they may be simplified. Non-referential identifiers represent unknowns or parameters when performing algebraic derivations. How to get a value referring to an identifier. The identifier may be the name of a variable containing a value. But the value referring to the identifier is distinct from the value in the variable. One may manipulate a value referring to an identifier even if it is not the name of a variable. How to declare a global variable. How to declare a local variable. There is my for declaring a local variable with lexical scope and local for declaring a variable with dynamic scope. local can be used to change the value of a global as seen by any functions which are called while the local scope is in effect. The null literal. How to handle an exception. Calling Error() invokes the GAP debugger, which is similar to a Lisp debugger. In particular, all the commands available in the GAP REPL are still available. Variables can be inspected and modified while in the debugger but any changes will be lost when the debugger is quitted. One uses quit or D to exit the debugger. These commands also cause the top-level GAP REPL exit if used while not in a debugger. If Error() is invoked while in the GAP debugger, the debugger will be invoked recursively. One must use quit for each level of debugger recursion to return to the top - level GAP REPL. to print the top four functions on the stack when the error occurred. Use DownEnv() and UpEnv() to move down the stacki. e. from callee to callerand UpEnv() to move up the stack. The commands take the number of levels to move down or up: When the debugger is invoked, it will print a message. It may give the user the option of providing a value with the return statement so that a computation can be continued: finally block
No comments:
Post a Comment