Mayavi: mlab.axes () causa exceção em Mayavi 4.5.0

Criado em 6 jan. 2017  ·  9Comentários  ·  Fonte: enthought/mayavi

Olá, recentemente, atualizei o Mayavi de 4.4.4 para 4.5.0. Após a atualização, estou observando uma exceção quando uso a função mlab axes() . Aqui está um código de teste (a linha que causa o erro é indicada pelo comentário):

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

Quando executo o código acima no ambiente Windows e anaconda, vejo as seguintes mensagens de erro:

Mensagem pop-up (caixa):

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)

Mensagem na janela do 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'

Informação extra

Ambiente em que ocorre a exceção acima
SO: Windows 10
Instalação do Python: Python 2.7 instalado usando Anaconda
Pacote Mayavi: mayavi 4.5.0 py27_0 menpo
Pacote VTK: vtk 7.0.0 py27_0 menpo
Pacote PyQt: pyqt 5.6.0 py27_1

Ambiente no qual o código acima é executado OK
SO: Windows 7
Instalação do Python: Python 2.7 instalado usando Anaconda
Pacote Mayavi: mayavi 4.4.4 py27_0 menpo
Pacote VTK: vtk 7.0.0 py27_0 menpo
Pacote PyQt: pyqt 4.11.4 py27_5

Comentários muito úteis

Se ainda tiver algum interesse, com uma configuração semelhante à de Jeitan, apenas tive o mesmo erro e o apaguei editando mayavi \ modules \ axes.py, em update_pipeline, alterando:
self.configure_input_data (self.axes, src.outputs [0])
para:
self.configure_input_data (self.axes, src.outputs [0] .output)

(O primeiro é o tipo PolyDataNormals, o último é PolyData, que deriva de DataSet.)

Todos 9 comentários

Para valer a pena, acabei de duplicar esse erro nas seguintes condições:

SO: Windows 10
Instalação do Python: Python 2.7 instalado usando Anaconda
Pacote Mayavi: mayavi 4.5.0 py27_0
Pacote VTK: vtk 6.3.0 py27_1
Pacote PyQt: pyqt 4.11.4 py27_4

Se eu fizer downgrade usando conda install mayavi=4.4 *, o código funcionará
Mayavi -> 4.4.0
VTK -> 5.10.1

* Nota não relacionada - isso reduz o numpy de 1.10 para 1.9.3, o que quebra o Spyder, então você tem que atualizá-lo manualmente

Eu tenho o mesmo problema aqui. Ninguém tem ideia?

Se ainda tiver algum interesse, com uma configuração semelhante à de Jeitan, apenas tive o mesmo erro e o apaguei editando mayavi \ modules \ axes.py, em update_pipeline, alterando:
self.configure_input_data (self.axes, src.outputs [0])
para:
self.configure_input_data (self.axes, src.outputs [0] .output)

(O primeiro é o tipo PolyDataNormals, o último é PolyData, que deriva de DataSet.)

Eu também encontrei o problema.

@jdonegan Suas sugestões resolveram meus problemas: +1:. Acho que você deve postar uma correção para que não precise ser feita manualmente

Eu também estava tendo esse problema e a correção de @jdonegan funcionou bem. Ia enviar um PR, mas parece que @prabhuramachandran
self.configure_input (self.axes, src.outputs [0])

Talvez este problema deva ser encerrado para evitar confusão?

Da mesma forma, o mesmo problema e correção semelhante devem ser aplicados à linha 373 em decorações.py:
axes.axes.ranges = \
axes.module_manager.source.outputs [0] .output.bounds

resolver o erro
"AttributeError: o objeto 'PolyDataNormals' não tem atributo 'limites'"

Então eu acredito que o commit 996fb25 só resolveu parte do problema.

Como @TinghuiWang observou, isso precisa ser corrigido em vários lugares. No entanto, dependendo da sua chamada de plot (para mim foi plot3d vs points3d), pode ser necessário alterá-lo de volta. Eu consertei da seguinte maneira:

Em mayavi\modules\axes.py na linha 173, eu mudei

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)

Da mesma forma em \mayavi\tools\decorations.py na linha 372 eu roubei

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, corrijam caras. Os eixos são realmente necessários.

Segue o método acima, só resolvi parte do problema, ainda tenho a exceção:
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

e nenhum rótulo de eixos na imagem.

Alguém pode ajudar? Obrigado!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

rambalachandran picture rambalachandran  ·  9Comentários

thoth291 picture thoth291  ·  10Comentários

kitchoi picture kitchoi  ·  10Comentários

aestrivex picture aestrivex  ·  9Comentários

rpep picture rpep  ·  7Comentários