mailrelax version 3.3.2


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by Edward d'Auvergne on November 14, 2014 - 16:34:
This is a minor feature and bugfix release.  It includes improvements
to the readability of the HTML version of the manual
(http://www.nmr-relax.com/manual/index.html), improved printouts
throughout the program, numerous GUI enhancements, and far greater
Python 3 support.  Please see below for a full listing of all the new
features and bugfixes.

For the official, easy to navigate release notes, please see
http://wiki.nmr-relax.com/Relax_3.3.2.

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

The full list of changes is:

    Features:
        * Many improvements for the HTML version of the manual at
http://www.nmr-relax.com/manual/index.html.
        * Improved sectioning printouts in the model-free
dauvergne_protocol auto-analysis.
        * Significant improvements for the relax controller window.
        * All wizards and user functions in the relax GUI now have
focus so that keyboard is active without requiring a mouse click.
        * The ESC key will now close the relax controller window and
all user function windows.
        * The structure.load_spins user function can now load spins
from multiple non-identical molecules and merge them into one molecule
allowing missing atoms and differential atom numbering to be handled.
        * Improvements to the printouts for many user functions.


    Changes:
        * Updated the minfx version in the release checklist document
to version 1.0.11.
        * Updated the relax version in the release checklist document
to be more modern.
        * Spelling fixes for the CHANGES file.
        * Updates for the release checklist document.  This is mainly
because the main release notes are now the relax wiki, for example for
the current version at http://wiki.nmr-relax.com/Relax_3.3.1.
        * Spelling fixed throughout the CHANGES document.
        * Removed a few triple spaces in the CHANGES document.
        * Added periods to the end of all items in the CHANGES document.
        * Fix for an 'N/A' in the CHANGES document.
        * Converted a number of single spaces between sentences to
double spaces in the CHANGES document.
        * More updates for the announcement section of the release
checklist document.
        * The HTML version of the manual is now compiled with Unicode
character support.  This is for the manual at
http://www.nmr-relax.com/manual/index.html.  It allows Greek symbols,
for example, to be represented as text rather than LaTeX generated PNG
images.  This fixes titles and massively decreases the number of
images required by the HTML pages.
        * Removal of many dual LaTeX and latex2html section titles in
the manual.  As the HTML manual
(http://www.nmr-relax.com/manual/index.html) is now compiled with
Unicode support, the Greek characters in the titles are now supported.
Therefore in the model-free and the values, gradients, and Hessians
chapters, the dual LaTeX and latex2html section titles could be
collapsed to the standard LaTeX section title.  This will result in
better formatting of the manual and its links.
        * Added instructions and a build script for creating a useful
version of latex2html.  This version is essential for building the
HTML version of the manual at http://www.nmr-relax.com/manual/.  The
build script downloads the Debian latex2html-2008 sources as well as
all Debian patches for latex2html.  It then applies a number of
patches for fixing and improving the relax documentation.  The program
is then compiled and can be installed as the root user into
/usr/local/.
        * Extended the number of words used in the HTML webpage file
names.  This is to hopefully prevent files from being overwritten by
multiple files having the same name.
        * Added the write out of parameters and chi2 values, when
creating a dx_map.  Task #7860 (https://gna.org/task/index.php?7860):
When dx_map is issued, create a parameter file which maps parameters
to chi2 value.
        * Created system test
Relax_disp.test_dx_map_clustered_create_par_file, which must show that
relax is not able to find the local minimum under clustered
conditions.  When creating the map, the map contain chi2 values, which
are lower than the clustered fitted values.  This should not be the
case.  Running a larger map with larger bounds and more increments,
which should show that there exist a minimum in the minimisation space
with a lower chi2 value.  Bug #22754
(https://gna.org/bugs/index.php?22754): The minimise.calculate() does
not calculate chi2 value for clustered residues.  Task #7860
(https://gna.org/task/index.php?7860): When dx_map is issued, create a
parameter file which maps parameters to chi2 value.
        * Renamed test scripts and files for producing surface chi2 plots.
        * Renamed sample scripts making surface maps.
        * Added scripts to make surface plots of spin independents
parameters dw and R2a.
        * Added example surface chi2 values for plots.  Task #7826
(https://gna.org/task/index.php?7826): Write an python class for the
repeated analysis of dispersion data.
        * Added example save state for more surface plotting.
        * Added boolean argument to dx.map() function, to specify the
creation of a parameter and associated chi2 values file.  For very
very special situations, the creation of this file is not desired.
        * Modified that structure of points in dx.map() is always a
list of numpy arrays with 3 values.
        * When issuing dx.map() function with points, implemented the
writing out of parameter file, with associated calculated chi2 values.
        * Improved the feedback in the
User_functions.test_structure_add_atom system test.  It is now clearer
what the input and output data is.
        * The devel_scripts/python_multiversion_test_suite.py script
now runs relax with the --time flag.  This is for quicker
identification of failure points.  It will also force the sys.stdout
buffer to be flushed more often on Python 2.5 so that it does not
appear as if the tests have frozen.
        * Added check to system test
Relax_disp.test_cpmg_synthetic_dx_map_points() for the creation of a
matplotlib surface command plot file.
        * Added the write out of a matplotlib command file, to plot
surfaces of a dx map.  It uses the minimum chi2 value in the map
space, to define surface definitions.  It creates a X,Y; X,Z; Y,Z map,
where the values in the missing dimension has been cut at the minimum
chi2 value.  For each map, it creates a projected 3d map of the
parameters and the chi2 value, and a heat map for the contours.  It
also scatters the minimum chi2 value, the 4 smallest chi2 values, and
maps any points in the point file, to a scatter point.  Mapping the
points from file to map points, is done by finding the shortest
Euclidean distance in the space from the points to any map points.
        * Fix for testing the raise of expected errors in system
tests.  The system test will not be tested, if Python version is under
version 2.7.  Bug #22801 (https://gna.org/bugs/?22801): Failure of the
relax test suite on Python 2.5.
        * Inserted a z_axis limit for the plotting of 2D surfaces in 
matplotlib.
        * Added better figure control of chi2 values on z-axis for
surface plots.
        * Narrowed in dx_map in system test
Relax_disp.test_dx_map_clustered_create_par_file().  This is to
illustrate the failure of relax finding the global minimum.  It seems
there is a shallow barrier, which relax failed to climb over, in order
to find the minimum value.
        * Added the verbosity argument to the
pipe_control.minimise.reset_min_stats() function.  All of the
minimisation code which calls this now send in their verbosity
arguments.  This allows the text "Resetting the minimisation
statistics." to be suppressed.
        * Added the verbosity argument to the pipe_control.value.set()
function.  This is passed into the
pipe_control.minimise.reset_min_stats() function so its printouts can
be silenced.
        * The pipe_control.opendx space mapping code now calls the
value.set() function with verbosity=0.  This is to silence the very
repetitive statistics resetting messages when executing the dx.map
user function.
        * Added more checks to the determine_rnd() of the
dauvergne_protocol model-free auto-analysis.  This is to try to catch
bizarre situations such as bug #22730 (https://gna.org/bugs/?22730),
model-free auto-analysis - relax stops and quits at the polate step.
The following additional fatal conditions are now checked for:  A file
with the same name as the base model directory already exists;  The
base model directory is not readable;  The base model directory is not
writable.  The last two could be caused by file system corruptions.
In addition, the presence of the base model directory is checked for
using os.path.isdir() rather than catching errors coming out of the
os.listdir() function.  These changes should make the analysis more
robust in the presence of 'strangeness'.
        * Added an additional check to determine_rnd() of the
dauvergne_protocol model-free auto-analysis.  This is to try to catch
bizarre situations such as bug #22730 (https://gna.org/bugs/?22730),
model-free auto-analysis - relax stops and quits at the polate step.
The additional check is that if the base model directory is not
executable, a RelaxError is raised.
        * Added printouts to the determine_rnd() function of the
dauvergne_protocol model-free auto-analysis.  This is for better user
feedback in the log files as to what is happening.  It may help in
debugging bug #22730 (https://gna.org/bugs/?22730): Model-free
auto-analysis - relax stops and quits at the polate step.
        * Alphabetical ordering of imports in the dauvergne_protocol
model-free auto-analysis.
        * Changed the model-free single spin optimisation title
printouts.  The specific_analyses.model_free.optimisation.spin_print()
function has been deleted.  It has instead been replaced by a call to
lib.text.sectioning.subtitle().  This is to match the grid search
setup title printouts and to differentiate these titles from those
printed out by minfx being underlined by '~' characters.
        * Added extensive sectioning printouts to the
dauvergne_protocol model-free auto-analysis.  The lib.text.section
functions title() and subtitle() are now used to mark out all parts of
the auto-analysis.  This will allow for a much better understanding of
the log files produced by this auto-analysis.
        * Complete redesign of the following of text in the relax
controller window in the GUI.  The current design for some reason no
longer worked very often, and there would be many situations where the
scrolling to follow the text output would stop and could never be
recovered.  Therefore this feature has been redesigned.  In the
LogCtrl element of the relax controller, which displays the relax
output messages, the at_end class boolean variable has been
introduced.  It defaults to True.  The following events will turn it
off:  Arrow keys, Home key, End key, Ctrl-Home key, Mouse button
clicks, Mouse wheel scrolling, Window thumbtrack scrolling (the side
scrollbar), finding text, the pop up menu 'Go to start', and Select
all (menu or Ctrl-A).  It will only be turned on in two cases:  The
pop up menu 'Go to end', and if the caret is on the final line (caused
by Ctrl-End, Mouse wheel scrolling, Page Down, Down arrow, Window
thumbtrack scrolling, etc.).  Three new methods have been introduced
to handle certain events:  capture_mouse() for mouse button clicks,
capture_mouse_wheel() for mouse wheel scrolling, and capture_scroll
for window thumbtrack scrolling.
        * Improvements for selecting all text in the relax controller
window.  Selecting text using the pop up menu or [Ctrl-A] now shifted
the caret to line 1 before selecting all text.  This deactivates the
following of the end of text, if active, as the text following feature
causes the text selection to be lost.
        * Modified the behaviour of the relax controller window so
that pressing escape closes the window.  This involves setting the
initial focus on the LogCtrl, and catching the ESC key press in the
LogCtrl as well as all relax controller read only wx.Field elements
and calling the parent controller handle_close() method.
        * Replaced the hardcoded integer keycodes in the relax
controller with the wx variables.  This is for the
LogCtrl.capture_keys() handler method for dealing with key presses.
        * Improvement for all wizards and user functions in the relax
GUI.  The focus is now set on the currently displayed page of the
wizard.  This allows the keyboard to be active without requiring a
mouse click.  Now text can be instantly input into the first text
control and the tab key can jump between elements.  As the GUI user
functions are wizards with a single page, this is a significant
usability improvement for the GUI.
        * The ESC character now closes all wizards and user functions
in the relax GUI.  By using an accelerator table set to the entire
wizard window to catch the ESC keyboard event, the ESC key will cause
the _handler_escape() method to be called which then calls the windows
Close() method to close the window.
        * Changed the logic for how the new analysis wizard in the GUI
is destroyed.  This relates to bug #22818
(https://gna.org/bugs/?22818), the GUI test suite failures in MS
Windows - PyAssertionError: C++ assertion "Assert failure".  The
Destroy() method has been added to the Analysis_wizard class to
properly close all elements of the wizard.  This is now called from
the menu_new() method of the Analysis_controller class, which is the
target of the menu item and toolbar button.  To allow the test suite
to use this, the menu_new() method now accepts the destroy boolean
argument.  The test suite can set this to False and then access the
GUI elements after calling the method (however the Destroy() method
must be called by the test suite).
        * Resign of how the new analysis wizard is handled in the GUI
tests.  This relates to bug #22818 (https://gna.org/bugs/?22818), the
GUI test suite failures in MS Windows - PyAssertionError: C++
assertion "Assert failure".  The GUI test base class method
new_analysis_wizard() has been created to simplify the process.  When
a new analysis is desired, this method should be called.  It will
return the analysis page GUI element for use in the test.  The method
standardises the execution of the new analysis wizard and sets up the
analysis in the GUI.  It also properly destroys the wizard to avoid
the memory leaking issues such as bug #22818.  All GUI tests have been
converted to use new_analysis_wizard().  This allows the GUI tests to
pass on MS Windows.  However there are still significant sources of
memory leaks (the USER Objects count) visible in the Windows Task
Manager.
        * Fix for the gui.fonts module to allow it to be used outside
of the GUI.
        * Updated all of the scripts in devel_scripts/gui/.  These
have been non-functional since the merger of the relax bieri_gui
branch back in January 2011.
        * The gui.misc.bitmap_setup() function can now be used outside
of the GUI.
        * Fix for the GUI test base class new_analysis_wizard() method
for relaxation dispersion analyses.
        * Modified the pipe_control.pipes.get_bundle() function to
operate when no pipe is supplied.  In this case, the pipe bundle that
the current data pipe belongs to will be returned.
        * Created the Periodic_table.has_element() method for the
lib.periodic_table module.  This is used to simply check if a given
symbol exists as an atom in the periodic table.
        * Added 4 unit tests to the _lib.test_periodic_table module
for the Periodic_table.has_element() method.
        * Modified the internal structural object backend for the
structure.read_pdb user function.  The MolContainer._det_pdb_element()
method for handling PDB files with missing element information has
been updated to use the Periodic_table.has_element() method to check
if the PDB atom name corresponds to any atoms in the periodic table.
This allows for far greater support for HETATOMS and all of the
metals.
        * Created the Structure.test_load_spins_multi_mol system test.
This is to test yet to be implemented functionality of the
structure.load_spins user function.  This is the loading of spin
information similar, but not necessarily identical molecules all
loaded into the same structural model.  For this, the from_mols
argument will be added.
        * Fixes for the Structure.test_load_spins_multi_mol system
test.  The call to the structure.load_spins user function has also
been modified so that all 3 spins are loaded at the same time.
        * Implemented the multiple molecule merging functionality of
the structure.load_spins user function.  The argument has been added
to the user function frontend and a description added for this new
functionality.  In the backend, the
pipe_control.structure.main.load_spins() function will now call the
load_spins_multi_mol() function if from_mols is supplied.  This
alternative function is required to handle missing atoms and
differential atom numbering.
        * Modified the N_state_model.test_populations system test to
test the grid search code paths.  This performs a grid search of one
increment after minimisation, then switches to the 'fixed' N-state
model and performs a second grid search of one increment.  This now
tests currently untested code paths in the grid_search() API method
behind the minimise.grid_search user function.  The test demonstrates
a bug in the N-state model which was not uncovered in the test suite.
        * Created the N_state_model.test_CaM_IQ_tensor_fit system
test.  This is for catching bug #22849 (https://gna.org/bugs/?22849),
the failure of the N-state model analysis when optimising only
alignment tensors using RDCs and/or PCSs.  This new test checks code
paths unchecked in the rest of the test suite, and is therefore of
high value.
        * Modified the atomic position handling in
pipe_control.structure.main.load_spins_multi_mol().  The multiple
molecule merging functionality of the structure.load_spins user
function now handles missing atomic positions differently.  The aim is
that the length of the spin container position variable is fixed for
all spins to the number of structures, as the N-state model analysis
assumes this equal length for all spins.  When data is missing, the
atomic position for that structure is now set to None.  This will
require other modifications in relax to support this new design.
        * Modified the interatom.unit_vectors user function backend to
handle missing atomic positions.  This is to match the
structure.load_spins user function change whereby missing atomic
positions are now set to the value of None.
        * Fix for the atomic position handling in
pipe_control.structure.main.load_spins_multi_mol().  The
dimensionality of the position structure returned by the structural
object atom_loop() method needed to be reduced.
        * The structure.load_spins user function now stores the number
of states in cdp.N.  This is to help the specific analyses which
handle ensembles of structures.  With the introduction of the
from_mols argument to the structure.load_spins user function, the
number of states is now not equal to the number of structural models,
as the states can now come from different structures of the same
model.  Therefore the user function will now explicitly set cdp.N to
the number of states depending on how the spins were loaded.
        * Clean up and speed up of the
N_state_model.test_CaM_IQ_tensor_fit system test.  All output files
are now set to 'devnull' so that the system test no longer creates any
files within the relax source directories.  And the optimisation
settings have been decreased to hugely speed up the system test.
        * Expanded the lib.arg_check.is_float_matrix() function by
adding the none_elements argument.  This matches a number of the other
module functions, and allows for entire rows of the matrix to be None.
        * Lists of lists containing rows of None are now better
supported by the lib.xml functions.  The object_to_xml() function will
now convert the float parts to IEEE-754 byte arrays, and the None
parts will be stored as None in the <ieee_754_byte_array> list node.
The matching xml_to_object() method has also been modified to read in
this new node format.  This affects the results.write and state.save
user functions (as well as the results.read and state.load user
functions).
        * Added spacing after the minimise.grid_search user function
setup printouts.  This is for better spacing for the next messages
from the specific analysis.
        * Speed up of the N_state_model.test_CaM_IQ_tensor_fit system
test.  This test is however still far too slow.
        * Added printouts to pipe_control.pcs.return_pcs_data() and
pipe_control.rdc.return_rdc_data().  These functions now accept the
verbosity argument which if greater than 0 will activate printouts of
how many RDCs or PCSs have been assembled for each alignment.  This
will be useful for user feedback as the spin verses interatomic data
container selections can be difficult to understand.
        * The verbosity argument for the N-state model optimisation is
now propagated for more printouts.  The argument for the calculate()
and minimise() API methods is now sent into
specific_analyses.n_state_model.optimisation.target_fn_setup(), and
from there into the pipe_control.pcs.return_pcs_data() and
pipe_control.rdc.return_rdc_data() functions.  That way the number of
RDCs and PCSs used in the N-state model is reported back to the user
for better feedback.
        * Updated the N_state_model.test_CaM_IQ_tensor_fit system test
so it operates correctly as a GUI test.  All user functions are now
executed through the special self._execute_uf() method to allow either
the prompt interpreter or the GUI to execute the user function.
        * Modified the N_state_model.test_CaM_IQ_tensor_fit system/GUI
test for implementing a new feature.  The 'spin_selection' argument
has been added to the interatom.define user function.  This will be
used to carry the spin selections over into the interatomic data
containers.
        * Implemented the spin_selection Boolean argument for the
interatom.define user function.  This has been added to the frontend
with a description, and to the backend.  When set, it allows the spin
selections to define the interatomic data container selection.
        * Changed the spin_selection argument default in the
interatom.define user function backend.  This now defaults to False to
allow other parts of relax which call this function to operate as
previously.  The default for the interatom.define user function is
however still True.
        * Modified the Structure.test_load_spins_multi_mol system test
for the spin.pos variable changes.  The atomic position for an
ensemble of structures is now set to None rather than being missing,
so the system test has been updated to check for this.
        * The align_tensor.display user function now has more
consistent section formatting.  The section() and subsection()
functions of the lib.text.sectioning module are now being used to
standardise these custom printouts with the rest of relax.
        * Modifications to the new
N_state_model.test_CaM_IQ_tensor_fit system test.  The system test now
checks all of the optimised values to make sure the correct values
have been found.  That will block any future regressions in this
N-state model code path.  The system test is now also faster.  And the
pcs.structural_noise user function RMSD value has been set to 0.0 so
that the test no longer has a random component affecting the final
optimised values.
        * Added printouts for the rdc.calc_q_factors and
pcs_calc_q_factors user functions.  These are activated by the new
verbosity user function argument which defaults to 1.  If the value is
greater than 0, then the backend will print out all the calculated Q
factors.
        * The verbosity argument of the RDC and PCS q_factors()
functions now defaults to 1.  This causes the Q factors to be printed
out at the end of all N-state model optimisations.
        * Created the Structure.test_bug_22860_CoM_after_deletion
system test.  This is to catch bug #22860
(https://gna.org/bugs/?22860), the failure of the structure.com user
function after calling structure.delete.
        * Fix for the checks in the new
Structure.test_load_spins_multi_mol system test.  A spin index was
incorrect.
        * Fix for the structure.load_spins user function when the
from_mols argument is used.  The load_spins_multi_mol() function of
the pipe_control.structure.main module was incorrectly handling the
atomic position returned by the internal structural object atom_loop()
method.  This position is a list of lists when multiple models are
present.  But when only a single model is present, it returns a simple
list.
        * Modified the Structure.test_bug_22860_CoM_after_deletion
system test to expect a RelaxNoPdbError.  This tests that the
structure.com user function raises RelaxNoPdbError after deleting all
of the structural information from the current data pipe.
        * The mol_name argument is now exposed in the
structure.add_atom user function.  This has been added as the first
argument of the user function to allow new molecules to be created or
to allow the atom to be placed into a specific molecule container.
The functionality was already implemented in the backend, so it has
been exposed by simply adding a new argument definition to the user
function.
        * Created the
Structure.test_bug_22861_PDB_writing_chainID_fail system test.  This
is to catch bug #22861 (https://gna.org/bugs/?22861), the chain IDs in
the structure.write_pdb user function PDB files are incorrect after
calling structure.delete.
        * Small modification of the
Structure.test_bug_22861_PDB_writing_chainID_fail system test.  File
metadata is now being set to demonstrate that the structure.delete
user function does not remove this once there is no more data left for
the molecule.
        * Small indexing fixes for the dispersion chapter of the relax manual.
        * Fix for system test
Relax_disp.test_cpmg_synthetic_dx_map_points.  Another import line was
written to the matplotlib script.
        * Speedup and fix for system test
Relax_disp.test_dx_map_clustered_create_par_file.  The following test
was taken out, since this a particular interesting case.  There exist
a double minimum, where relax has not found the global minimum.  This
is due to not grid searching for R2a, but using the minimum value.
        * Removed debugging code from the
N_state_model.test_CaM_IQ_tensor_fit system test.  This was an
accidentally introduced state.save user function used to catch the
system test state.  It would results in the 'x.bz2' file being dumped
in the current directory.
        * Loosened the checks in the
Relax_disp.test_baldwin_synthetic_full system test.  This is to allow
the test to pass on Python 2.5 and 3.1 on a 32-bit GNU/Linux system.
        * Fix for the Relax_disp.test_cpmg_synthetic_dx_map_points
system test for certain systems.  This change is to allow the test to
pass on Python 2.5 and 3.1 on a 32-bit GNU/Linux system.  This may be
related to 32-bit numpy 1.6.2 verses later numpy versions causing
precision differences.
        * Fixes for the
Relax_disp.test_hansen_cpmg_data_missing_auto_analysis system test for
certain systems.  The optimisation precision has been increased, and
the value checking precision has been decreased.  This change is to
allow the test to pass on Python 2.5 and 3.1 on a 32-bit GNU/Linux
system.  This may be related to 32-bit numpy 1.6.2 verses later numpy
versions causing precision differences.
        * Converted all the extern.numdifftools modules using the
dos2unix program.
        * Updated the Python 2 to Python 3 migration document to be
more current.
        * Small edit of the docs/devel/2to3_checklist document.
        * Expanded the Python 2 to 3 conversion document to list the
2to3 command individually.
        * The ImportErrors in unit tests are now correctly handled by
the relax test suite.  If an ImportError occurred, this was previously
killing the entire test suite.
        * The target_function.relax_fit module unit tests are now
skipped if the C module is not compiled.
        * Expanded the Python 2 to 3 conversion document.
        * Small update to the 2to3_checklist document - the print
statement conversion has been added.
        * The lib.errors module is now importing lib.compat.pickle for
better Python 2 and 3 support.  This shifts the compatibility code
from lib.errors into lib.compat so that the 2to3 program will not
touch the lib.errors module.
        * Better Python 3 compatibility in some test suite shared data
profiling scripts.  These changes invert the logic, importing the
Python 3 builtins module and aliasing xrange() to range(), and passing
if an ImporError occurs.  The code will now no longer be modified by
the 2to3 program.
        * Unicode fixes for the "\u" string in "\usepackage" in the
module docstring.  This requires escaping as "\\usepackage" to avoid
the unicode character '\u'.
        * The lib.check_types now imports io.IOBase from the
lib.compat module.  This is to shift more Python 2 vs. 3 compatibility
into lib.compat and out of all other modules.
        * Python 3 improvements - changed how the Python 3 absent
builtins.unicode() function is handled.  The aliased builtins.str()
function is now referenced as lib.compat.unicode().  The Python 2
__builtin__.unicode() function is also aliased to
lib.compat.unicode().  The GUI using this function now import it from
lib.compat.
        * Removed the writable base directory check in the
dauvergne_protocol auto-analysis.  This check was causing the system
test to fail if the user does not have write access to the installed
relax directory.
        * Expanded the Mac_framework_build_3way document to include 
matplotlib.
        * Important bug fix for racing causing the GUI to freeze.
This is really only seen in the GUI tests on MS Windows systems, as a
user could never be fast enough with the mouse.  The GUI interpreter
flush() method for ensuring that all user functions in the queue have
been cleared now calls wx.Yield() to force all wxPython events to also
be flushed.  This change will avoid random freezing of the relax test
suite.
        * Bug fix for the Mf.test_bug_21615_incomplete_setup_failure
GUI test on MS Windows systems.  The GUI interpreter flush() method
needs to be called between the two structure.load_spins user function
calls.  Without this, the test will freeze on MS Windows.  The
freezing behaviour is however not 100% reproducible and is dependent
on the Windows version and wxPython version.
        * Shifted a number of wx.NewId() calls to the module namespace
to conserve IDs.  These are for the menus in the main window and in
the spin view window.
        * Shifted the wx.NewId() calls for the spectrum list GUI
element to the module namespace.  These IDs are used for the pop up
menus.  The change avoids repetitive calls to wx.NewId() every time a
right click occurs, conserving wx IDs so that they are not exhausted
when running the test suite or running the GUI for a long time.
        * More shifting of wx.NewId() calls for popup menus to module
namespaces to conserve IDs.
        * Converted all of the GUI wizard button IDs to -1, as they
are currently unused.  This should conserve wx IDs, especially in the
test suite.
        * Shifted the main GUI window toolbar button wx IDs to the
module namespace.  This has no effect apart from better organising the
code.
        * Shifted the relax controller window popup menu wx IDs to the
module namespace.  This is simply to better organise the code to match
the other GUI module changes.
        * Menus created by the gui.components.menu.build_menu_item()
now default to the wx ID of -1.  This is to conserve wx IDs.  If the
calling code does not provide the ID, there is no need to grab one
from the small pool of IDs.
        * Shifted the spin viewer GUI window toolbar button wx IDs to
the module namespace.  This should conserve wx IDs as the window is
created and destroyed, as only 2 IDs will be taken from the small pool
for the entire lifetime of the program.
        * Shifted all of the wx.NewId() calls for the new analysis
wizard into the module namespace.  This will hugely save the number of
wx IDs used by the GUI, especially in the test suite.  Instead of
grabbing 8 IDs from the small pool every time the new analysis wizard
is created, only 8 IDs for the lifetime of the program will be used.
        * Another large wx ID saving change.  The ID associated with
the special accelerator table that allows the ESC button to close
relax wizards is now initialised once in the module namespace, and not
each time a wizard is created.
        * A small wx ID conserving change - the 'Execute' button in
the analysis tabs now uses the ID of -1.  A unique ID is not necessary
and is unused.
        * The user function class menus no longer have unique wx IDs,
as these are unnecessary.  This conserves the small pool of unique wx
IDs, as the spin viewer window is created and destroyed.
        * Bug fix for the structure.load_spins user function new
from_mols argument.  This was incorrectly using the
pipe_control.pipes.pipe_names() function to obtain its default values
in the GUI (although this is not currently uesd).  The result was a
non-fatal error message on Mac OS X systems of "Python[1065:1d03] ***
__NSAutoreleaseNoPool(): Object 0x3a3944c of class NSCFString
autoreleased with no pool in place - just leaking".
        * Added a debugging Python version check to the
devel_scripts/memory_leak_test_relax_fit.py script.  This prevents the
script from being executed with a normal Python binary.
        * Created the blacklisted Noe.test_noe_analysis_memory_leaks
GUI test.  This long test can be manually run to help chase down
memory leaks.  This can be monitored using the MS Windows task
manager, once the 'USER Objects' column is shown.  If the USER Objects
count reaches 10,000 in Windows, then no more GUI elements can be
created and the user will see errors.
        * Added a printout to the Noe.test_noe_analysis_memory_leaks
GUI test to help with debugging.
        * Improved debugging printouts for the
Noe.test_noe_analysis_memory_leaks GUI test.
        * Small fix for the GUI analysis deletion method to prevent
racing in the GUI tests.
        * Redesigned how wizards are destroyed in the GUI.  The relax
wizard Destroy() method is now overridden.  This allows the buttons in
the wizard to be properly destroyed, as well as all wizard pages.
This should remove a lot of GUI memory leaks.
        * Created the General.test_new_analysis_wizard_memory_leak
blacklisted GUI test.  This will be used to check for memory leaks in
the new analysis wizard.
        * Removed an unused dictionary from the GUI wizard object.
        * Added a wx.Yield() before destroying the new analysis wizard
via menu_new().  This is to avoid racing which can be triggered in the
test suite.


    Bugfixes:
        * Fix for the latex2html tags in the model-free chapter of the
relax manual.  This bug may affect the compilation of both the PDF and
HTML version (http://www.nmr-relax.com/manual/) of the manual.
        * Formatting improvements for the user function chapter of the
HTML manual.  This is for
http://www.nmr-relax.com/manual/Alphabetical_listing_user_functions.html.
This will hopefully fix the horrible formatting whereby all text is
wrapped in the HTML tags <SMALL CLASS="FOOTNOTESIZE"><SMALL
CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL
CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL
CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL
CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL
CLASS="SCRIPTSIZE">text</SMALL></SMALL></SMALL></SMALL></SMALL></SMALL></SMALL></SMALL></SMALL></SMALL>.
        * Big bug fix for the text size formatting of the HTML manual.
The previous fix for the user function chapter of the HTML manual
(http://www.nmr-relax.com/manual/Alphabetical_listing_user_functions.html)
did not fix the problem.  The issue was with the {exampleenv} defined
using a \newenvironment command in the preamble.  The command
\footnotesize was bing used in the start, but nothing was changing the
font size at the end.  In LaTeX, the ending of the environment appears
to reset the font size, whereas in latex2html it does not.  Therefore
all text after this environment is prepended by <SMALL
CLASS="FOOTNOTESIZE"> in the HTML manual and this keeps adding to the
text after each new exampleenv environment.
        * Fix for the poorly written
User_functions.test_structure_add_atom GUI test.  This fixes one part
of 2 of the bug #22772 (https://gna.org/bugs/?22772), the modelfree4
binary issue and the User_functions GUI tests with wxPython 2.9
failures of the test suite.  The problem was that a list element was
being set in the GUI test, but that element did not exist yet.
Somehow this worked in wxPython 2.8.  But the bad code failed on
wxPython 2.9.
        * Updated the Palmer.test_palmer_omp system test for the
64-bit Linux Modelfree 4.20 GCC binary file.  This fixes the second
part and last part of the bug #22772 (https://gna.org/bugs/?22772),
the modelfree4 binary issue and the User_functions GUI tests with
wxPython 2.9 failures of the test suite.  The problem is that the
64-bit GNU/Linux GCC compiled binary of Modelfree 4.20 produces
different results as previous versions.  These are now caught by the
system test and correctly checked.
        * Removal the use of OrderedDict().  OrderedDict is first
available in python 2.7, and is not essential functionality.  The
functionality is replaced with looping over a list of dictionary keys
instead, which is picked up under analysis.  Bug #22798
(https://gna.org/bugs/?22798): Failure of relax to start due to an
OrderedDict ImportError on Python 2.6 and earlier.
        * Fix for the find next bug in the relax controller window.
This is bug #22815 (https://gna.org/bugs/?22815), the failure of find
next using F3 (or Ctrl-G on Mac OS X) in the relax controller window
if search text has already been set.  The fix was simple, as the
required flags are in the self.find_data class object (an instance of
wx.FindReplaceData).
        * Fix for find dialog in the relax controller window.  This is
for bug #22816 (https://gna.org/bugs/?22816), the find functionality
of the relax controller window does not find text when using wxPython
= 2.9.  The find wxPython events are now bound to the find dialog
rather than the relax controller window LogCtrl element for displaying
the relax messages.  This works on all wxPython versions.
        * Bug fix for the structure.align user function for when no
data pipes are supplied.
        * Bug fix for the N-state model grid search when only
alignment tensor parameters are optimised.  The algorithm for
splitting up the grid search to optimise each tensor separately, hence
massively collapsing the dimensionality of the problem, was being
performed incorrectly.  The grid_search() API method inc, lower, and
upper arguments are lists of lists, but were only being treated as
lists.
        * Final fix for bug #22849 (https://gna.org/bugs/?22849).
This is the failure of the N-state model analysis when optimising only
alignment tensors using RDCs and/or PCSs.  The alignment tensor is no
longer initialised to zero values.  This is to allow the skip_preset
argument for the minimise.grid_search user function to be operational
for the N-state model, a feature introduced with the zooming grid
search.  The solution was to check for the uninitialised tensor in the
minimise_setup_fixed_tensors() method of the
specific_analyses.n_state_model.optimisation module.
        * Bug fix for the lib.arg_check.is_float_matrix() function.
The check for a numpy.ndarray data structure type was incorrect so
that lists of numpy arrays were failing in this function.  Rank-2
arrays were not affected.
        * Fix for the structure.com user function.  This fixes bug
#22860 (https://gna.org/bugs/?22860), the failure of the structure.com
user function after calling structure.delete.  The number of models in
cdp.structure is now counted and if set to zero, RelaxNoPdbError will
be raised.
        * The structure.write_pdb user function can now handle empty
molecules.  This fixes bug #22861 (https://gna.org/bugs/?22861), the
chain IDs in the structure.write_pdb user function PDB files are
incorrect after calling structure.delete.  To handle this
consistently, the internal structural object ModelContainer.mol_loop()
generator method has been created.  This loops over the molecules,
yielding those that are not empty.  The MolContainer.is_empty() method
has been fixed by not checking for the molecule name, as that remains
after the structure.delete user function call while all other
information has been removed.  And finally the write_pdb() structural
object method has been modified to use the mol_loop() method rather
than performing the loop itself.
        * Fix for the structure.delete user function for molecule
metadata once no more data exists.  This relates to bug #22861
(https://gna.org/bugs/?22861), the chain IDs in the
structure.write_pdb user function PDB files are incorrect after
calling structure.delete.  The metadata, when it exists, is now
deleted for the molecule once no more data is present.
        * Fix for system test Relax_disp.test_bug_atul_srivastava.
The call to the expected RelaxError needed to be performed differently
for erlier python versions that 2.7.
        * Fix for bug #22937 (https://gna.org/bugs/?22937).  This is
the failure of the Relax_disp.test_estimate_r2eff_err_auto system test
on Python 2.5.  The
test_suite/shared_data/dispersion/Kjaergaard_et_al_2013/1_setup_r1rho_GUI.py
simply required a newline character at the end of the file so that it
can be executed in Python 2.5.
        * Fix for bug #22938 (https://gna.org/bugs/?22938).  This is
the failure of the test suite in the relax GUI.  The problem was that
the status.skip_blacklisted_tests variable did not exist - it was only
initialised if relax is started in test suite mode.  Now the value is
always set from within the status module and defaults to True.
        * Python 3 fixes for the relax codebase.  These changes were
made using the command: 2to3 -j 4 -w -f buffer -f idioms -f
set_literal -f ws_comma -x except -x import -x imports -x long -x
numliterals -x xrange .
        * Python 3 fixes throughout relax, as identified by the 2to3
script.  The command used was: 2to3 -j 4 -w -f except -f import -f
imports -f long -f numliterals -f xrange .
        * Python 3 fixes - eliminated all usage of the dictionary
iteritems() calls as this no longer exists.
        * Python 3 fixes using 2to3 for the extern.numdifftools
package (mainly spacing fixes).  The command used was: 2to3 -j 4 -w -f
buffer -f idioms -f set_literal -f ws_comma -x except -x import -x
imports -x long -x numliterals -x xrange .
        * Python 3 fixes using 2to3 for the extern.numdifftools
package.  The command used was: 2to3 -j 4 -w -f except -f import -f
imports -f long -f numliterals -f xrange .
        * Python 3 fixes for all print statements in the
extern.numdifftools package.  The print statements have been manually
converted into print() functions.
        * Python 3 fixes via 2to3 - elimination of all map and lambda
usage in relax.  The command used was: 2to3 -j 4 -w -f map .
        * Python 3 fixes via 2to3 - replacement of all `x` with
repr(x).  The command used was: 2to3 -j 4 -w -f repr .
        * Manual Python 3 fixes for the dict.key() function which
returns a list or iterator in Python 2 or 3.  This involves a number
of changes.  The biggest is the conversion of the "x in y.keys()"
statements to "x in y".  For code which requires a list of keys, the
function calls "list(y.keys())" or preferably "sorted(y.keys())" are
used throughout (sorted() ensures that the list will be of the same
order on all operating systems and Python implementations).  A number
of "x in list(y.keys())" statements were simplified to "x in y", some
list() calls changed to sorted(), and some unnecessary list() calls
were removed.
        * Python 3 fixes via 2to3 - elimination of all apply() calls.
This only affects the GUI which cannot run in Python 3 yet as wxPython
is not Python 3 compatible yet.  The command used was: 2to3 -j 4 -w -f
apply .
        * Python 3 fixes via 2to3 - proper handling of the
dict.items() and dict.values() functions.  These are now all wrapped
in list() function calls to ensure that the Python 3 iterators are
converted to list objects before they are accessed.  The command used
was: 2to3 -j 4 -w -f dict .
        * Python 3 fixes via 2to3 - the execfile() function does not
exist in Python 3.  The command used was: 2to3 -j 4 -w -f execfile .
        * Python 3 fixes via 2to3 - the filter() function in Python 3
now returns an iterator.  The command used was: 2to3 -j 4 -w -f filter
.



Related Messages


Powered by MHonArc, Updated Mon Nov 24 23:00:03 2014