# relax 3.2.2

**Lua error: Internal error: The interpreter exited with status 137.**

## Contents

## Description

This is a major feature and bugfix release. It includes a large speed up of all analytic relaxation dispersion models, the correct handling of edge case failures in all models of the dispersion analysis, a number of fixes for the handling of list-type data in the GUI user function windows including the fatal GUI crashes on Mac OS X systems, and many other bug fixes. Please see below for a full list of features, changes and bugfixes. All users of the dispersion analysis, the relax GUI, or Mac OS X systems are recommended to upgrade to this newest version.

## Download

The new relax versions can be downloaded from http://www.nmr-relax.com/download.html. If binary distributions are not yet available for your platform and you manage to compile the binary modules, please consider contributing these to the relax project (described in section 3.6 of the relax manual, http://www.nmr-relax.com/manual/relax_distribution_archives.html).

## CHANGES file

Version 3.2.2

(5 June 2014, from /trunk)

http://svn.gna.org/svn/relax/tags/3.2.2

### Features

- Large speedups of all analytical relaxation dispersion models by converting the R
_{2eff}calculations and value error checking from single values to numpy arrays. - Edge cases where function failures occur are now properly handled for all analytical relaxation dispersion models.
- Completion of the frame_order.pdb_model user function backend for the frame order PDB representation.
- relax will now detect when files with *.gz or *.bz2 file extensions are being created and automatically gzip or bzip compress the file.

### Changes

- Small speed up for all the isotropic cone and pseudo-elliptic cone frame order models. The vector length calculation for the numeric PCS integration has been simplified and shifted outside of a loop to take advantage of the speed of numpy.
- All three file arguments for the pymol.frame_order user function are now optional.
- Updated all the API documentation links in the dispersion chapter of the manual. These were pointing to http://www.nmr-relax.com/api/3.1/ whereas they should now be point to http://www.nmr-relax.com/api/3.2/.
- Modified a printout in the 'devel_scripts/code_validator' script. This is to clarify that the first method of a class does not need two preceding empty lines.
- Shifted some functions from lib.structure.geometric into their own modules. The angles_regular() and angles_uniform() functions are now in the lib.structure.angles module, and the get_proton_names in lib.structure.conversion.
- Deletion of the pipe_control.structure.main.create_cone_pdb() function. This is only used in the frame order analysis, but has been made redundant by the lib.structure.represent.cone.cone() function.
- Completed the frame_order.pdb_model user function backend for the frame order PDB representation. Most of this backend, including the axes and cone representations, had been broken for quite a while and were being skipped with an early return statement. This has now been made functional and a few fixes have been made. For the 'rotor' and 'free rotor' model, the neg_cone argument is now ignored so that only one model is produced in the final frame order PDB representation file. For all other models, the rotor representation is no longer centred to the point on axis closest to the centre of mass, as the pivot is unambiguously defined. The rotor representation has also been made larger in these models so that it is outside of the cone, and the propeller blades are now staggered.
- Modified py_type from "list" to "float_array" in uf_object type in user function dx.map. Bug #22035 The dx.map user function is broken in the GUI.
- Added py_type "list_val_or_list_of_list_val" to be handled in GUI uf_objects. Bug #22035 The dx.map user function is broken in the GUI.
- Modified the frame order constraints so that cone
_{θx}≤ cone_{θy}. The linear_constraints() function docstring has been updated to include this constraint. - Set dim=4 when setting chi surface level in user function dx.map.
- Fix for the n_state_model.cone_pdb user function for the recent internal structural object changes. The cone arguments should now be called cone_obj.
- Renamed the relax_disp.set_grid_r20_from_min_r2eff user function to relax_disp.r20_from_min_r2eff. This follows from the proposal at http://thread.gmane.org/gmane.science.nmr.relax.devel/5957.
- Modification to the Sequence_2D GUI element used for some user function windows. The selection_win_show() method has been redefined, as the parent method from the Sequence element is specific for the 1D sequence module. The open_dialog() method has also been modified to use the new selection_win_show(), as well as the parent Sequence class selection_win_data() method.
- Created the User_functions.test_structure_rotate GUI tests. This is to catch bug #22100, the rotation argument for the structure.rotate user function cannot be changed in the GUI, as an AttributeError is raised.
- Moved py_type "list_val_or_list_of_list_val" to 2D sequence types.
- Added dim dimensions to match the {x, y, z} positions for GUI input in user function dx.map.
- Modified the User_functions.test_structure_rotate GUI test to change and check the rotation matrix.
- Some more fixes for the User_functions.test_structure_rotate GUI test. The open_dialog() method cannot be used, as it deletes the window at the end. Instead the selection_win_show() and selection_win_data() method combination is used.
- Expanded the User_functions.test_structure_rotate GUI test. This is to more extensively check the 'float_matrix' user function argument type in the GUI.
- Modified the dim dimensions to (None, 3) to allow the user to change number of points in the GUI. This is for the user function dx.map.
- Simplified the User_functions GUI tests. The exec_uf_pipe_create() method has been created to simplify the data pipe creation in the tests.
- Expanded the User_functions.test_structure_rotate GUI test. The rotation matrix argument checks for the Sequence_2D GUI element have been expanded to check that setting nothing (blank element) returns nothing (None). The other checks have also been slightly modified.
- Expanded the User_functions.test_structure_rotate GUI test to catch more problems. Now the rotation matrix value in the user function window is set to a series of invalid values to test if the Sequence_2D GUI element will handle the rubbish input. This is to mimic user errors.
- Created the is_list() and is_list_of_lists() functions for the lib.check_types module.
- Clean up of the User_functions.test_structure_rotate GUI test. The invalid value check is simpler and the Sequence_2D GUI object return value is now checked to be None.
- Expanded the User_functions.test_structure_rotate GUI once more. This time the setting of invalid values in the Sequence_2D element itself is now checked. For example for the rotation matrix of the structure.rotate user function, if a matrix element is set to a string, a NameError is raised.
- Created the User_functions.test_dx_map GUI test. This extensively checks the 'point' argument for the dx.map user function GUI window. This is to catch bug #22102, the point argument of the dx.map user function being incorrect in the GUI.
- Modified the User_functions.test_dx_map GUI test to catch another problem with the Sequence_2D element.
- Fixes for the frame order PDB presentation in the frame_order.pdb_model user function backend.
- Expanded the User_functions.test_dx_map GUI test once again. The new test is to set 2 valid points in the wizard, open and close the Sequence_2D window (twice), and check that the points come back.
- Increased the width of the first column of the Sequence_2D GUI element for variable lists. This is so the column title "Number" will fit.
- Added list titles for the dx.map user function point argument. This is so that the Sequence_2D GUI element will have column titles of 'X coordinate', 'Y coordinate', and 'Z coordinate'.
- The self.variable_length flag is now used throughout the Sequence GUI element.
- The self.variable_length flag is used in one more spot in the Sequence_2D GUI element.
- Created the User_functions.test_structure_add_atom GUI test. This is used to check the operation of the Sequence GUI element via the 'pos' argument of the structure.add_atom user function. This is a list fixed to 3 elements.
- Titles are now handled and set in the Sequence GUI element. The titles will replace the numbering of 1 onwards in the first column of the GUI element.
- Small fix for switched indices in the new User_functions.test_structure_add_atom GUI test.
- Modified the 'pos' argument of the structure.add_atom user function. The argument is now a list of fixed length of 3, and it has the titles 'X coordinate', 'Y coordinate', and 'Z coordinate' which are shown in the GUI.
- Created the User_functions.test_spectrum_read_intensities GUI test to catch bug #22105. The problem is that a single file name is split up into many files when the file selection button is clicked, one for each character of the file name.
- Fix for the User_functions.test_spectrum_read_intensities GUI test. A valid value was being checked as invalid.
- Shifted all wildcards used in GUI file selection dialogs into the new user_functions.wildcard module. These have now all been standardised, and expanded to include more capitalisation combinations and to include more *.* options.
- Created a file selection wildcard for use in the GUI for selecting peak lists. This is used in the four user functions which read peak lists.
- Changed all *.* GUI file selection wildcards to *.
- Huge speedup for model CR72. Task #7793 Speedup of dispersion models. The system test Relax_disp.test_cpmg_synthetic_cr72_full_noise_cluster changes from 7 seconds to 4.5 seconds. This is won by not checking single values in the R
_{2eff}array for math domain errors, but calculating all steps, and in one single round check for finite values. If just one non-finite value is found, the whole array is returned with a large penalty of 1e^{100}. This makes all calculations be the fastest numpy array way. - Fix for system test test_cpmg_synthetic_dx_map_points. Task #7793 Speedup of dispersion models.
- Critical fixes for system test Relax_disp.test_hansen_cpmg_data_missing_auto_analysis. Task #7793 Speedup of dispersion models. It is suspected that when relax have touched boundary values which made math domain errors, the error catching have created local minima or interfered with the simplex search algorithm.
- Speedup of model TSMFK01. Task #7793 Speedup of dispersion models. This is won by not checking single values in the R
_{2eff}array for math domain errors, but calculating all steps, and in one single round check for finite values. If just one non-finite value is found, the whole array is returned with a large penalty of 1e^{100}. This makes all calculations be the fastest numpy array way. - Huge speedup of model B14. Task #7793 Speedup of dispersion models. Time test for system tests: test_baldwin_synthetic 2.626s -> 1.990s, test_baldwin_synthetic_full 18.326s -> 13.742s. This is won by not checking single values in the R
_{2eff}array for math domain errors, but calculating all steps, and in one single round check for finite values. If just one non-finite value is found, the whole array is returned with a large penalty of 1e^{100}. This makes all calculations be the fastest numpy array way. - Speedup of model TP02. Task #7793 Speedup of dispersion models. The change for running system test is: test_curve_type_r1rho_fixed_time 0.057s -> 0.049s, test_tp02_data_to_ns_r1rho_2site 10.539s -> 10.456s, test_tp02_data_to_tp02 8.608s -> 5.727s. This is won by not checking single values in the R
_{1ρ}array for math domain errors, but calculating all steps, and in one single round check for finite values. If just one non-finite value is found, the whole array is returned with a large penalty of 1e^{100}. This makes all calculations be the fastest numpy array way. - Huge speedup for model TAP03. Task #7793 Speedup of dispersion models. The change for running system test is: test_tp02_data_to_tap03 13.869s -> 7.263s. This is won by not checking single values in the R
_{1ρ}array for math domain errors, but calculating all steps, and in one single round check for finite values. If just one non-finite value is found, the whole array is returned with a large penalty of 1e^{100}. This makes all calculations be the fastest numpy array way. - Speedup of model MP05. Task #7793 Speedup of dispersion models. The change in system test is: test_tp02_data_to_mp05 10.750s -> 6.644s.
- Speedup of model MMQ CR72. Task #7793 Speedup of dispersion models. Change in system test: test_sprangers_data_to_mmq_CR72 9.892s -> 4.121s.
- Speedup for model M61. Task #7793 Speedup of dispersion models. Change in speed is: test_m61_data_to_m61 6.692s -> 3.480s.
- Speedup of model LM63. Task #7793 Speedup of dispersion models. Change in system test was: test_hansen_cpmg_data_auto_analysis 13.731s -> 9.971s, test_hansen_cpmg_data_auto_analysis_r2eff 13.370s -> 9.510s, test_hansen_cpmg_data_to_lm63 3.254s -> 2.080s.
- Speedup of model IT99. Task #7793 Speedup of dispersion models. Change in speed is: test_hansen_cpmg_data_auto_analysis 9.74s -> 8.330s, test_hansen_cpmg_data_to_it99 4.928s -> 3.138s.
- Speedup of model DPL94. Task #7793 Speedup of dispersion models. Change in speed is: test_dpl94_data_to_dpl94 19.412s -> 4.427s.
- Math-domain catching for model B14. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Math-domain catching for model CR72. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Math-domain catching for model: NS CPMG 2-site expanded. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Math-domain catching for model CR72. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. The skipping of test when num_points > 0, is a bad implementation. If such a case should show, it is best to catch the wrong input for the calculations. This is best done with a check before running the calculations.
- Math-domain catching for model TSMFK01. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Math-domain catching for model TP02. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Math-domain catching for model TAP03. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Math-domain catching for model DPL94. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Math-domain catching for model TAP03. Another check for division with 0 inserted.
- Math-domain catching for model MP05. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Math-domain catching for model IT99. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Removed class object "back_calc" being updated per time point for model LM63. Task #7793 Speedup of dispersion models. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Math-domain catching for model M61. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Math-domain catching for model MMQ CR72. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Align math-domain catching for model CR72 with trunk implementation. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of errors have to be more careful.
- Align math-domain catching for model DPL94 with trunk implementation. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of errors have to be more careful.
- Align math-domain catching for model IT99 with trunk implementation. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of errors have to be more careful.
- Align math-domain catching for model LM63 with trunk implementation. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of errors have to be more careful.
- Align math-domain catching for model M61 with trunk implementation. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of errors have to be more careful.
- Align math-domain catching for model MP05 with trunk implementation. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of errors have to be more careful.
- Align math-domain catching for model TAP03 with trunk implementation. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of errors have to be more careful.
- Align math-domain catching for model TP02 with trunk implementation. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of errors have to be more careful.
- Align math-domain catching for model TSMFK01 with trunk implementation. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of errors have to be more careful.
- Removing unnecessary math-domain catching for model IT99. Task #7793 Speedup of dispersion models. The denominator is always positive.
- Align math-domain catching for model NS CPMG 2-site expanded with trunk implementation. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of errors have to be more careful.
- Modified unit tests demonstrating edge case 'no R
_{ex}' failures of the model NS CPMG 2-site expanded. This is to align with the current return of data in the disp_speed branch. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0. - Added 7 unit tests demonstrating edge case 'no R
_{ex}' failures of the model DPL94. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0. - Unit test _lib/test_ns_cpmg_2site_expanded.py copied to _/test_lm63.py. They are both of CPMG type.
- Added 7 unit tests demonstrating edge case 'no R
_{ex}' failures of the model LM63. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0. - Unit test _lib/_dispersion/test_ns_cpmg_2site_expanded.py copied to _lib/_dispersion/b14.py. They are both of CPMG type, and can be re-used.
- Added 7 unit tests demonstrating edge case 'no R
_{ex}' failures of the model B14. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0. - Removed unnecessary math domain checking in model B14. They are slowing down the code. There is now protection for edge cases, and a last final check, before returning values. That should be sufficient.
- Unit test _lib/_dispersion/test_b14.py copied to _lib/_dispersion/test_CR72.py. They are both of CPMG type, and can be re-used.
- Copied unit test _lib/_dispersion/* to be reused for other models.
- Added 8 unit tests demonstrating edge case 'no R
_{ex}' failures of the model CR72. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{5}. - Added the 8th unit tests demonstrating edge case 'no R
_{ex}' failures of the model B14. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{5}. - Added the 8th unit tests demonstrating edge case 'no R
_{ex}' failures of the model LM63. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{20}. - Small fix for 8 unit tests demonstrating edge case 'no R
_{ex}' failures of the model 'ns cpmg_2site_expanded'. The comparison of R_{2eff}is now divided into a special case for k_{ex}having large values. - Deleted unit test case for lm63 3site.
- Added 8 unit tests demonstrating edge case 'no R
_{ex}' failures of the model M61. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{20}. - Added the 8th unit tests demonstrating edge case 'no R
_{ex}' failures of the model DPL94. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: - Added 8 unit tests demonstrating edge case 'no R
_{ex}' failures of the model M61b. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{20}. - Math-domain catching for model M61b. Task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These can be found via the --numpy-raise function to the system tests. To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
- Modified script to be able to run system test Relax_disp.xxx_test_m61b_data_to_m61b.
- Added 8 unit tests demonstrating edge case 'no R
_{ex}' failures of the model IT99. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{19}. - Added 9 unit tests demonstrating edge case 'no R
_{ex}' failures of the model MMQ CR72. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{5}; ΔωH = 0.0. - Added 8 unit tests demonstrating edge case 'no R
_{ex}' failures of the model MP05. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{20}. - Added 8 unit tests demonstrating edge case 'no R
_{ex}' failures of the model TAP03. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{20}. - Added 8 unit tests demonstrating edge case 'no R
_{ex}' failures of the model TP02. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{20}. - Added 7 unit tests demonstrating edge case 'no R
_{ex}' failures of the model TSMFK01. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0. - Copied unit test test_b14.py to test_ns_cpmg_2site_3d.py.
- Added 8 unit tests demonstrating edge case 'no R
_{ex}' failures of the model NS CPMG 2-site 3D. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{7}. - Modified unit tests demonstrating edge cases 'no R
_{ex}' failures of the model TP02. The catching of errors for off-resonance R_{1ρ}models was implemented wrong. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938. This is to implement catching of math domain errors, before they occur. These tests cover all parameter value combinations which result in no exchange: Δω = 0.0; p_{A}= 1.0; k_{ex}= 0.0; Δω = 0.0 and p_{A}= 1.0; Δω = 0.0 and k_{ex}= 0.0; p_{A}= 1.0 and k_{ex}= 0.0; Δω = 0.0, p_{A}= 1.0, and k_{ex}= 0.0; k_{ex}= 1e^{5}. - Critical fix for the math domain catching of model TP02. The catching of errors for off-resonance R
_{1ρ}models was implemented wrong. This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938. - Modified unit tests demonstrating edge cases 'no R
_{ex}' failures of the model DPL94. This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938. - Modified unit tests demonstrating edge cases 'no R
_{ex}' failures of the model MP05. The catching of errors for off-resonance R_{1ρ}models was implemented wrong. This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. - Critical fix for the math domain catching of model MP05. The catching of errors for off-resonance R
_{1ρ}models was implemented wrong. This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938. - Modified unit tests demonstrating edge cases 'no R
_{ex}' failures of the model TAP03. The catching of errors for off-resonance R_{1ρ}models was implemented wrong. This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938. And post http://article.gmane.org/gmane.science.nmr.relax.devel/5944. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. - Critical fix for the math domain catching of model TAP03. The catching of errors for off-resonance R
_{1ρ}models was implemented wrong. This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938. And post http://article.gmane.org/gmane.science.nmr.relax.devel/5944. - Modified unit tests demonstrating edge cases 'no R
_{ex}' failures of the model MMQ CR72. This was pointed out in post http://article.gmane.org/gmane.science.nmr.relax.devel/5940. And in post http://article.gmane.org/gmane.science.nmr.relax.devel/5946. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. - Small fix for the math domain catching of model MMQ CR72. This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5940. And in post http://article.gmane.org/gmane.science.nmr.relax.devel/5946.
- Various spacing fixes in unit test files _lib/_dispersion. This is the preparation for merging back disp_speed branch into trunk. This follows post http://article.gmane.org/gmane.science.nmr.relax.devel/5948. Usin the code validator script './devel_scripts/code_validator'.
- Modified that unit tests having different r20a and r20b values is checking if the correct one is returned. This is the preparation for merging back disp_speed branch into trunk. This follows post http://article.gmane.org/gmane.science.nmr.relax.devel/5948.
- Modified unit test to have standard population of p
_{A}= 0.95, and a correctly calculation of Δω in ppm to rad/s. This is related to task #7793 Speedup of dispersion models. - Small fix in parameter calculation in unit test _dispersion/test_ns_cpmg_2site_expanded.
- Increased max k
_{ex}to value 1e^{18}for unit test of lin/ns_cpmg_2site_expanded.py. - Increased max k
_{ex}to value 1e^{20}for unit test of lib/ns_cpmg_2site_3d.py. - Fix for looking for negative values, when all values where converted to positive in matrix in ns_cpmg_2site_3d.py. This is to implement catching of math domain errors, before they occur. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models.
- Removed nested looping of returning back_calc in lib/ns_cpmg_2site_3d.
- Removed the 8th unit test for model NS CPMG 2-site 3D. This was the catching of errors when k
_{ex}= 1e^{20}. The model cannot handle this situations, and we need to let it fail. - Removed the 8th unit test for model NS CPMG 2-site expanded. This was the catching of errors when k
_{ex}has high values. The model cannot handle this situations, and we need to let it fail. - Fix for differences in system tests which are different from trunk. These were found with the command: diff -bur disp_speed/test_suite/ relax_trunk/test_suite/ | grep -v "Binary files" > diff.txt.
- Converting back to having back_calc as a function argument to model B14. This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model CR72: This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model DPL94: This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model IT99: This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model LM63: This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model M61: This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model M61b: This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model MMQ CR72: This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model MP05: This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model NS CPMG 2-site expanded. This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model TAP03. This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model TP02. This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Converting back to having back_calc as a function argument to model TSMFK01. This is to clean up the API. There can be bo no partial measures/implementations in the relax trunk. The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix. That spin evolution can't be put into a larger numpy array. This is related to task #7793 Speedup of dispersion models.
- Created the lib.compat.norm() compatibility function for numpy.linalg.norm(). For numpy 1.8 and higher, the numpy.linalg.norm() function has introduced the 'axis' argument. This is an incredibly fast way of determining the norm of an array of vectors. This is used by the frame order analysis. However for older numpy versions, this causes the frame order analysis, and many corresponding system and GUI tests to fail. Therefore this new lib.compat.norm() function has been designed to default to numpy.linalg.norm() if the axis argument is supported, or to switch to the much slower numpy.apply_along_axis(numpy.linalg.norm, axis, x) call which is supported by older numpy.
- The frame order analysis now uses the lib.compat.norm() replacement for numpy.linalg.norm(). This is to allow for the axis argument on numpy versions before version 1.8, though these older versions will result in slower optimisation of the frame order models.
- The built in Python range() function is no longer being replaced by xrange(). Replacing builtin.range() with builtin.xrange() on Python 2 was causing problems with Python site-packages which were not Python 3 compliant. This includes old numpy versions. The original overwriting of range() with xrange() was for both speed and memory conservation. However profiling the system tests, the time for all tests did not change significantly. This change may cause problems in certain places in relax on memory constrained computer systems, so it may need to be reverted in the future.
- The lib.io.open_write_file() function now automatically determines the compression type. This is used by many user functions which create files. The end result for a user is that if they supply a '.gz' or '.bz2' file extension, a gzipped or bzipped file will be produced.
- Removal of the docstring text wrapping in the lib.io module.
- Expanded and improved the docstring for the relax_disp.r20_from_min_r2eff user function. This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/5957. The documentation now covers a number of the uses for this user function. The text has also been lightly edited. To fit all the text into the GUI user function window, the size of the dialog and the text high settings have been changed.
- Large improvements for the detection of cross-compilation on Mac OS X systems. The tests for different architecture support now follows the ideas discussed in the post http://thread.gmane.org/gmane.science.nmr.relax.devel/5785/focus=5820. In summary, for each architecture a simple C file is created, compiled with 'gcc -arch xyz', and the resultant binary file tested. To support 64-bit compilation on 32-bit systems, all previously successful architectures are also included in the gcc command. The change allows the 'ppc64' architecture to be reintroduced.
- Fixed the docstring for the det_arch() method of the sconstruct script. This is for the true cross-compilation detection on Mac OS X.

### Bugfixes

- Fix for the lib.geometry.lines.closest_point_ax() function for when the two points are the same. If the point on the line and point in the 3D space are the same, then this function used to return an array of NaN values. This situation is now caught and the point in the 3D space is returned.
- Fix for the heterogen section of the internal structural object write_pdb() method. A number of checks were performed to see if the PDB heterogen records were the same for all structures, but this is meaningless as the structures can of course be different.
- Fixes for the lib.structure.represent.cone module. The function arguments named 'cone' have been renamed to 'cone_obj' so that they do not clash with the cone() function in the module namespace.
- Fix for the lib.structure.geometric.generate_vector_residues() function. The atom numbers are no longer read from the internal structural object, as these are not reliable. If another geometric representation exists in the object, then the atom numbers could be None. Or loading structures from multiple PDB files can cause the numbering to be repeated or out of order.
- Fix for the frame_order.pdb_model user function for the rotor models. The rotor axis is no longer defined by spherical angles and therefore needs to be recreated using the create_rotor_axis_alpha() rather than create_rotor_axis_spherical() function from lib.frame_order.rotor_axis.
- Partial fix for bug #22100, the rotation argument for the structure.rotate user function cannot be changed in the GUI, as an AttributeError is raised. The append_row() method call has been replaced by the correct add_element() call.
- Bug fix for the Sequence_2D GUI element. This is used for the user function windows in the GUI for setting lists of lists or matrices. The GUI element GetValue() method will now return None if nothing is set. This prevents a list of lists of None being added to the main user function window.
- Fixes for the Sequence and Sequence_2D GUI elements for handling invalid input data. These elements used by the user function windows previously raised all sorts of errors if the data was not what they expected (lists or lists of lists respectively). These situations are now caught and the input data is ignored, so blank Sequence and Sequence_2D elements are presented to the user.
- Bug fix for the Sequence_2D GUI element. This is used for handling list of lists user function arguments in the user function GUI windows. The setting of invalid values directly in the Sequence_2D GUI element is now detected. These values are now replaced with None.
- Fix for bug #22102, the point argument of the dx.map user function failing in the GUI. The Sequence_2D GUI element used for all list of lists arguments in the user function GUI windows now correctly handles variable length lists. The first column which shows a count of the elements is now properly taken into account in the SetValue(), GetValue() and add_item() methods, via a new self.offset variable. The self.variable_length variable has also been fixed so it is not overwritten by the parent Sequence GUI element.
- Bug fixes for the Sequence GUI element used for lists in the user function windows. Invalid values input into the Sequence GUI window are now ignored rather than raising different types of error. And invalid input lists for fixed dimension arguments are also ignored. This allows the User_functions.test_structure_add_atom GUI test to pass.
- Bug fix for the lib.arg_check.is_float_object() function. The dim argument can sometimes be an integer rather than a tuple, but this was not handled by the function. Now integer dim arguments are pre-converted to lists before performing all the checks.
- Fix for bug #22105, the failure spectrum.read_intensities GUI user function whereby a file name is turned into lists of characters. A few changes were made to allow the Selector_file_multiple GUI element to operate correctly.
- Critical fix for the math domain catching of model LM63. This was discovered with the added 7 unit tests demonstrating edge case 'no R
_{ex}' failures. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. - Critical fix for the math domain catching of model B14. This was discovered with the added 7 unit tests demonstrating edge case 'no R
_{ex}' failures. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. - Critical fix for the math domain catching of model CR72. This was discovered with the added 8 unit tests demonstrating edge case 'no R
_{ex}' failures. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. When k_{ex}is large, e.g. k_{ex}= 1e^{5}, the values of etapos = eta_scale * sqrt(Psi + sqrt_psi2_zeta2) / cpmg_frqs will exceed possible numerical representation. The catching of these occurrences needed to be re-written. - Critical fix for the math domain catching of model B14. This was discovered with the added 8 unit tests demonstrating edge case 'no R
_{ex}' failures. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. When k_{ex}is large, e.g. k_{ex}= 1e^{5}, "nan" values where produced, which were replaced with 1e^{100}. The catching of these occurrences needed to be re-written. - Critical fix for the math domain catching of model CR72. Removed the test for k
_{ex}≥ 1e^{5}. This catching should rather be performed on the math functions instead. - Critical fix for the math domain catching of model B14. Removed the test for k
_{ex}≥ 1e^{5}. This catching should rather be performed on the math functions instead. In this case, it is the catching of sinh(), not evaluating values above 710. - Critical fix for the math domain catching of model MMQ CR72. This was discovered with the added 9 unit tests demonstrating edge case 'no R
_{ex}' failures. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. - Critical fix for the math domain catching of model IT99. This was discovered with the added 8 unit tests demonstrating edge case 'no R
_{ex}' failures. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of these occurrences needed to be re-written. - Critical fix for the math domain catching of model TAP03. This was discovered with the added 8 unit tests demonstrating edge case 'no R
_{ex}' failures. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. - Critical fix for the math domain catching of model TP02. This was discovered with the added 8 unit tests demonstrating edge case 'no R
_{ex}' failures. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. - Critical fix for the math domain catching of model TSMFK01. This was discovered with the added 8 unit tests demonstrating edge case 'no R
_{ex}' failures. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. The catching of these occurrences needed to be re-written. - Critical fix for the math domain catching of model NS CPMG 2-site 3D. This was discovered with the added 8 unit tests demonstrating edge case 'no R
_{ex}' failures. This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858. This is related to task #7793 Speedup of dispersion models. This is to implement catching of math domain errors, before they occur. - Fix for bug #22112, the GUI failure when setting list values via the sequence windows, launched from user function windows fails on Mac OS X. The problem was two fold. First the Sequence and Sequence_2D windows from wx.Dialog should not be terminated via the Destroy() method, as wx.Dialog.Destroy() appears to be horribly broken on Macs.
- Another fix for bug #22112, the GUI failure when setting list values via the sequence windows, launched from user function windows fails on Mac OS X. This change is for the multiple file selection window and matches the previous change by replacing the Mac OS X fatal wx.Dialog.Destroy() call with wx.Dialog.Close().
- Fix for the relax start up detection of missing Python packages. The dep_check module is now imported first, as it used to be. This is required to check if all required modules are installed and to present understandable messages to the user rather than cryptic ImportError messages with tracebacks.
- Fix for bug #22033, the inability to use other optimisation algorithms in the dispersion analysis. As mentioned in comment #2, the solution is to raise a RelaxError explaining that only 'simplex' optimisation is possible for the dispersion analysis as the gradients are not derived and implemented in relax.

## Links

For reference, the announcement for this release can also be found at following links:

- Official release notes on the relax wiki.
- Gna! news item.
- Gmane mailing list archive.
- Local archives.
- Mailing list ARChives (MARC).

Softpedia also has information about the newest relax releases:

- Softpedia page for relax on GNU/Linux.
- Softpedia page for relax on MS Windows.
- Softpedia page for relax on Mac OS X.

## Announcements

If you would like to receive announcements about new relax versions, please subscribe to the relax announcement mailing list. This list only receives ~10 emails per year. It is archived at the SourceForge archives and in The Mail Archive.

## See also

- The combined release notes for all relax versions (warning, this is very large).
- The combined release descriptions for all relax versions.
- The combined release metadata for all relax versions.
- The combined release features for all relax versions.
- The combined release changes for all relax versions (warning, this is very large).
- The combined release bugfixes for all relax versions.
- The combined release announcement links for all relax versions.