Python-Sage
Bonjour,
Est il possible d'importer Sage (ou l'équivalent, Sagemath ...) dans un EDI comme Pyzo par exemple( et pas le contraire) ?
Je voudrais pouvoir disposer dans Pyzo de fonction comme prime, nextprime pour commencer, puis pouvoir faire un peu de théorie des nombres, puis un peu d'algèbre théorique, déclarer des groupes, des anneaux, faire ce que font CQ et d'autres.
Bien sûr, si c'est pour me dire de me mettre à Sage lui-même, ce n'est pas la peine.
Cordialement,
Rescassol
Est il possible d'importer Sage (ou l'équivalent, Sagemath ...) dans un EDI comme Pyzo par exemple( et pas le contraire) ?
Je voudrais pouvoir disposer dans Pyzo de fonction comme prime, nextprime pour commencer, puis pouvoir faire un peu de théorie des nombres, puis un peu d'algèbre théorique, déclarer des groupes, des anneaux, faire ce que font CQ et d'autres.
Bien sûr, si c'est pour me dire de me mettre à Sage lui-même, ce n'est pas la peine.
Cordialement,
Rescassol
Réponses
-
As-tu essayé
import sage
ouimport sagemath
?The real danger is not that computers will begin to think like men, but that men will begin to think like computers.
-- Harris, Sidney J. -
Bonjour,
Oui, j'ai essayé ça, mais rien.
Cordialement,
Rescassol -
Bien sûr, si c'est pour me dire de me mettre à Sage lui-même, ce n'est pas la peine.
-
Rescassol : soit l'installation de SageMath sous Windows est cassée, et alors il faudrait rapporter le problème en amont pour que ce soit corrigé pour tout le monde et facile à installer ; soit elle n'est pas « globalement cassée », ce que toi seul (;-)) peux nous prouver en essayant.
Ce que j'ai mentionné dans l'autre fil est un peu compliqué car il s'agit de compiler SageMath, ceci car Dr. Geodingus a déjà essayé sans succès l'installation « normale ». Mais si cette installation « normale » marche bien dans ton cas, cela ne doit pas être très compliqué. -
Bonjour Rescassol,
Si tu es sous windows, je ne pense pas que tu arrives à faire ce que tu souhaites car ton installation SageMath passe par Cygwin et n'est pas accessible en dehors de cette interface.
Cordialement,
Geodingus -
Sous Linux (du moins Debian), il est dans les dépôts officiels donc tu n’as pas besoin de le compiler :
> apt show sagemath Package: sagemath Version: 9.0-4+b1 Priority: optional Section: math […]
The real danger is not that computers will begin to think like men, but that men will begin to think like computers.
-- Harris, Sidney J. -
Pas sûr que Rescassol soit sous Linux. Pour revenir à la question initiale, je pense que pour faire ce qui est souhaité, il faudrait lancer Pyzo avec l'interpréteur Python de SageMath (SageMath n'est pas « seulement quelques modules Python »), mais je ne sais pas si cela est possible.
En utilisant l'interpréteur Python de SageMath, il est possible d'appeler des fonctions SageMath au sein d'un programme Python « normal ». La preuve avec cette adaptation directe du code de cette question à Python 3 (oui, SageMath est passé à Python 3 depuis janvier dernier avec la version 9.0) :#! /chemin/vers/mon/SAGE_ROOT/sage -python import os import sys from sage.all import * if len(sys.argv) != 2: print("Usage: {} N".format(os.path.basename(sys.argv[0]))) print("Output the prime factorization of N.") sys.exit(1) print(factor(sage_eval(sys.argv[1])))
Test :$ test.py 120 2^3 * 3 * 5 $
La première exécution est très lente ; après, ça va beaucoup plus vite chez moi (effet des divers niveaux de cache, sans doute). -
Rescassol, je ne comprends pas.
Tu as un installeur Windows pour Sage
https://wiki.sagemath.org/SageWindows
J'ai vu tout un tas de gens installer Sage sur leur système Windows.
Je ne pense pas que tu sois plus maladroit que le plupart de ces gens ! -
Bonjour,
J'envisage Linux dans quelque temps, mais pour le moment, je suis sous Windows 10.
Ce que je veux est très simple.
Dans Pyzo, et pas autre chose, faire tourner:import ................... T=primes(20) print(T) b=isprime(17) print(b)
ou:import .................... A=Z(i) # Anneau des entiers de Gauss (ou n'importe quel autre Z(sqrt(5),sqrt(7)) par exemple) a,b in A # avec la syntaxe qui marche c=a*b
Cordialement,
Rescassol -
Modulo le fait que giac n'a pas de commande primes, vous pouvez faire ce genre de choses avec giacpy. Je viens de tester avec Pyzo sous Windows 7+giacpy, en ecrivant
from giacpy import * def primes(n): l=[] k=1 for j in range(n): k=nextprime(k+1) l.append(k) return l
ensuite primes(20) affiche la liste des 20 premiers premiers (les experts Python sauront mieux que moi creer un generateur avec nextprime). La commande isprime fonctionne.
Pour travailler avec des entiers de Gauss il suffit d'ecrire i=giac('i'), ensuite (2+3*i)*(1+i) fait ce qui est attendu. Pour calculer dans Z[sqrt(5)*i], il faut faire des commande normal(), par exemple normal((1+sqrt(5)*i)/(2-sqrt(5)*i)) -
Bonjour parisse,
Merci pour la référence à giacpy et cet exemple. Voici une variante de ce code avec primes() comme fonction génératrice (je traduis bêtement generator function, aucune idée s'il y a une traduction plus canonique) :#! /usr/bin/env python3 import giacpy as giac import sys def primes(n): l = [] k = 1 for j in range(n): k = giac.nextprime(k+1) l.append(k) yield k for p in primes(int(sys.argv[1])): print(p)
Pour ceux qui ne connaissent pas, le 'yield' suspend l'exécution de la fonction jusqu'à la prochaine fois où l'itérateur obtenu par évaluation de primes(int(sys.argv[1])) est sommé de fournir une valeur. C'est un moyen très économique d'itérer sur une liste d'objets Python qui « coûtent » un peu cher (calculs, entrées/sorties...) sans avoir besoin de tous les calculer et stocker à l'avance. C'est particulièrement intéressant si l'on décide de terminer l'itération de manière prématurée, en n'ayant utilisé que les premiers objets retournés par l'itérateur.
Je conseille de ne pas utiliser 'from giacpy import *' car cela écrase au minimum la fonction int() de Python... ce qui n'est pas très agréable.
Exemple d'appel du programme ci-dessus :$ python3 primes.py 10 Help file doc/fr/aide_cas not found Added 0 synonyms Help file /usr/share/giac/aide_cas not found Help file aide_cas not found 3 5 7 11 13 17 19 23 29 31
Ce serait bien si l'on pouvait éviter l'affichage des lignes suivantes :Help file doc/fr/aide_cas not found Added 0 synonyms Help file /usr/share/giac/aide_cas not found Help file aide_cas not found
-
L’intérêt d’un générateur, c’est d’être léger en mémoire.
Dans ton script, brian, j’enlèverais toute référence à l, on peut importer un seul objet d’un module et on peut envoyer j à la benne :#! /usr/bin/env python3 from giacpy import nextprime import sys def primes(n): k = 1 for _ in range(n): k = nextprime(k+1) yield k for p in primes(int(sys.argv[1])): print(p)
The real danger is not that computers will begin to think like men, but that men will begin to think like computers.
-- Harris, Sidney J. -
Tu as raison pour la liste 'l', j'ai oublié de faire le ménage. Pour le 'j', le fait de le remplacer par _ ne change absolument rien. C'est de la décoration. Et l'intérêt d'un générateur n'est pas uniquement l'économie de mémoire. Si, pour trouver le nombre premier suivant (remplacer par le problème que vous voulez), il faut faire des calculs coûteux (resp. faire une requête réseau), l'approche par générateur est intéressante : comme je l'ai dit, il y a plein de cas où l'on arrête l'itération de manière prématurée. On économise alors pas seulement de la mémoire, mais aussi du temps CPU (resp. des entrées/sorties, donc entre autres du temps tout court).
-
Bien sûr, c’est une question de style et de tics de programmation. ;-)The real danger is not that computers will begin to think like men, but that men will begin to think like computers.
-- Harris, Sidney J. -
Nous sommes d'accord. :-)
-
Bonjour,
J'ai pu installer giacpy dans Pyzo facilement.
Pour les nombres premiers, ok, mais où peut on trouver une doc sur giacpy, de préférence en français ?
Je ne l'ai pas encore exploré, mais fait il des anneaux, des idéaux, des groupes etc ... ?
Cordialement,
Rescassol -
En fait, il vaut mieux faire comme ça, sinon on loupe le 2 :
#! /usr/bin/env python3 import giacpy as giac import sys def primes(n): k = 1 for _ in range(n): k = giac.nextprime(k) yield k for p in primes(int(sys.argv[1])): print(p)
Test :$ primes.py 10 Help file doc/fr/aide_cas not found Added 0 synonyms Help file /usr/share/giac/aide_cas not found Help file aide_cas not found 2 3 5 7 11 13 17 19 23 29
-
Tape ceci dans une console Python :
import giacpy dir(giacpy)
Tu auras la liste de ce qu’il contient.The real danger is not that computers will begin to think like men, but that men will begin to think like computers.
-- Harris, Sidney J. -
@Rescassol
Tu peux aussi regarder ici, notamment à About Xcas... (Incomplete) documentation. parisse saura sans doute te recommander le ou les documents les plus appropriés. -
@Rescassol: en principe les commandes de Xcas fonctionnent dans giacpy, il suffit donc de regarder l'aide en ligne depuis Xcas ou la documentation de Xcas. Bien sur l'interface est differente, attention a l'interpreteur qui suit les regles de Python, on ne peut pas ecrire x^3 ou 5x. Il y a quelques subtilites, mais la il faudrait demander a Frederic Han qui est l'auteur de l'interface python de giac.
En ce qui concerne l'algebre, Xcas est un logiciel de calcul symbolique qui a une philosophie proche de maple, i.e. il s'adresse a un public scientifique pas forcement tres avance en maths pures : contrairement a sage, on ne doit pas declarer au prealable qu'on va travailler dans l'anneau des polynomes a coefficients dans Q ou dans Z/5Z, ce sont les commandes qui s'adaptent a leurs arguments. Par exemplea=giac('1 mod 7') quorem(a*(x**3+x+1),5*x**2+3*x)
va calculer le quotient et le reste de la division euclidienne dans Z/7Z[X], alors que quorem(x**3+x+1,5*x**2+3*x) fait le calcul dans Q[X].
Il n'y a pas actuellement d'interface giac/gap donc tres peu de commandes de groupes, cela se resume a quelques commandes sur les permutations (p1op2 -
Bonjour,
Merci à tous.
Cordialement,
Rescassol
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 165.5K Toutes les catégories
- 64 Collège/Lycée
- 22.2K Algèbre
- 37.6K Analyse
- 6.3K Arithmétique
- 61 Catégories et structures
- 1.1K Combinatoire et Graphes
- 13 Sciences des données
- 5.1K Concours et Examens
- 26 CultureMath
- 51 Enseignement à distance
- 2.9K Fondements et Logique
- 10.8K Géométrie
- 86 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 79 Informatique théorique
- 3.9K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 29 Mathématiques et finance
- 343 Mathématiques et Physique
- 5K Mathématiques et Société
- 3.4K Pédagogie, enseignement, orientation
- 10.1K Probabilités, théorie de la mesure
- 804 Shtam
- 4.2K Statistiques
- 3.8K Topologie
- 1.4K Vie du Forum et de ses membres