Hi Edward.

The Menu.py and MessageDialog.py functions fine.

I will wait and see what happens.
And if it drives me crazy, I will try to go for another round.

Best
Troels

2013/12/4 Edward d'Auvergne <edw...@nmr-relax.com>:
> Hi,
>
> It is a very tough problem to solve, and it is likely to be a wxPython
> bug.  Oh, what if you run the Menu.py wx_demo?  Or MessageDialog.py?
> The testing in http://wiki.nmr-relax.com/Installation_test#wxPython_test
> only checks a tiny fraction of all wxPython functionality used in
> relax so it may not show the problem.  It could be that one of the
> PNGs in wxPython, for example those used in the message dialogs, are
> corrupted (according to the PNG people nowadays).  It could be that
> one of the standard Mac OS X icons distributed with the operating
> system is giving the iCCP warning too.
>
> Regards,
>
> Edward
>
>
>
> On 4 December 2013 11:49, Troels Emtekær Linnet <tlin...@nmr-relax.com> wrote:
>> Hi Edward.
>>
>> The code change did not make a difference.
>>
>> The wxPython demo runs fine:
>> http://wiki.nmr-relax.com/Installation_test#wxPython_test
>>
>> I see the smiley face fine.
>> In the terminal there are still the fonts issue, but not the iCCP warning.
>>
>> Hm, I guess i will see what happens if I start using the GUI with
>> relax on real data applications.
>> Anyway, I will probably run a lot more scripting than GUI.
>>
>> And I will wait to see if there comes a fix for wxPython for Mavericks.
>>
>> Best
>> Troels
>>
>>
>> 2013/12/4 Edward d'Auvergne <edw...@nmr-relax.com>:
>>> Hi,
>>>
>>> There are literally thousands of places where the wx.CallAfter() call
>>> could be used.  This may not even fix the problem.  Does the error go
>>> away if you make the change?  On a different note, do you see those
>>> wxPython iCCP and font issues if you run the wx_demo?  If so, then
>>> there is no point searching for these errors in relax, for there are
>>> none.  It will be a wxPython issue.  My feeling is that everything you
>>> see is due to problems with wxPython, as my tests on multiple
>>> operating system, both 32 and 64-bit show nothing.  The crash in the
>>> test suite might be fixable from within relax however.
>>>
>>> Regards,
>>>
>>> Edward
>>>
>>>
>>> On 4 December 2013 11:26, Troels Emtekær Linnet <tlin...@nmr-relax.com> 
>>> wrote:
>>>> 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 <edw...@nmr-relax.com>:
>>>>> 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-addr...@gna.org> 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@gna.org
>>>>>>
>>>>>> 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

_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-devel mailing list
relax-devel@gna.org

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

Reply via email to