giacpy et sage

Nouveautes concernant Xcas.
News about Xcas

Modérateur : xcasadmin

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

giacpy et sage

Message par frederic han » dim. sept. 22, 2013 1:50 pm

J'ai mis a jour la version sage de giacpy:

Attention, comme c'est du cython, il vaut vraiment mieux utiliser le spkg de giac:
http://www.math.jussieu.fr/~han/xcas/s ... .1.0.spkg
on l'installe dans sage avec:

Code : Tout sélectionner

sage -i giac-1.1.0.spkg
(ca ne pose aucun probleme d'avoir une autre version d'xcas hors de sage)

Vous pouvez telecharger giacpy pour sage ici:
http://www.math.jussieu.fr/~han/xcas/giacpy/

Le interruptions (et la vitesse) sont bien meilleures qu'avec la version "pexpect" actuellement integree dans sage qui elle communique avec le programme giac externe via des chaines de caracteres, alors que giacpy utilise directement la librairie c++ de giac. Je n'ai pas active la sortie graphique via qcas.



Normalement c'est sous forme d'un patch pour sage.
Si vous ne souhaitez pas patcher sage, j'ai fait une version "standalone" que l'on peut mettre par exemple dans son home dir.

Il y a quelques differences avec le giacpy de python: utiliser l'instruction libgiac et non pas giac et je n'ai pas exporte les mots clefs de giac, mais ils sont accessibles avec le prefixe libgiac:

ex:

Code : Tout sélectionner

from sage.libs.giac import *
libgiac.ifactor(2**128+1)
x,y,z=libgiac('x,y,z')
f=(x+y+z)^30+1
g=(f*(f+1)).normal()

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: giacpy et sage

Message par frederic han » dim. sept. 22, 2013 4:44 pm

J'ai ajoute un exemple de calcul de bases de grobner avec cette version de giacpy pour sage et aussi libsingular depuis sage:
http://www.math.jussieu.fr/~han/xcas/g ... bgiac.sws ou la version pdf:
http://www.math.jussieu.fr/~han/xcas/g ... bgiac.pdf

parisse
Messages : 5082
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giacpy et sage

Message par parisse » lun. sept. 23, 2013 7:21 am

Excellent, ca me donne en plus du code tout fait pour tester que mon code renvoie bien la bonne base! Il reste un commentaire en francais dans le reste en anglais (remarque sur les coefficients fractions dans singular).

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: giacpy et sage

Message par frederic han » mar. sept. 24, 2013 11:02 pm

J'ai mis a jour le patch pour sage et la version homedir si l'on ne veut pas patcher.

Normalement la donc avec ? et le mode magique
%libgiac

fonctionnent dans le notebook. j'ai ajoute quelques exemples. J'ai aussi ajoute une sortie graphique minimale vers la 2D de sage. (que pour les groupes de points, mais ca permet de dessiner une courbe rapidement depuis des objets giac en ajoutant un .mplot()

Code : Tout sélectionner

libgiac('int(1/(2+cos(3*x))').plot().mplot()
Cf aussi les nouveaux exemples de ma page.

http://www.math.jussieu.fr/~han/xcas/giacpy

parisse
Messages : 5082
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giacpy et sage

Message par parisse » ven. sept. 27, 2013 8:35 am

Tu vas peut-etre devoir faire une mise a jour si tu veux avoir plus de succes chez sage (mais bon on me dit que dans le milieu de la crypto au moins, sage a mauvaise reputation pour le calcul de bases de Groebner, donc ils ne regardent sans doute pas sage-devel): je viens de realiser pour la premiere fois le calcul de cyclic9 sur Q. Si la page de Allan Steel (http://magma.maths.usyd.edu.au/~allan/gb/) est correcte, giac devient le 3eme soft capable de le faire, et le 1er open-source. Et du coup j'ai decouvert une erreur dans le papier de Faugere sur F4, il dit que les coefficients ont une taille de 800 chiffres, en fait ca semble bien etre le double, et ca m'a fait perdre pas mal de temps a chercher une erreur dans mon code qui n'aboutissait pas au bout de 200 nombres premiers, alors qu'il en faut presque 400 (il faut environ un jour et 4G de RAM pour faire le calcul).

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: giacpy et sage

Message par frederic han » ven. sept. 27, 2013 10:02 am

Super pour la performance,


J'ai mis a jour le spkg sur ma page avec le source du 27/9.

J'ai ouvert un trac http://trac.sagemath.org/ticket/15226 pour que les gens soient informes.
Mais pour qu'un code cython soit integre dans sage c'est beaucoup plus dur a mon avis. Par exemple libgap a mis longtemps.

Du coup je suis assez content d'avoir aussi une version portable que l'on peut mettre n'importe ou meme sans droits.

Frederic

parisse
Messages : 5082
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giacpy et sage

Message par parisse » ven. sept. 27, 2013 10:24 am

Oui, c'est essentiel d'avoir la possibilite de l'utiliser meme sans droits d'administration.
Sur l'integration de giac dans sage, il me semble que sage a plus a y gagner que giac, s'ils ne l'integrent pas alors que tu as deja fait tout le travail, c'est leur probleme!

parisse
Messages : 5082
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giacpy et sage

Message par parisse » mar. oct. 01, 2013 3:52 pm

J'ai fait a nouveau quelques modifs, avec la possibilite d'utiliser plusieurs threads en parallele. Sur mon mac, cyclic8 sur Q est a 100 secondes avec 1 proc, et a 63 secondes avec 2 proc. (tout ca pour proba_epsilon:=1e-7). C'est encore loin de magma (qui met moins de 30 seconde sur 1 proc), mais ca n'est plus ridicule en comparaison. Et c'est aussi ou plus rapide que maple (j'ai katsura10 en 12 secondes maintenant). Il y a encore du travail a faire pour accelerer la certification et bien sur pour passer d'un ordre a un autre...

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: giacpy et sage

Message par frederic han » jeu. oct. 03, 2013 8:50 pm

A oui, justement je cherchais un exemple pour illustrer ma doc sur le
giacsettings de giacpy:

Code : Tout sélectionner

sage: n=8;R=PolynomialRing(QQ,n,'x');
sage: I = sage.rings.ideal.Cyclic(R,n);I.gens()
[x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7, x0*x1 + x1*x2 + x2*x3 + x3*x4 + x4*x5 + x5*x6 + x0*x7 + x6*x7, x0*x1*x2 + x1*x2*x3 + x2*x3*x4 + x3*x4*x5 + x4*x5*x6 + x0*x1*x7 + x0*x6*x7 + x5*x6*x7, x0*x1*x2*x3 + x1*x2*x3*x4 + x2*x3*x4*x5 + x3*x4*x5*x6 + x0*x1*x2*x7 + x0*x1*x6*x7 + x0*x5*x6*x7 + x4*x5*x6*x7, x0*x1*x2*x3*x4 + x1*x2*x3*x4*x5 + x2*x3*x4*x5*x6 + x0*x1*x2*x3*x7 + x0*x1*x2*x6*x7 + x0*x1*x5*x6*x7 + x0*x4*x5*x6*x7 + x3*x4*x5*x6*x7, x0*x1*x2*x3*x4*x5 + x1*x2*x3*x4*x5*x6 + x0*x1*x2*x3*x4*x7 + x0*x1*x2*x3*x6*x7 + x0*x1*x2*x5*x6*x7 + x0*x1*x4*x5*x6*x7 + x0*x3*x4*x5*x6*x7 + x2*x3*x4*x5*x6*x7, x0*x1*x2*x3*x4*x5*x6 + x0*x1*x2*x3*x4*x5*x7 + x0*x1*x2*x3*x4*x6*x7 + x0*x1*x2*x3*x5*x6*x7 + x0*x1*x2*x4*x5*x6*x7 + x0*x1*x3*x4*x5*x6*x7 + x0*x2*x3*x4*x5*x6*x7 + x1*x2*x3*x4*x5*x6*x7, x0*x1*x2*x3*x4*x5*x6*x7 - 1]

sage: I1=libgiac(I.gens())
sage: giacsettings.threads
4
sage: time B1=libgiac(I.gens()).gbasis([R.gens()],'revlex')
Running a probabilistic check for the reconstructed Groebner basis. If successfull, error probability is less than 1e-15 and is estimated to be less than 10^-105. Use proba_epsilon:=0 to certify (this takes more time).
Time: CPU 180.50 s, Wall: 59.43 s
sage: giacsettings.threads=1
sage: time B1=libgiac(I.gens()).gbasis([R.gens()],'revlex')
Running a probabilistic check for the reconstructed Groebner basis. If successfull, error probability is less than 1e-15 and is estimated to be less than 10^-105. Use proba_epsilon:=0 to certify (this takes more time).
Time: CPU 107.55 s, Wall: 107.66 s
on peut faire help(giacsettings) dans giacpy ou giacsettings? dans sage.


Fred

parisse
Messages : 5082
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giacpy et sage

Message par parisse » ven. oct. 04, 2013 8:29 am

Pas terrible ton ratio entre temps CPU avec 4 threads par rapport a 1 pour cyclic8. Sur le serveur de la fac avec la derniere version de cocoa.cc, j'ai les chiffres suivants: 113.6 CPU et 40.4 real time pour 4 processeurs, contre 109.5 CPU pour 1 processeur. Autrement dit pratiquement pas de degradation entre les 2 temps. Pour cyclic9, j'ai 123600 CPU et 33 200 real time pour 4 processeurs contre 105 000 CPU pour 1 processeur.

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: giacpy et sage

Message par frederic han » ven. oct. 04, 2013 8:57 am

A bon cocoa est utilise lorsque l'on met 'revlex'?

le paquet sage avec lequel j'ai fait ces mesures n'a pas cocoa du tout.

parisse
Messages : 5082
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giacpy et sage

Message par parisse » ven. oct. 04, 2013 9:51 am

Non, non, c'est juste le nom du fichier source, au depart il ne contenait que l'interface cocoa, maintenant il contient aussi mon code de gbasis:-)

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: giacpy et sage

Message par frederic han » ven. oct. 04, 2013 2:09 pm

pour les temps, c'est sur mon portable car je n'ai pas acces a un serveur 64 bits.
le proc est un core i5-2435M CPU @ 2.40GHz.

j'ai des temps indentiques via le debian amd64 -17 ou via le spkg compile avec les sources, sous xcas et sage,
c'est donc probablement mon ordi, mais calcule t'il bien le temps cpu?

par exemple, avec des gros normal je n'arrive pas bien a illustrer l'avantage des threads sur mon ordi.


Sur le serveur 32bits, je n'ai pas reussi a faire cyclic 9 avec giac, il est monte a 2.7G de ram au bout d'un jour ou 2 et a plante avec:

terminate called after throwing an instance of 'std::bad_alloc'

a+
Fred

parisse
Messages : 5082
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: giacpy et sage

Message par parisse » ven. oct. 04, 2013 2:23 pm

C'est un dual core ou plus?
Sinon, pour cyclic9 il faut 5Go avec 1 thread, et une dizaine avec 4 threads. Sur mon mac, avec 4Go de RAM ca ne passe pas avec 2 threads (plus exactement ca ralentit beaucoup trop), je n'ai pas essaye avec 1 thread, pas eu la patience!

frederic han
Messages : 1113
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: giacpy et sage

Message par frederic han » ven. oct. 04, 2013 8:25 pm

oui mes timings en 64 bits etaient sur un 2 core avec 4GO de ram qui font croire a 4 processeurs via l'hyperthreading.
en thread 2 ca donne cela

Code : Tout sélectionner

sage: giacsettings.threads=2
sage: time B1=libgiac(I.gens()).gbasis([R.gens()],'revlex')
Running a probabilistic check for the reconstructed Groebner basis. If successfull, error probability is less than 1e-15 and is estimated to be less than 10^-105. Use proba_epsilon:=0 to certify (this takes more time).
Time: CPU 119.23 s, Wall: 69.21 s
contre 109s en thread 1.

En revanche le serveur 32bits avait beaucoup de RAM mais je n'ai pas reussi cyclic9

a+
Fred

Répondre