Page 1 sur 3

giacpy

Publié : jeu. juin 13, 2013 10:55 pm
par frederic han
Salut,
je poursuis le fil suivant http://xcas.e.ujf-grenoble.fr/XCAS/view ... f=1&t=1308
ici car ca me semble plus approprie de le mettre dans devel.

J'ai enfin reussi a avoir mes premieres images avec giacpy et qcas compile en librairie.

l'archive est la http://www.math.jussieu.fr/~han/xcas/gi ... y-qcas.tgz

pour l'instant c'est juste une premiere impression...
Cette libqcas rale (pb avec rdiv) avec giac1.1, mais pour moi elle compile bien avec giac 1.0
ensuite on peut faire des trucs du genre:

Code : Tout sélectionner

from giacpy import *
x=giac('x')
s=plot(sin(x))
s2=(s+1).color(117)
giac([s,s2]).qcas()
s3=histogram(classes(randvector(100),0,30))
s3.qcas()
s4=[ line(x+y-t) for t in range(10) ]
giac(s4).qcas()
(le probleme du = dans les equations est genant car pour l'instant on ne peut passer que des equation avec des ' '
Ex: giac('x+y=3') d'ou le pb avec t, heureusement que les equations en =0 n'ont pas besoin de ce symbole.

Fred

Re: giacpy

Publié : sam. juin 15, 2013 8:09 am
par parisse
Il y a un problème avec les includes:
python setup.py build_ext
running build_ext
building 'giacpy' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c giacpy.cpp -o build/temp.linux-i686-2.7/giacpy.o
cc1plus: attention : command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]
In file included from giacpy.cpp:262:0:
qcas/qt/giacpy.h:20:24: erreur fatale: QApplication : Aucun fichier ou dossier de ce type

Evidemment je peux rajouter des -I/usr/include/qt/... mais il y a l'air d'en avoir besoin de beaucoup, il y a pas autre chose à faire?

Re: giacpy

Publié : sam. juin 15, 2013 11:30 am
par frederic han
oui pour les tests j'utilisais le setup-auto.py

j'ai mis a jour la http://www.math.jussieu.fr/~han/xcas/gi ... cas100.tgz

(sur une machine je n'ai plus les icones)

Fred

Re: giacpy

Publié : sam. juin 15, 2013 1:04 pm
par parisse
ah bon, ça va mieux avec setup-auto :-) (n'oublie pas que je n'y connais rien en python!)
Mais il faut aussi recompiler libqcas (vu que on n'a pas la même architecture), tu devrais cleaner le source dans l'archive. C'est nettement plus compliqué que le module sans qcas!

Re: giacpy

Publié : sam. juin 15, 2013 1:37 pm
par frederic han
oui ca n'est pas encore au point, c'est juste une preview.

j'ai essaye de mettre dans le repertoire qcas une libqcas.a pour amd64 elle semble marcher pour ma debian stable et ubuntu 12.04.

Fred

Re: giacpy

Publié : lun. juin 17, 2013 1:15 pm
par parisse
bon, je n'y arrive toujours pas:
>>> from giacpy import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ./giacpy.so: wrong ELF class: ELFCLASS64

Pourtant,
file /usr/local/lib/python2.7/site-packages/giacpy.so
me renvoie:
/usr/local/lib/python2.7/site-packages/giacpy.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped

Sinon, j'ai mis a jour qcas avec giac 1.1. Tu devrais pouvoir l'utiliser apres mise a jour de quelques headers comme rdiv.

Re: giacpy

Publié : mar. juin 18, 2013 6:49 am
par parisse
J'ai aussi essayé sur un linux 64 bits, mais j'ai une erreur, même en recompilant libqcas.a:
>>> from giacpy import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ./giacpy.so: undefined symbol: _ZNK10QTabWidget14heightForWidthEi

Re: giacpy

Publié : mar. juin 18, 2013 7:34 am
par frederic han
C'est bizarre je referai des essais sur une autre distrib (je n'ai teste que 2 amd64: ubuntu 12.04 et debian stable mise a jour),
je suis par exemple en ubuntu 12.04 avec les paquets qt du depot.
dans le repertoire qcas, apres avoirt fait
make clean
rm libqcas.a
et make
tu dois avoir
une nouvelle libqcas.a et aussi un qcas qui devrait marcher aussi.

ensuite dans giacpy rm giacpy.so puis make fonctionnent pour moi.

si tu as cython tu peux aussi essayer rm giacpy.cpp

a suivre

Fred

Re: giacpy

Publié : mar. juin 18, 2013 10:06 pm
par frederic han
Salut,
J'ai refait une version plus stable. Cette fois elle est construite sur debian stable amd64 et QT4.8. (Sur ma ubuntu 12.04 j'ai realise que j'avais aussi des version i386 ca t'a peut etre pose des pb.)

Si le giacpy.so ne marche pas tu peux le reconstruire avec Makefile.auto.
Si ca ne marche pas tu peux alors tenter de reconstruire la libqcas.a ou eventuellement les .so en enlevant le
CONFIG+=staticlib de libqcas.pro , puis qmake libqcas.pro puis make, puis refaire le giacpy.

http://www.math.jussieu.fr/~han/xcas/gi ... cas100.tgz

(il faut encore giac 100 amd64)

Re: giacpy

Publié : mer. juin 19, 2013 1:23 pm
par parisse
Ca avance, mais j'ai le message d'erreur
>>> from giacpy import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /usr/local/lib/python2.7/dist-packages/giacpy.so: undefined symbol: _ZN4giac4rdivERKNS_3genES2_
Et c'est surement parce que giacpy.so est linké dynamiquement avec la libgiac, et que j'ai la 1.1 installée. Je vais attendre que tu passes à giac 1.1...

Re: giacpy

Publié : mer. juin 19, 2013 8:32 pm
par frederic han
oui je pense aussi que c'est ca, car c'est comme cela que je me suis rendu compte du changement de prototype de rdiv.

J'ai mis une version pour giac 1.1 et amd64 debian stable la:

http://www.math.jussieu.fr/~han/xcas/gi ... cas110.tgz

il y a un exemple:

testplotqt.py

J'espere que ca ira
Fred

Re: giacpy

Publié : jeu. juin 20, 2013 12:41 pm
par parisse
Ce coup-ci bingo! Les graphes sont super bien!
Par contre ça risque de pas être de la tarte à compiler sous windows...

Re: giacpy

Publié : jeu. juin 20, 2013 1:47 pm
par frederic han
Oui ce sont ceux de qcas, je n'ai rien change.
Il me semble que loic avait fait une version de qcas pour windows que je ne trouve plus sur internet, mais qui a ces fichiers:

qcas-win32/libgcc_s_dw2-1.dll
qcas-win32/mingwm10.dll
qcas-win32/pthreadGC2.dll
qcas-win32/qcas.exe
qcas-win32/QtCore4.dll
qcas-win32/QtGui4.dll
qcas-win32/QtXml4.dll

Je ne sais pas comment il avait compile.

Pour la geometrie interactive, je suis gene par la syntaxe python car qcas a besoin du code en syntaxe giac avant evaluation pour la geo interactive, donc ca ne deviendrait vraiment pas naturel de tout faire en giac entre des guillemets pour tout envoyer

a+
Fred

Re: giacpy

Publié : jeu. juin 20, 2013 3:18 pm
par parisse
pour win32, il faudra lui demander!
Sinon, pour la géométrie interactive, peut-etre que tu peux faire comme j'avais fait pour le plugin texmacs, où en tapant geo2d("nom_fichier") ça t'ouvre une fenêtre fltk de géométrie (avec les instructions de la figure dans le fichier qu'on peut sauver à la sortie).
Il y a des sorties possibles vers les formats graphiques standard dans qcas? Je n'ai rien vu dans les menus.

Re: giacpy

Publié : jeu. juin 20, 2013 8:03 pm
par frederic han
Pour les formats de sortie dans qcas il faut cliquer sur l'image (gauche? ou droit? selon que l'on est en mode interactif ou pas) pour faire apparaitre un menu.
Les sorties latex et svg n'ont pas l'air d'etre connectee, mais la sortie png,jpg... marche bien. Y at'il une fonction giac toute prete pour ca? Le probleme est que l'on risque de perdre tout ce qui est ajoute via qt et la souris. (modif des couleurs, transparence...)

Pour la geo interactive, le probleme n'est pas de transmettre du code giac car j'avais prepare une fonction sendtext qui est par exemple utilisee pour charger un .xws

elle supporte par exemple des trucs de ce genre (ou A peut bouger et fait bien bouger ses enfants):

Code : Tout sélectionner

A:=point([-2.77273,2.72727]);
translation(1+i,A);
tt :=  element(0..1,0.1,0.2);
B:=point([3.43182,2.22727]);TT:=point(tt+3*i);
TA:=[2+A,3+A,4+A];a:=[cercle(A,B)+1,cercle(A,B)+2];
c:=cercle(B,1);
[c+1,c+2];
D:=element(c);
on peut meme y ajouter des points, et aussi les fixer sur les objets qui ont un nom. Ex ajouter un point element du cercle c avec la souris

le probleme que j'ai est plutot de respecter les dependances: en python c'est naturel de faire:

a=point(1)
b=point(2)
d=line(a,b)
alors le gen de d n'a aucune memoire des lettres a et b et pour que qcas pense a modifier d si l'on bouge a il lui faut en memoire une syntaxe giac. (Ex dans le code ci dessus qcas pourra reevaluer la ligne TA:=[2+A,3+A,4+A]

et ca ne me semble pas raisonnable de demander aux gens sous python de faire des trucs du genre:

Code : Tout sélectionner

giac('a:=point(1);b:=point(2);d:=droite(a,b)')
Ce que j'aime bien dans xcas et qui me manque dans geogebra et qcas (c'etait ma motivation pour sendtext) c'est de pouvoir faire un peu de geometrie interactive melange avec du code clairement ecrit et modifiable, car je trouve qu'ainsi le raisonnement de la construction est bien visible.

voila il faudra y reflechir
a+
Fred