Python-Sage — Les-mathematiques.net The most powerful custom community solution in the world

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

Réponses

  • As-tu essayé
    import sage
    
    ou
    import sagemath
    
    ?
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Bonjour,

    Oui, j'ai essayé ça, mais rien.

    Cordialement,

    Rescassol
  • ça semble possible sous dans la forge d'Anaconda
  • Bien sûr, si c'est pour me dire de me mettre à Sage lui-même, ce n'est pas la peine.
    Et pourquoi ? Si tu fais du python, ça ne devrait pas te poser de problème.
  • Bonsoir,

    Ben, yaka lire ça pour voir qu'il faut être un geek, ce que je ne suis pas.

    Cordialemennt,

    Rescassol
  • 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
    […]
    
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • 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 !
  • Si vous avez besoin d'un bon noyau de calcul formel sous Python dans Windows, vous pouvez aussi envisager l'installation de giacpy (avec pip):
    giacpy
  • 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)
    
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • 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. ;-)
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • 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.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • @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 exemple
    a=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.
Success message!