IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    août 2003
    Messages
    1 778
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2003
    Messages : 1 778
    Points : 2 410
    Points
    2 410
    Par défaut [sympy] spplot warning : bug de sympy ou mauvaise implémentation de ma part ?
    Bonjour à tous,

    Dans le cadre d'un module universitaire de programmation python pour les mathématiques, on me demande de représenter graphiquement la fonction suivante en utilisant Sympy :
    Nom : 20210202_sympy_func1.png
Affichages : 30
Taille : 29,5 Ko

    Voici la façon dont j'ai effectué cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from sympy.abc import k
    f=sp.Sum(sp.sin(k**2*x)/k**5,(k,1,100))
    sp.plot(f,(x,-100,100))
    En temps normal, je ne vais pas poster une quetsion de cours sur un forum publique mais ici, lorsque j'exécute cette commande, j'ai le message de warning suivant
    C:\Users\xxx\anaconda3\lib\site-packages\sympy\plotting\experimental_lambdify.py:233: UserWarning: The evaluation of the expression is problematic. We are trying a failback method that may still work. Please report this as a bug.
    warnings.warn('The evaluation of the expression is'


    ET la courbe fini tout de même par s'afficher :
    Nom : 20210202_sympy_func2.png
Affichages : 30
Taille : 105,6 Ko
    J'aimerais donc savoir si, de votre point de vue, c'est un pur bug sympy ou bien une mauvaise façon de procéder de ma part ?
    Et dans le cas ou c'est une mauvaise utilisation de ma part, avoir svp des pistes sur comment j'aurais pu mieux implémenter cela.
    Merci de votre temps!
    ----------------------------------------------------
    Consultant technico-fonctionnel SAP logistique -
    Mon site sur developpez
    ---------------------------------------------------
    Anakin Skywalker turn to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2.

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    mars 2013
    Messages
    1 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : mars 2013
    Messages : 1 111
    Points : 2 082
    Points
    2 082
    Par défaut
    Effectivement c'est un warning, donc ce n'est pas bloquant dans l’exécution du script.
    Cependant si l'on ne sait pas ce que c'est, c'est en effet toujours bon de se renseigner.

    Bien évidemment, il y a google comme source, mais vous en avez également une autre à disposition : le code de sympy lui même !

    Et en l'épluchant rapidement (l'erreur pointée se trouve ici) je remarque que :
    - la fonction utilisée se trouve dans le fichier experimental_lambdify.py. Donc qui dit experimental, dit à priori pas encore complètement au point.
    - le warning est soulevé lorsqu'il y a un TypeError. Surement sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = complex(self.lambda_func(args))
    . (NB: Dans la cas d'un problème de division par 0, on fait un return avant, donc on ne voit pas ce warning). Donc c'est dû à une erreur de type. Maintenant pourquoi est ce qu'il y a un TypeError là, et bien ça il faut retracer le chemin des appels de fonctions, depuis ce que vous vous avez tapé comme commande, jusqu'à la ligne ou le warning est affiché. L'exercice n'est pas toujours aisé, mais c'est très formateur.
    - Dans le __init__ de cette class Lambdify, on voit que 3 possibilités sont définies pour self.lambda_func (la première ayant été choisie). Ici le code témoigne donc bien du fait que ça pourrait encore bien changé car ils ne sont pas sûr. Il est d'ailleurs probable que les développeurs se doutaient qu'il existe des cas pathologiques, mais sans en avoir identifié. Leur reporter cela comme un bug, leur offrirait donc un cas test pathologique que leur algorithme est censé tout de même digéré correctement. Donc n'hésitez pas à ouvrir un bugreport.

    EDIT : Donc pour répondre plus précisément à votre question, de mon point de vue vous avez soulevé un bug sympy, mais vous auriiez tout de même peut-être la possibilité de le corriger/contourner à la main, en comprenant qu'est ce qui engendre cela, et en agissant dessus. Cela fera certainement un code plus long ceci dit, car vous allez peut être devoir réécrire une partie de la pile d'appel de fonction, pour n'agir que sur une petite sous partie bien précise

  3. #3
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    août 2003
    Messages
    1 778
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2003
    Messages : 1 778
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour lg_53,

    merci de votre réponse.
    En parallèle j'ai également adressé la question à l'enseignant de cours qui m'indique que sp.sum conserve l'expression sous forme symbolique et essaie de recalculer la fonction pour chaque itération quand on utilise plot ce qui peut potentiellement être problématique et dans tous les cas très lents.
    IL m'a recommandé d'utiliser sp.summation à la place et de garder sp.sum plutôt pour un somme infini de termes de série de fonctions (ie pour un cas ou je remplacerais la borne "100" de la somme par +inf)
    Après essaie je constate que :
    • j'obtiens exactement la même courbe avec sp.summation (donc d'une certain façon ça veut dire que malgré le warning sp.sum avait bien généré la courbe attendue)
    • c'est infiniment plus rapide avec sp.summation et sans aucune message de warning


    Merci pour les conseils s'agissant de comment remontrer à la cause source.
    Je ne sais pas si j'aurai le courage de me lancer la dedans pour ce cas, mais je note bien la recommandation et je vais également regarder comment il m'est possible de reporter un bug (pour le moment je dois avouer en ignorer la procédure)
    Cordialement
    ----------------------------------------------------
    Consultant technico-fonctionnel SAP logistique -
    Mon site sur developpez
    ---------------------------------------------------
    Anakin Skywalker turn to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2.

  4. #4
    Membre chevronné

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    mars 2013
    Messages
    1 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : mars 2013
    Messages : 1 111
    Points : 2 082
    Points
    2 082
    Par défaut
    Concernant le BugReport, sur GitHub, vous avez un onglet "Issues", dans lequel vous trouverez un bouton "New issue".
    Si vous n'avez pas encore de compte github, ce sera le moment de vous en faire un, il vous resservira c'est sûr.
    Il faudra tout écrire en anglais bien sûr.

    Penser à recherche si qqn n'a pas déjà ouvert un BugReport avec exactement le même exemple. Si c'est le cas, vous pouvez rebondir sur le ticket déjà ouvert. Si c'est proche mais pas tout à fait pareil, ouvrez quand même un nouveau rapport, en citant ceux qui s'en rapprochent.

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/03/2014, 09h51
  2. Réponses: 8
    Dernier message: 18/07/2010, 21h16
  3. Vilain bug ou mauvaise utilisation de ma part ?
    Par ForgetTheNorm dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 03/04/2008, 16h39
  4. Bug de CString ? ou mauvaise utilisation !
    Par globule71 dans le forum MFC
    Réponses: 11
    Dernier message: 12/04/2007, 17h36
  5. [gcc][bug?] warning: will never be executed
    Par PRomu@ld dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 22/08/2006, 16h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo