Mayavi: mlab.axes() provoque une exception dans Mayavi 4.5.0

Créé le 6 janv. 2017  ·  9Commentaires  ·  Source: enthought/mayavi

Salut, récemment, j'ai mis à jour Mayavi de 4.4.4 à 4.5.0. Suite à la mise à jour, j'observe une exception lorsque j'utilise la fonction mlab axes() . Voici un code de test (la ligne provoquant l'erreur est indiquée par le commentaire) :

from mayavi import mlab
from numpy import pi, sin, cos, mgrid
dphi, dtheta = pi/250.0, pi/250.0
[phi,theta] = mgrid[0:pi+dphi*1.5:dphi,0:2*pi+dtheta*1.5:dtheta]
m0 = 4; m1 = 3; m2 = 2; m3 = 3; m4 = 6; m5 = 2; m6 = 6; m7 = 4;
r = sin(m0*phi)**m1 + cos(m2*phi)**m3 + sin(m4*theta)**m5 + cos(m6*theta)**m7
x = r*sin(phi)*cos(theta)
y = r*cos(phi)
z = r*sin(phi)*sin(theta)
s = mlab.mesh(x, y, z)
mlab.axes(color=(0.9,0.9,0.9))       # LINE CAUSING ERROR
mlab.show()

Lorsque vous exécutez le code ci-dessus dans l'environnement Windows et anaconda, les messages d'erreur suivants s'affichent :

Message contextuel (boîte) :

Exception
In c:\anaconda\lib\site-packages\mayavi-4.5.0-py2.7-win-amd64.egg\tvtk\tvtk_base.py:569
TypeError: SetInputData argument 1:method requires a vtkDataSet, a vtkPolyDataNormals was provided. (in _wrap_call)

Message dans la fenêtre de la console :

No handlers could be found for logger "mayavi.core.common"
Exception occurred in traits notification handler.
Please check the log file for details.
Exception occurred in traits notification handler for object: <mayavi.tools.decorations.Axes object at 0x0000000011AC00A0>, trait: extent, old value: [0 0 0 0 0 0], new value: [-1.53801118  1.53801118 -2.          2.27326963 -1.53801118  1.53801118]
Traceback (most recent call last):
  File "C:\Anaconda\lib\site-packages\traits\trait_notifiers.py", line 340, in __call__
    self.handler( *args )
  File "C:\Anaconda\lib\site-packages\mayavi-4.5.0-py2.7-win-amd64.egg\mayavi\tools\decorations.py", line 373, in _extent_changed
    axes.module_manager.source.outputs[0].bounds
AttributeError: 'PolyDataNormals' object has no attribute 'bounds'

Informations supplémentaires

Environnement dans lequel l'exception ci-dessus se produit
Système d'exploitation : Windows 10
Installation de Python : Python 2.7 installé à l'aide d'Anaconda
Paquet Mayavi : mayavi 4.5.0 py27_0 menpo
Paquet VTK : vtk 7.0.0 py27_0 menpo
Paquet PyQt : pyqt 5.6.0 py27_1

Environnement dans lequel le code ci-dessus s'exécute correctement
Système d'exploitation : Windows 7
Installation de Python : Python 2.7 installé à l'aide d'Anaconda
Paquet Mayavi : mayavi 4.4.4 py27_0 menpo
Paquet VTK : vtk 7.0.0 py27_0 menpo
Paquet PyQt : pyqt 4.11.4 py27_5

Commentaire le plus utile

Si cela présente toujours un intérêt, avec une configuration similaire à celle de Jeitan, je viens d'avoir la même erreur et je l'ai calmée en éditant mayavi\modules\axes.py, dans update_pipeline, en changeant :
self.configure_input_data(self.axes, src.outputs[0])
à:
self.configure_input_data(self.axes, src.outputs[0].output)

(Le premier est de type PolyDataNormals, le dernier est PolyData, qui dérive de DataSet.)

Tous les 9 commentaires

Pour ce que ça vaut, je viens de dupliquer cette erreur dans les conditions suivantes :

Système d'exploitation : Windows 10
Installation de Python : Python 2.7 installé à l'aide d'Anaconda
Paquet Mayavi : mayavi 4.5.0 py27_0
Paquet VTK : vtk 6.3.0 py27_1
Paquet PyQt : pyqt 4.11.4 py27_4

Si je rétrograde en utilisant conda install mayavi=4.4 * le code fonctionne
Mayavi -> 4.4.0
VTK -> 5.10.1

* Note sans rapport - cela rétrograde numpy de 1.10 à 1.9.3, ce qui casse Spyder, vous devez donc le mettre à niveau manuellement

J'ai le même problème ici. Personne n'a la moindre idée ?

Si cela présente toujours un intérêt, avec une configuration similaire à celle de Jeitan, je viens d'avoir la même erreur et je l'ai calmée en éditant mayavi\modules\axes.py, dans update_pipeline, en changeant :
self.configure_input_data(self.axes, src.outputs[0])
à:
self.configure_input_data(self.axes, src.outputs[0].output)

(Le premier est de type PolyDataNormals, le dernier est PolyData, qui dérive de DataSet.)

J'ai également rencontré le problème.

@jdonegan Vos suggestions ont résolu mes problèmes : +1 : . Je pense que vous devriez publier un correctif afin que cela n'ait pas à être fait manuellement

J'avais également ce problème et le correctif de @jdonegan a bien fonctionné. J'allais soumettre un PR mais on dirait que @prabhuramachandran a déjà poussé un commit qui corrige cela, en remplaçant à la place la ligne en question par :
self.configure_input(self.axes, src.outputs[0])

Peut-être que cette question devrait être fermée pour éviter toute confusion?

De même, le même problème et un correctif similaire doivent être appliqués à la ligne 373 dans decorations.py :
axes.axes.ranges = \
axes.module_manager.source.outputs[0].output.bounds

résoudre l'erreur
"AttributeError : l'objet 'PolyDataNormals' n'a pas d'attribut 'bounds'"

Je pense donc que le commit 996fb25 n'a résolu qu'une partie du problème.

Comme @TinghuiWang l'a noté, cela doit être corrigé à plusieurs endroits. Cependant, en fonction de votre appel de tracé (pour moi, il s'agissait de plot3d vs points3d), vous devrez peut-être le modifier. Je l'ai corrigé comme suit :

Dans mayavi\modules\axes.py à la ligne 173, j'ai changé

self.configure_input_data(self.axes, src.outputs[0])

à

data = src.outputs[0] if not hasattr(src.outputs[0], 'output') else src.outputs[0].output
self.configure_input_data(self.axes, data)

De même dans \mayavi\tools\decorations.py à la ligne 372 j'ai canged

axes.axes.ranges = axes.module_manager.source.outputs[0].bounds

à

src = axes.module_manager.source
data = src.outputs[0] if not hasattr(src.outputs[0], 'output') else src.outputs[0].output
axes.axes.ranges = data.bounds

S'il vous plaît, corrigez-le les gars. Les haches sont vraiment nécessaires.

Suit la méthode ci-dessus, je n'ai résolu qu'une partie du problème, j'ai toujours l'exception:
Exception occurred in traits notification handler for object: <mayavi.tools.decorations.Axes object at 0x11a41ce60>, trait: extent, old value: [0 0 0 0 0 0], new value: [ -2. 17. -2. 17. -4.85316642 6.54683358] NoneType: None

et aucune étiquette d'axes sur l'image.

N'importe qui peut aider ? Merci!

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

rahulporuri picture rahulporuri  ·  3Commentaires

rambalachandran picture rambalachandran  ·  9Commentaires

relyativist picture relyativist  ·  16Commentaires

PennyQ picture PennyQ  ·  4Commentaires

anntzer picture anntzer  ·  7Commentaires