Mayavi: mlab.axes () causa una excepción en Mayavi 4.5.0

Creado en 6 ene. 2017  ·  9Comentarios  ·  Fuente: enthought/mayavi

Hola, recientemente actualicé Mayavi de 4.4.4 a 4.5.0. Después de la actualización, observo una excepción cuando uso la función mlab axes() . Aquí hay un código de prueba (la línea que causa el error está indicada por el comentario):

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()

Cuando ejecuto el código anterior en el entorno de Windows y anaconda, veo los siguientes mensajes de error:

Mensaje emergente (cuadro):

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)

Mensaje en la ventana de la consola:

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'

Información extra

Entorno en el que se produce la excepción anterior
SO: Windows 10
Instalación de Python: Python 2.7 instalado usando Anaconda
Paquete Mayavi: mayavi 4.5.0 py27_0 menpo
Paquete VTK: vtk 7.0.0 py27_0 menpo
Paquete PyQt: pyqt 5.6.0 py27_1

Entorno en el que el código anterior se ejecuta correctamente
SO: Windows 7
Instalación de Python: Python 2.7 instalado usando Anaconda
Paquete Mayavi: mayavi 4.4.4 py27_0 menpo
Paquete VTK: vtk 7.0.0 py27_0 menpo
Paquete PyQt: pyqt 4.11.4 py27_5

Comentario más útil

Si todavía es de interés, con una configuración similar a la de Jeitan, tuve el mismo error y lo eliminé editando mayavi \ modules \ axes.py, en update_pipeline, cambiando:
self.configure_input_data (self.axes, src.outputs [0])
para:
self.configure_input_data (self.axes, src.outputs [0] .output)

(El primero es tipo PolyDataNormals, el último es PolyData, que se deriva de DataSet).

Todos 9 comentarios

Por lo que vale, acabo de duplicar este error en las siguientes condiciones:

SO: Windows 10
Instalación de Python: Python 2.7 instalado usando Anaconda
Paquete Mayavi: mayavi 4.5.0 py27_0
Paquete VTK: vtk 6.3.0 py27_1
Paquete PyQt: pyqt 4.11.4 py27_4

Si degrado usando conda install mayavi=4.4 * el código funciona
Mayavi -> 4.4.0
VTK -> 5.10.1

* Nota no relacionada: esto rebaja numpy de 1.10 a 1.9.3, lo que rompe Spyder, por lo que debe volver a actualizarlo manualmente

Tengo el mismo problema aquí. ¿Nadie tiene ni idea?

Si todavía es de interés, con una configuración similar a la de Jeitan, tuve el mismo error y lo eliminé editando mayavi \ modules \ axes.py, en update_pipeline, cambiando:
self.configure_input_data (self.axes, src.outputs [0])
para:
self.configure_input_data (self.axes, src.outputs [0] .output)

(El primero es tipo PolyDataNormals, el último es PolyData, que se deriva de DataSet).

También encontré el problema.

@jdonegan Tus sugerencias solucionaron mis problemas: +1:. Creo que debería publicar una solución para que no tenga que hacerse manualmente

También estaba teniendo este problema y la solución de @jdonegan funcionó bien. Iba a enviar un PR, pero parece que @prabhuramachandran ya ha
self.configure_input (self.axes, src.outputs [0])

¿Quizás este tema debería cerrarse para evitar confusiones?

De manera similar, se debe aplicar el mismo problema y una solución similar a la línea 373 en decorations.py:
axes.axes.ranges = \
axes.module_manager.source.outputs [0] .output.bounds

para resolver el error
"AttributeError: el objeto 'PolyDataNormals' no tiene ningún atributo 'límites'"

Así que creo que el compromiso 996fb25 solo solucionó una parte del problema.

Como señaló @TinghuiWang , esto debe

En mayavi\modules\axes.py en la línea 173, cambié

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

para

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

De manera similar, en \mayavi\tools\decorations.py en la línea 372 cambié

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

para

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

Por favor, arréglenlo, chicos. Los ejes son realmente necesarios.

Sigue el método anterior, solo resolví parte del problema, todavía tengo la excepción:
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

y sin etiqueta de ejes en la imagen.

¿Alguien puede ayudar? ¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

Make42 picture Make42  ·  7Comentarios

anntzer picture anntzer  ·  7Comentarios

PennyQ picture PennyQ  ·  4Comentarios

kitchoi picture kitchoi  ·  10Comentarios

igamenovoer picture igamenovoer  ·  7Comentarios