giacpy et sage

Nouveautes concernant Xcas.
News about Xcas

Modérateur : xcasadmin

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

Re: giacpy et sage

Message par parisse » sam. oct. 05, 2013 9:46 am

Je viens d'essayer cyclic9 mod en 32 bits, ca passe (1700 secondes au lieu de 650 sur la meme machine mais en 64 bits).
Tu peux avoir des infos avec export GIAC_DEBUG=2
Voila mon cyclic9mod (ou je lui ai fait calculer le nombre de monomes de la reponse, c'est un peu plus de 1 millions, et la taille des coefficients est de 1600 chiffres environ en base 10 pour cyclic9 pas mod).

Code : Tout sélectionner

cyclic9:=[x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9, x1*x2 + x2*x3 + x3*x4 + x4*x5 + x5*x6 + x6*x7 + x7*x8 + x1*x9 + x8*x9, x1*x2*x3 + x2*x3*x4 + x3*x4*x5 + x4*x5*x6 + x5*x6*x7 + x6*x7*x8 + x1*x2*x9 + x1*x8*x9 + x7*x8*x9, x1*x2*x3*x4 + x2*x3*x4*x5 + x3*x4*x5*x6 + x4*x5*x6*x7 + x5*x6*x7*x8 + x1*x2*x3*x9 + x1*x2*x8*x9 + x1*x7*x8*x9 + x6*x7*x8*x9, x1*x2*x3*x4*x5 + x2*x3*x4*x5*x6 + x3*x4*x5*x6*x7 + x4*x5*x6*x7*x8 + x1*x2*x3*x4*x9 + x1*x2*x3*x8*x9 + x1*x2*x7*x8*x9 + x1*x6*x7*x8*x9 + x5*x6*x7*x8*x9, x1*x2*x3*x4*x5*x6 + x2*x3*x4*x5*x6*x7 + x3*x4*x5*x6*x7*x8 + x1*x2*x3*x4*x5*x9 + x1*x2*x3*x4*x8*x9 + x1*x2*x3*x7*x8*x9 + x1*x2*x6*x7*x8*x9 + x1*x5*x6*x7*x8*x9 + x4*x5*x6*x7*x8*x9, x1*x2*x3*x4*x5*x6*x7 + x2*x3*x4*x5*x6*x7*x8 + x1*x2*x3*x4*x5*x6*x9 + x1*x2*x3*x4*x5*x8*x9 + x1*x2*x3*x4*x7*x8*x9 + x1*x2*x3*x6*x7*x8*x9 + x1*x2*x5*x6*x7*x8*x9 + x1*x4*x5*x6*x7*x8*x9 + x3*x4*x5*x6*x7*x8*x9, x1*x2*x3*x4*x5*x6*x7*x8 + x1*x2*x3*x4*x5*x6*x7*x9 + x1*x2*x3*x4*x5*x6*x8*x9 + x1*x2*x3*x4*x5*x7*x8*x9 + x1*x2*x3*x4*x6*x7*x8*x9 + x1*x2*x3*x5*x6*x7*x8*x9 + x1*x2*x4*x5*x6*x7*x8*x9 + x1*x3*x4*x5*x6*x7*x8*x9 + x2*x3*x4*x5*x6*x7*x8*x9, x1*x2*x3*x4*x5*x6*x7*x8*x9 - 1]:;
p:=prevprime(45000);
//p:=prevprime(2^25); // 33554393
time(H:=gbasis(cyclic9 % p,indets(cyclic9),revlex,with_cocoa=false));
size(eval(H,1));
b:=0:; for j from 0 to size(eval(H,1))-1 do b+=size(eval(H,1)[j]); od:; b;
write("Hcyclic9",H);

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

Re: giacpy et sage

Message par frederic han » sam. oct. 05, 2013 11:57 am

Ah, j'avais essaye en caracteristique nulle!

Je vais refaire une essai modulo p. Le cocoa=false est il obligatoire?
Frederic

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

Re: giacpy et sage

Message par parisse » sam. oct. 05, 2013 12:48 pm

non, pas besoin de with_cocoa=false, c'est le defaut (mais ca ne l'etait pas quand j'ai cree mes fichiers de script de tests).
Si ca marche en caracteristique p, ca devrait marcher sur Q, sauf s'il y a un probleme d'allocation memoire pour la reconstruction.

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

Re: giacpy et sage

Message par frederic han » ven. mai 02, 2014 9:34 am

Bon j'ai reussi d'avoir une base de grobner sur Q pour cyclic9 depuis sage avec giacpy.
Config:
Pc de bureau a moins de 500Eur en 2013: Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz avec seulement 4Go de RAM
Fedora 20: x86_64
rpm de sage officiel et la derniere version de giac 1.1.0, et la vesion de giacpy pour HOME dir (ie sans patcher sage)
http://www.math.jussieu.fr/~han/xcas/s ... table.tgz

voici les temps (environ 15h (wall) avec 4 threads :lol: ) et la feuille:

Code : Tout sélectionner

sage: n=6;R=PolynomialRing(QQ,n,'x');
sage: I = sage.rings.ideal.Cyclic(R,n);
sage: I.gens()
[x0 + x1 + x2 + x3 + x4 + x5, x0*x1 + x1*x2 + x2*x3 + x3*x4 + x0*x5 + x4*x5, x0*x1*x2 + x1*x2*x3 + x2*x3*x4 + x0*x1*x5 + x0*x4*x5 + x3*x4*x5, x0*x1*x2*x3 + x1*x2*x3*x4 + x0*x1*x2*x5 + x0*x1*x4*x5 + x0*x3*x4*x5 + x2*x3*x4*x5, x0*x1*x2*x3*x4 + x0*x1*x2*x3*x5 + x0*x1*x2*x4*x5 + x0*x1*x3*x4*x5 + x0*x2*x3*x4*x5 + x1*x2*x3*x4*x5, x0*x1*x2*x3*x4*x5 - 1]
sage: time B = I.groebner_basis("libsingular:std")
Time: CPU 0.15 s, Wall: 0.15 s
sage: import sys;sys.path.append('/home/fred/giacpy-sage')
<p>(If you have the standalone version of giacpy for sage in /home/fred/giacpy-sage )</p>
<p>if not, then patch sage and do:</p>
<p>from sage.libs.giac import *</p>
sage: import giacpy
// Giac share root-directory:/usr/share/giac/
// Using keyword file /usr/share/giac/doc/fr/keywords
// Giac share root-directory:/usr/share/giac/
Help file /usr/share/giac/doc/fr/aide_cas not found
Added 0 synonyms
sage: from giacpy import *
sage: I1=libgiac(I.gens())
<p>In&nbsp; giac 1.1 there is a new code for grobner basis with revlex.</p>
<p>It is much faster than the old ones, but only with revlex and doesn't use cocoa.</p>
sage: time B1=I1.gbasis([R.gens()],'revlex')
Time: CPU 0.08 s, Wall: 0.07 s
sage: time B1=I1.gbasis([R.gens()],'revlex,cocoa=false')
Time: CPU 0.09 s, Wall: 0.08 s
sage: [(B[-i-1]/B1[i]).simplify()  for i in range(len(B))] #singular donne des fractions. les degres ne sont pas dans le meme ordre
[1, 1, 1/14, 1, 1/2, 1/7, 1/2, 1/903, 1/1806, 1/258, 1/903, 1/903, 1/1806, 1/903, 1/1806, 1/1806, 1/7, 1/602, 1/258, 1/1806, 1/18, 1/274400, 1/54880, 1/109760, 1/164640, 1/86596, 1/43298, 1/86596, 1/35739035160, 1/2978252930, 1/1191301172, 1/2382602344, 1/3573903516, 1/35739035160, 1/14, 1/24990, 1/42, 1/24990, 1/99960, 1/6664, 1/99960, 1/19992, 1/99960, 1/2040, 1/16660]
sage: n=9;R=PolynomialRing(QQ,n,'x');
sage: I = sage.rings.ideal.Cyclic(R,n);I
Ideal (x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8, x0*x1 + x1*x2 + x2*x3 + x3*x4 + x4*x5 + x5*x6 + x6*x7 + x0*x8 + x7*x8, x0*x1*x2 + x1*x2*x3 + x2*x3*x4 + x3*x4*x5 + x4*x5*x6 + x5*x6*x7 + x0*x1*x8 + x0*x7*x8 + x6*x7*x8, x0*x1*x2*x3 + x1*x2*x3*x4 + x2*x3*x4*x5 + x3*x4*x5*x6 + x4*x5*x6*x7 + x0*x1*x2*x8 + x0*x1*x7*x8 + x0*x6*x7*x8 + x5*x6*x7*x8, x0*x1*x2*x3*x4 + x1*x2*x3*x4*x5 + x2*x3*x4*x5*x6 + x3*x4*x5*x6*x7 + x0*x1*x2*x3*x8 + x0*x1*x2*x7*x8 + x0*x1*x6*x7*x8 + x0*x5*x6*x7*x8 + x4*x5*x6*x7*x8, x0*x1*x2*x3*x4*x5 + x1*x2*x3*x4*x5*x6 + x2*x3*x4*x5*x6*x7 + x0*x1*x2*x3*x4*x8 + x0*x1*x2*x3*x7*x8 + x0*x1*x2*x6*x7*x8 + x0*x1*x5*x6*x7*x8 + x0*x4*x5*x6*x7*x8 + x3*x4*x5*x6*x7*x8, x0*x1*x2*x3*x4*x5*x6 + x1*x2*x3*x4*x5*x6*x7 + x0*x1*x2*x3*x4*x5*x8 + x0*x1*x2*x3*x4*x7*x8 + x0*x1*x2*x3*x6*x7*x8 + x0*x1*x2*x5*x6*x7*x8 + x0*x1*x4*x5*x6*x7*x8 + x0*x3*x4*x5*x6*x7*x8 + x2*x3*x4*x5*x6*x7*x8, x0*x1*x2*x3*x4*x5*x6*x7 + x0*x1*x2*x3*x4*x5*x6*x8 + x0*x1*x2*x3*x4*x5*x7*x8 + x0*x1*x2*x3*x4*x6*x7*x8 + x0*x1*x2*x3*x5*x6*x7*x8 + x0*x1*x2*x4*x5*x6*x7*x8 + x0*x1*x3*x4*x5*x6*x7*x8 + x0*x2*x3*x4*x5*x6*x7*x8 + x1*x2*x3*x4*x5*x6*x7*x8, x0*x1*x2*x3*x4*x5*x6*x7*x8 - 1) of Multivariate Polynomial Ring in x0, x1, x2, x3, x4, x5, x6, x7, x8 over Rational Field
sage: #time B = I.groebner_basis("libsingular:std")
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^-119. Use proba_epsilon:=0 to certify (this takes more time).
Time: CPU 127584.53 s, Wall: 55808.73 s
sage: tutu=B1[-1].coeff([R.gens()])
sage: tutu.approx(20).max()
0.33367613068506562166e611
sage: time tutu=B1[500].coeff([R.gens()])
Time: CPU 0.03 s, Wall: 0.92 s
sage: tutu.approx(20).max().log10().approx(12)._double
597.0994441999974
<p>NB: time on a desktop PC with 4go ram only so a lot of time in swapping.</p>
sage: time logcoeff=[ (j.coeff([R.gens()])).approx(20).max().log10().approx(12)._double for j in B1]
Time: CPU 27.40 s, Wall: 340.95 s
sage: max(logcoeff)
1643.9074942499938
sage: B1.dim()
1344

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

Re: giacpy et sage

Message par parisse » sam. mai 03, 2014 6:57 am

il me semble qu'il faut environ 7Go de RAM pour ne pas avoir besoin de swapper avec 4 threads. Sinon, ca swappe pour reconstruire (si ma memoire est bonne le resultat tient sur presque 2 Go).

Répondre