Hm.
It seems that many people have problems with wxPython 2.9 on Mavericks.
I have tried installing wxPython 2.8, but that would not work on my system.
The GUI will show up when starting relax.
Complaining about: "iCCP: known incorrect sRGB profile".
And terminal will show:
"
2013-12-03 22:56:31.956 Python[1180:d0b] CoreText performance note: Client
called CTFontCreateWithName() using name ".Lucida Grande UI" and got font with
PostScript name ".LucidaGrandeUI". For best performance, only use PostScript
names when calling this API.
2013-12-03 22:56:31.956 Python[1180:d0b] CoreText performance note: Set a
breakpoint on CTFontLogSuboptimalRequest to debug.
2013-12-03 22:56:37.521 Python[1180:d0b] CoreText performance note: Client
called CTFontCreateWithName() using name ".Lucida Grande UI" and got font with
PostScript name ".LucidaGrandeUI". For best performance, only use PostScript
names when calling this API.
"
This problem has been reported before:
http://successfulsoftware.net/2013/10/23/fixing-qt-4-for-mac-os-x-10-9-mavericks/
https://bugreports.qt-project.org/browse/QTBUG-32789
http://wxpython-users.1045709.n5.nabble.com/another-possible-issue-with-new-Mac-OS-Mavericks-td5719024.html
In the relax GUI:
The Unit test will perform fine.
The GUI test will crash relax.
The system test will run for a long time, and crash at some point.
(After 30 dots ?)
It is hard to see at which points it crashes.
The system test performed in terminal goes fine.
-------
I found one instance of "AppendText" in line 1048.
Should I try to alter it ?
from:
self.AppendText(string_list[i])
to:
wx.CallAfter(self.textArea.AppendText, string_list[i])
or
wx.CallAfter(self.AppendText, string_list[i])
-------
[tlinnet@haddock relax_trunk]$ grep -r "AppendText" ./gui
Binary file ./gui/controller.pyc matches
./gui/controller.py: self.AppendText(string_list[i])
[tlinnet@haddock relax_trunk]$ grep -r "wx.CallAfter(" ./gui
./gui/spin_viewer/frame.py: wx.CallAfter(item.Enable, enable)
./gui/spin_viewer/frame.py: wx.CallAfter(self.bar.EnableTool,
self.spin_loader_id, enable)
./gui/spin_viewer/frame.py: wx.CallAfter(self.pipe_name.Enable, enable)
./gui/spin_viewer/frame.py: wx.CallAfter(self.refresh_safe)
./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_NEW, enable)
./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_CLOSE, enable)
./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_CLOSE_ALL, enable)
./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_OPEN, enable)
./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_SAVE, enable)
./gui/relax_gui.py: wx.CallAfter(self.toolbar.EnableTool,
self.TB_FILE_SAVE_AS, enable)
./gui/relax_gui.py:
wx.CallAfter(self.controller.main_gauge.SetValue, 100)
./gui/relax_gui.py: wx.CallAfter(self.show_results_viewer_safe,
warn=True)
./gui/relax_gui.py: wx.CallAfter(dlg.ShowModal)
./gui/relax_gui.py: wx.CallAfter(self.show_results_viewer_safe,
warn=False)
./gui/relax_gui.py: wx.CallAfter(self.status_bar.SetStatusText,
"(C) 2001-2013 the relax development team", 0)
./gui/relax_gui.py: wx.CallAfter(self.status_bar.SetStatusText,
"Current data pipe:", 1)
./gui/relax_gui.py: wx.CallAfter(self.status_bar.SetStatusText, pipe,
2)
./gui/icons.py: wx.CallAfter(self.gui.exit_gui)
./gui/results_viewer.py: wx.CallAfter(self.pipe_name.Enable, enable)
./gui/results_viewer.py: wx.CallAfter(self.button_open.Enable, enable)
./gui/results_viewer.py: wx.CallAfter(self.refresh_safe)
./gui/results_viewer.py: wx.CallAfter(self.Raise)
./gui/analyses/auto_noe.py:
wx.CallAfter(self.field_nmr_frq.Enable, enable)
./gui/analyses/auto_noe.py:
wx.CallAfter(self.field_results_dir.Enable, enable)
./gui/analyses/auto_noe.py:
wx.CallAfter(self.spin_systems.Enable, enable)
./gui/analyses/auto_noe.py:
wx.CallAfter(self.peak_intensity.Enable, enable)
./gui/analyses/auto_noe.py:
wx.CallAfter(self.button_exec_relax.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.field_results_dir.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.field_pre_run_dir.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.spin_systems.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.field_cluster.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.button_isotope.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.button_r1.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.button_chemical_shift.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.button_interatom_define.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.peak_intensity.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.model_field.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.button_exec_relax.Enable, enable)
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.field_cluster.SetValue, "free spins")
./gui/analyses/auto_relax_disp.py:
wx.CallAfter(self.field_cluster.SetValue, text)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.field_results_dir.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.spin_systems.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.relax_data.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.button_dipole_pair.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.button_csa.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.button_isotope_heteronuc.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.button_isotope_proton.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.local_tm_model_field.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.mf_model_field.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.grid_inc.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.mc_sim_num.Enable, enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.max_iter.Enable, enable)
./gui/analyses/auto_model_free.py: wx.CallAfter(self.mode.Enable,
enable)
./gui/analyses/auto_model_free.py:
wx.CallAfter(self.button_exec_relax.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.field_nmr_frq.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.field_results_dir.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.spin_systems.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.peak_intensity.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.grid_inc.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.mc_sim_num.Enable, enable)
./gui/analyses/auto_rx_base.py:
wx.CallAfter(self.button_exec_relax.Enable, enable)
./gui/analyses/__init__.py:
wx.CallAfter(self.notebook.SetSelection, self._current)
./gui/analyses/__init__.py:
wx.CallAfter(status.observers.gui_analysis.notify)
./gui/analyses/base.py:
wx.CallAfter(self.spin_systems.SetValue,
str_to_gui(self.spin_count()))
./gui/uf_objects.py: wx.CallAfter(app.gui.controller.Raise)
./gui/relax_prompt.py: wx.CallAfter(self.prompt.Enable, enable)
./gui/controller.py: wx.CallAfter(self.main_gauge.Pulse)
./gui/controller.py: wx.CallAfter(self.mc_gauge_rx.SetValue, 0)
./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue, 0)
./gui/controller.py: wx.CallAfter(self.progress_gauge_mf.SetValue,
0)
./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 0)
./gui/controller.py: wx.CallAfter(self.cdp.SetValue, str_to_gui(pipe))
./gui/controller.py: wx.CallAfter(self.name.SetValue, str_to_gui(name))
./gui/controller.py: wx.CallAfter(self.panel_rx.Show)
./gui/controller.py: wx.CallAfter(self.update_rx)
./gui/controller.py: wx.CallAfter(self.panel_rx.Hide)
./gui/controller.py: wx.CallAfter(self.panel_mf.Show)
./gui/controller.py: wx.CallAfter(self.update_mf)
./gui/controller.py: wx.CallAfter(self.panel_mf.Hide)
./gui/controller.py: wx.CallAfter(self.update_gauge)
./gui/controller.py: wx.CallAfter(self.main_panel.Layout)
./gui/controller.py: wx.CallAfter(self.timer.Start, 100)
./gui/controller.py: wx.CallAfter(self.mc_gauge_rx.SetValue,
100)
./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue,
100)
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, 100)
./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 100)
./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 0)
./gui/controller.py: wx.CallAfter(self.mc_gauge_rx.SetValue, 0)
./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue, 0)
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, 0)
./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 0)
./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue, 100)
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, 100)
./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 100)
./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue, 0)
./gui/controller.py: wx.CallAfter(self.progress_gauge_mf.SetValue,
0)
./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 0)
./gui/controller.py:
wx.CallAfter(self.global_model_mf.SetValue,
str_to_gui(status.auto_analysis[key].diff_model))
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, percent)
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, 0)
./gui/controller.py:
wx.CallAfter(self.progress_gauge_mf.SetValue, percent)
./gui/controller.py: wx.CallAfter(self.mc_gauge_mf.SetValue,
percent)
./gui/controller.py: wx.CallAfter(self.mc_gauge_rx.SetValue, 0)
./gui/controller.py: wx.CallAfter(self.main_gauge.SetValue, 0)
./gui/controller.py: wx.CallAfter(self.mc_gauge_rx.SetValue,
percent)
./gui/controller.py: wx.CallAfter(self.control.write)
./gui/controller.py: wx.CallAfter(self.control.write)
./gui/pipe_editor.py: wx.CallAfter(self.button_bundle.Enable,
False)
./gui/pipe_editor.py: wx.CallAfter(self.button_create.Enable,
False)
./gui/pipe_editor.py: wx.CallAfter(self.button_copy.Enable, False)
./gui/pipe_editor.py: wx.CallAfter(self.button_delete.Enable,
False)
./gui/pipe_editor.py: wx.CallAfter(self.button_hybrid.Enable,
False)
./gui/pipe_editor.py: wx.CallAfter(self.button_switch.Enable,
False)
./gui/pipe_editor.py: wx.CallAfter(self.button_bundle.Enable, True)
./gui/pipe_editor.py: wx.CallAfter(self.button_create.Enable, True)
./gui/pipe_editor.py: wx.CallAfter(self.button_copy.Enable, True)
./gui/pipe_editor.py: wx.CallAfter(self.button_delete.Enable, True)
./gui/pipe_editor.py: wx.CallAfter(self.button_hybrid.Enable, True)
./gui/pipe_editor.py: wx.CallAfter(self.button_switch.Enable, True)
./gui/pipe_editor.py: wx.CallAfter(self.Raise)
./gui/pipe_editor.py: wx.CallAfter(self.update_grid_safe)
./gui/interpreter.py: wx.CallAfter(gui_raise,
instance, raise_flag=False)
./gui/components/base_list.py: wx.CallAfter(self.build_element_safe)
2013/12/4 Edward d'Auvergne <edward@xxxxxxxxxxxxx>:
Hi,
It could be related to the first link. These issues are difficult to
track down and find, as a GUI must naturally run multi-threaded and
multi-threaded debugging is a nightmare. The problem is likely to be
fixed by wrapping a call to a wxPython method or function within a
wx.CallAfter() call. Grep the sources to see how often we have used
this construct already. This seems to only be triggered on your
system as I do not see it on Mac OS X 10.6, 10.7 and 10.8, Windows
2000, Vista and 7, or Linux (Mandriva 2008.1 32-bit, Mageia 1 64-bit,
Mageia 3 64-bit, SUSE 64-bit, etc.). It may be related to wxPython
2.9.5.0.
This does not mean that it is not a bug in the relax GUI sources, just
that it has never been uncovered before. One trick is to find a way
of reliably and quickly reproducing the error, maybe by running a
single GUI test, and then to use the print statements to find exactly
where the error occurred. Then return statements or massive code
deletion can be used to exit a function early. If the bug is gone
after that, you know the error was in the part that was deleted. Then
this can be repeated until the bad function call can be found. The
error could also be in the GUI test itself. Here wx.Yield() calls are
often needed to prevent racing, as the test runs the GUI code much,
much faster than what a user sitting at a computer could ever do.
Regards,
Edward
On 3 December 2013 22:23, Troels E. Linnet
<NO-REPLY.INVALID-ADDRESS@xxxxxxx> wrote:
URL:
<http://gna.org/bugs/?21324>
Summary: GUI error on mac OS X Maverics 10.9
Project: relax
Submitted by: tlinnet
Submitted on: Tue 03 Dec 2013 09:23:31 PM GMT
Category: None
Severity: 3 - Normal
Priority: 3 - Low
Status: None
Privacy: Public
Assigned to: None
Originator Name:
Originator Email:
Open/Closed: Open
Discussion Lock: Any
Release: Repository: trunk
Operating System: Mac OS X (Intel)
_______________________________________________________
Details:
I have tried to use:
wxPython2.9-osx-2.9.5.0-cocoa-py2.7.dmg
and
brew install wxmac
to get the same GUI errors.
Log attached.
*** Terminating app due to uncaught exception 'NSRangeException', reason:
'***
-[__NSArrayM objectAtIndex:]: index 18446744073709551615 beyond bounds for
empty array'
Could it be related to this post?
http://stackoverflow.com/questions/17246160/textctrl-providing-an-out-of-bound-exception-in-wxpython
http://stackoverflow.com/questions/13085683/xcode-terminating-app-due-to-uncaught-exception-nsrangeexception
http://stackoverflow.com/questions/4289894/terminating-app-due-to-uncaught-exception-nsrangeexception-reason
I will now try with:
wxPython2.9-osx-2.9.5.0-carbon-py2.7.dmg
_______________________________________________________
File Attachments:
-------------------------------------------------------
Date: Tue 03 Dec 2013 09:23:31 PM GMT Name: gui_error.log Size: 70kB
By:
tlinnet
<http://gna.org/bugs/download.php?file_id=19415>
_______________________________________________________
Reply to this item at:
<http://gna.org/bugs/?21324>
_______________________________________________
Message sent via/by Gna!
http://gna.org/
_______________________________________________
relax (http://www.nmr-relax.com)
This is the relax-devel mailing list
relax-devel@xxxxxxx
To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel