giac et sage?

Utilisation de Xcas

Modérateur : xcasadmin

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

Re: giac et sage?

Message par frederic han » ven. mars 18, 2011 10:52 am

Oui j'ai mis le patch sur le serveur trac:
http://trac.sagemath.org/sage_trac/ticket/10940

j'espere que quelqu'un le validera car si un utilisateur n'a pas les droits pour modifier certains fichiers, les conversions avec les symboliques de sage (ainsi que les matrices) ne marcheront pas bien avec le fichier giac.py seul.

Fred

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

Re: giac et sage?

Message par frederic han » ven. mars 18, 2011 1:39 pm

J'ai voulu tester le spkg du 17 mars sur une machine 64 bits.

factor un gros poly de 3 variables sur ZZ est 200 fois plus lent que le binaire debian. Il y a eu un changement?

Fred

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

Re: giac et sage?

Message par parisse » ven. mars 18, 2011 2:41 pm

J'ai fait des changements dans le code, mais ca n'aurait pas du affecter les binaires 32/64 bits Intel. C'est quoi ton exemple?

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

Re: giac et sage?

Message par frederic han » ven. mars 18, 2011 3:09 pm

Non c'est le nouveau spkg (que j'ai compile) qui est bien plus lent (j'ai retrouve l'ancien) par exemple avec
f:=(x+y+z+1)^20+1
p:=normal(f*(f+1))

l'ancien code met 0.7 s le nouveau est tres long.

Fred

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

Re: giac et sage?

Message par parisse » ven. mars 18, 2011 6:58 pm

Chez moi (32 bits) c'est normal, 0.4s, c'est quoi tes flags de compile? Moi j'ai -fno-strict-aliasing -DGIAC_GENERIC_CONSTANTS, en 64 bits il devrait rajouter tout seul -DSMARTPTR64

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

Re: giac et sage?

Message par frederic han » mar. mars 29, 2011 10:40 am

Le nouveau spkg (avec ce probleme corrige aujourd'hui) est maintenant tres rapide en 64 bits aussi:

sur:
model name : Intel(R) Core(TM)2 Duo CPU E4700 @ 2.60GHz

----------------------------------------------------------------------
| Sage Version 4.6.2, Release Date: 2011-02-25 |
| Type notebook() for the GUI, and license() for information. |
----------------------------------------------------------------------
sage: x,y,z=tuple(giac('x,y,z'))
sage: f=(x+y+z+1)^33+1
sage: time p=(f*(f+1)).normal()
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 0.52 s
sage: p.nops()
52394
sage: time p.factor().nops()
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 7.85 s
5

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

Re: giac et sage?

Message par parisse » mar. mars 29, 2011 11:00 am

super! tu as un exemple plus court ou on peut comparer avec sage built-in (je suppose que c'est singular dans ce cas).

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

Re: giac et sage?

Message par frederic han » mar. mars 29, 2011 2:24 pm

sage: R.<x,y,z>=QQ[]
sage: f=(x+2*y+3*z-5)^22+1
sage: gf=giac(f)
sage: p=f*(f+1)
sage: gp=giac(p).normal()
sage: gp.nops()
16215
sage: time fp=p.factor()
CPU times: user 42.72 s, sys: 0.01 s, total: 42.73 s
Wall time: 42.73 s
sage: wt=walltime();t=giac.cputime();gfp=gp.factor();giac.cputime(t);walltime(wt)
3.0600000000000001
3.0662870407104492


NB: Je ne sais pas rester dans ZZ[x,y,z] sous sage pour le magma.Gcd ce qui desavantage giac par rapport a magma car magma peut garder de petites fractions comme coefficients alors que giac a de grands entiers. Et je n'arrive pas a augmenter la complexite sans faire crasher l'interface sage/magma (sur la machine ou je peux utiliser magma j'ai un vieux sage)

avec des poly sparses sur Q c'est moins net.

sage: R.<x,y,z>=QQ[]
sage: binomial(23,20)
1771
sage: l=[R.random_element(20,50),R.random_element(20,50)]
sage: p1=l[0]*l[1]
sage: p2=giac(p1)
sage: p2.nops()
1539
sage: time l1=p1.factor()
CPU times: user 0.78 s, sys: 0.00 s, total: 0.78 s
Wall time: 0.79 s
sage: time l2=p2.factor()
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 1.27 s
sage: l=[R.random_element(20,300),R.random_element(20,300)]
sage: p1=l[0]*l[1]
sage: p2=giac(p1)
sage: p2.nops()
10456
sage: time l1=p1.factor()
CPU times: user 4.74 s, sys: 0.01 s, total: 4.76 s
Wall time: 4.84 s
sage: time l2=p2.factor()
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 3.66 s
sage: l=[R.random_element(20,600),R.random_element(20,600)]
sage: p1=l[0]*l[1]
sage: p2=giac(p1)
sage: p2.nops()
11971
sage: time l1=p1.factor()
CPU times: user 8.78 s, sys: 0.04 s, total: 8.82 s
Wall time: 8.88 s
sage: time l2=p2.factor()
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 4.98 s
sage: l=[R.random_element(20,900),R.random_element(20,900)]
sage: p1=l[0]*l[1]
sage: p2=giac(p1)
sage: p2.nops()
12223
sage: time l1=p1.factor()
CPU times: user 9.76 s, sys: 0.01 s, total: 9.77 s
Wall time: 9.83 s
sage: time l2=p2.factor()
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 4.81 s
sage: l=[R.random_element(20,1200),R.random_element(20,1200)]
sage: p1=l[0]*l[1]
sage: p2=giac(p1)
sage: p2.nops()
12298
sage: time l1=p1.factor()
CPU times: user 18.26 s, sys: 0.00 s, total: 18.26 s
Wall time: 18.36 s
sage: time l2=p2.factor()
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 4.61 s

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

Re: giac et sage?

Message par frederic han » mer. mars 30, 2011 12:06 pm

sur intel core2 2.6Ghz

sage 4.6.2 compile depuis les sources et giac spkg ?

# exemple assez court pour sage rapport toujours >50

sage: R.<x,y>=QQ[]
sage: l=[R.random_element(15,30),R.random_element(10,50),R.random_element(30,50),R.random_element(20,50)]
sage: gl=giac(l)
sage: wt=walltime();t=giac.cputime();gf1=(gl[0]*gl[1]).normal();giac.cputime(t);walltime(wt)
-1.1368683772200001e-13
0.010113000869750977
sage: wt=walltime();t=cputime(); f1=l[0]*l[1] ; cputime(t);walltime(wt)
0.0
0.0010118484497070312
sage: giac(f1).nops;gf1.nops();
sage: wt=walltime();t=giac.cputime();gf2=(gl[3]*gl[1]).normal();giac.cputime(t);walltime(wt)
0.0099999999998800007
0.019656896591186523
sage: wt=walltime();t=cputime(); f2=l[3]*l[1] ; cputime(t);walltime(wt)
0.0040010000002439483
0.0025229454040527344
sage:
sage: wt=walltime();t=giac.cputime();gf12=gf1.gcd(gf2);giac.cputime(t);walltime(wt)
0.02
0.028865814208984375
sage: gf12.degree()-gl[1].degree()
0
sage: wt=walltime();t=cputime(); f12=gcd(f1,f2) ; cputime(t);walltime(wt)
1.5840990000001511
1.5869238376617432
sage: (f12/gf12).normal()
1
sage:

###################################
#rapport >700 (3 essais)
sage: R.<x,y,z>=QQ[]
sage: l=[R.random_element(7,30),R.random_element(10,15),R.random_element(10,30),R.random_element(10,30)]
sage: gl=giac(l)
sage: wt=walltime();t=giac.cputime();gf1=(gl[0]*gl[1]).normal();giac.cputime(t);walltime(wt)
0.0099999999999899995
0.014853954315185547
sage: wt=walltime();t=cputime(); f1=l[0]*l[1] ; cputime(t);walltime(wt)
0.0
0.00037312507629394531
sage: giac(f1).nops;gf1.nops();
sage: wt=walltime();t=giac.cputime();gf2=(gl[3]*gl[1]).normal();giac.cputime(t);walltime(wt)
0.0
0.010710954666137695
sage: wt=walltime();t=cputime(); f2=l[3]*l[1] ; cputime(t);walltime(wt)
0.0
0.00046610832214355469
sage: wt=walltime();t=giac.cputime();gf12=gf1.gcd(gf2);giac.cputime(t);walltime(wt)
0.02
0.025274991989135742
sage: wt=walltime();t=cputime(); f12=gcd(f1,f2) ; cputime(t);walltime(wt)
57.295579999999518
58.063894987106323
sage: (f12/gf12).normal()
-1



####################################
#Un exemple limite pour sage: rapport >40000
sage: A.<x,y,z,t>=QQ[]
sage: R.<x,y,z,t>=ZZ[]
sage: l=[A(R.random_element(7,10)),A(R.random_element(10,15)),A(R.random_element(10,20))]
sage: gl=giac(l)
sage: wt=walltime();t=giac.cputime();gf1=(gl[0]*gl[1]).normal();giac.cputime(t);walltime(wt)
0.0
0.0075490474700927734
sage: wt=walltime();t=cputime(); f1=l[0]*l[1] ; cputime(t);walltime(wt)
0.0
0.00021696090698242188
sage: giac(f1).nops;gf1.nops();
sage: wt=walltime();t=giac.cputime();gf2=(gl[2]*gl[1]).normal();giac.cputime(t);walltime(wt)
0.0
0.0078761577606201172
sage: wt=walltime();t=cputime(); f2=l[2]*l[1] ; cputime(t);walltime(wt)
0.0
0.00025606155395507812
sage: wt=walltime();t=giac.cputime();gf12=gf1.gcd(gf2);giac.cputime(t);walltime(wt)
0.02
0.038819789886474609
sage: wt=walltime();t=cputime(); f12=gcd(f1,f2) ; cputime(t);walltime(wt)
1635.1781920000003
1637.7164239883423
sage: (f12/gf12).normal()
-1
sage:

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

Re: giac et sage?

Message par parisse » mer. mars 30, 2011 5:30 pm

Tu es patient!
Tu penses refaire un post sur sage-devel?
a+

Guillaume
Messages : 112
Inscription : sam. janv. 20, 2007 8:48 pm
Contact :

Re: giac et sage?

Message par Guillaume » mar. avr. 05, 2011 5:19 pm

Bonjour,

la compilation du spkg plante sur ubuntu 10-10 64:

bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -DIN_GIAC -I. -I.. -I. -I.. -I/home/moi/sage/local/include -I/home/moi/sage/local/include -MT gl2ps.lo -MD -MP -MF .deps/gl2ps.Tpo -c -o gl2ps.lo gl2ps.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I.. -DIN_GIAC -I. -I.. -I. -I.. -I/home/moi/sage/local/include -I/home/moi/sage/local/include -MT gl2ps.lo -MD -MP -MF .deps/gl2ps.Tpo -c gl2ps.c -fPIC -DPIC -o .libs/gl2ps.o
In file included from gl2ps.c:36:
gl2ps.h:66: fatal error: GL/gl.h: Aucun fichier ou dossier de ce type
compilation terminated.
make[1]: *** [gl2ps.lo] Erreur 1
make[1]: quittant le répertoire « /home/moi/sage/spkg/build/giac-0_9_1/src/src »
make: *** [install-recursive] Erreur 1

pouratnt j'ai bien un gl2ps d'installé...?

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

Re: giac et sage?

Message par parisse » mar. avr. 05, 2011 5:33 pm

Il manque les headers d'open GL, ca doit etre dans xlibmesa-gl-dev je dirais,

Guillaume
Messages : 112
Inscription : sam. janv. 20, 2007 8:48 pm
Contact :

Re: giac et sage?

Message par Guillaume » mar. avr. 05, 2011 6:17 pm

Merci ! La compil du spkg a fonctionné.
J'ai ensuite installé le patch dans devel et fait

patch -p0 -u <sagegiac.diff

puis

sage -b

mais en lançant sage, voici que tout tourne mal...

Code : Tout sélectionner


----------------------------------------------------------------------
| Sage Version 4.6.2, Release Date: 2011-02-25                       |
| Type notebook() for the GUI, and license() for information.        |
----------------------------------------------------------------------
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (80, 0))

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)

/home/moi/sage/local/lib/python2.6/site-packages/IPython/ipmaker.pyc in force_import(modname)
     64         reload(sys.modules[modname])
     65     else:
---> 66         __import__(modname)
     67 
     68 

/home/moi/sage/local/bin/ipy_profile_sage.py in <module>()
      5     preparser(True)
      6 
----> 7     import sage.all_cmdline
      8     sage.all_cmdline._init_cmdline(globals())
      9 

/home/moi/sage/local/lib/python2.6/site-packages/sage/all_cmdline.py in <module>()
     12 try:
     13 
---> 14     from sage.all import *
     15     from sage.calculus.predefined import x
     16     preparser(on=True)

/home/moi/sage/local/lib/python2.6/site-packages/sage/all.py in <module>()
     62 get_sigs()
     63 
---> 64 from sage.misc.all       import *         # takes a while
     65 
     66 from sage.misc.sh import sh

/home/moi/sage/local/lib/python2.6/site-packages/sage/misc/all.py in <module>()
     76 from func_persist import func_persist
     77 
---> 78 from functional import (additive_order,
     79                         sqrt as numerical_sqrt,
     80                         arg,

/home/moi/sage/local/lib/python2.6/site-packages/sage/misc/functional.py in <module>()
     36 
     37 
---> 38 from sage.rings.complex_double import CDF
     39 from sage.rings.real_double import RDF, RealDoubleElement
     40 

/home/moi/sage/local/bin/complex_double.pyx in init sage.rings.complex_double (sage/rings/complex_double.c:16539)()

/home/moi/sage/local/lib/python2.6/site-packages/sage/rings/complex_field.pyc in ComplexField(prec, names)
     87         if not C is None:
     88             return C
---> 89     C = ComplexField_class(prec)
     90     cache[prec] = weakref.ref(C)
     91     return C

/home/moi/sage/local/lib/python2.6/site-packages/sage/rings/complex_field.pyc in __init__(self, prec)
    187         ParentWithGens.__init__(self, self._real_field(), ('I',), False, category = Fields())
    188 #        self._populate_coercion_lists_()

--> 189         self._populate_coercion_lists_(coerce_list=[complex_number.RRtoCC(self._real_field(), self)])
    190 
    191     def __reduce__(self):

/home/moi/sage/local/lib/python2.6/site-packages/sage/rings/complex_number.so in sage.rings.complex_number.RRtoCC.__init__ (sage/rings/complex_number.c:14791)()

/home/moi/sage/local/lib/python2.6/site-packages/sage/categories/map.so in sage.categories.map.Map.__init__ (sage/categories/map.c:2139)()

/home/moi/sage/local/lib/python2.6/site-packages/sage/categories/homset.pyc in Hom(X, Y, category)
    150     # For the moment, this is the category, for compatibility with the current implementations

    151     # of Homset in rings, schemes, ...

--> 152     H = category.hom_category().parent_class(X, Y, category = category)
    153 
    154     ##_cache[key] = weakref.ref(H)


/home/moi/sage/local/lib/python2.6/site-packages/sage/categories/rings.pyc in __new__(cls, X, Y, category)
    115                     <class 'sage.rings.number_field.morphism.CyclotomicFieldHomset_with_category'>
    116                 """
--> 117                 from sage.rings.homset import RingHomset
    118                 return RingHomset(X, Y, category = category)
    119 

/home/moi/sage/local/lib/python2.6/site-packages/sage/rings/homset.pyc in <module>()
     15 
     16 import morphism
---> 17 import quotient_ring
     18 
     19 def is_RingHomset(H):

/home/moi/sage/local/lib/python2.6/site-packages/sage/rings/quotient_ring.pyc in <module>()
     30 import commutative_ring
     31 import ideal
---> 32 import sage.rings.polynomial.multi_polynomial_ideal
     33 import sage.structure.parent_gens
     34 from sage.interfaces.all import singular as singular_default, is_SingularElement

/home/moi/sage/local/lib/python2.6/site-packages/sage/rings/polynomial/multi_polynomial_ideal.py in <module>()
    227 from __future__ import with_statement
    228 
--> 229 from sage.interfaces.all import (singular as singular_default,
    230                                  macaulay2 as macaulay2_default,
    231                                  magma as magma_default)

/home/moi/sage/local/lib/python2.6/site-packages/sage/interfaces/all.py in <module>()
     10 from genus2reduction import genus2reduction, Genus2reduction
     11 from gfan import gfan,  Gfan
---> 12 from giac import giac, giac_console, Giac
     13 from gp import gp, gp_console, gp_version, is_GpElement, Gp
     14 from gnuplot import gnuplot, gnuplot_console

ImportError: No module named giac
Error importing ipy_profile_sage - perhaps you should run %upgrade?
WARNING: Loading of ipy_profile_sage failed.



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

Re: giac et sage?

Message par parisse » mer. avr. 06, 2011 12:19 pm

ce n'est plus de mon domaine de competence, j'espere que Frederic pourra repondre...

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

Re: giac et sage?

Message par frederic han » mer. avr. 06, 2011 12:51 pm

Bonjour,

(J'ai teste avec sage compile depuis les sources)

Il a l'air de ne pas trouver giac.py

apres le patch, y a t'il bien eu creation d'un fichier giac.py
(identique a celui ci: http://people.math.jussieu.fr/~han/xcas/giac.py)
dans:

devel/sage/sage/interfaces/

apres le

sage -b

avez vous bien un giac.py et giac.pyc
dans:
local/lib/python/site-packages/sage/interfaces
qui chez moi est aussi

devel/sage/build/sage/interfaces

le sage -b a t'il compile des choses sans raler ou peut etre manquait il une dependance et il n'a pas termine? (vous pouvez le refaire)

NB: normalement

patch -p0 -Ru <sagegiac.diff
puis sage -b permet de revenir en arriere

Frederic

Répondre