Open main menu

Changes

Relax 4.1.0

2,804 bytes added, 14:40, 21 February 2019
Added <code> tags throughout.
<section begin=features/>
* Greater wxPython-Phoenix support while maintaining compatibility with wxPython-Classic.
* Creation of a bash completion script for completing command line arguments with the tab key (<code>docs/bash_completion.sh</code>).
* A significantly more responsive relax GUI.
* Converted the steady-state NOE analysis sample script to use the auto-analysis.
* Many improvements and updates throughout the relax manual.
* Support for the new format of the NMRPipe SeriesTab files.
* Improvements for the Docker container scripts and documentation in <code>devel_scripts/Docker/</code>.
* Automated testing of relax via Travis-CI.
* New [http://www.nmr-relax.com/manual/frame_order_decompose.html frame_order.decompose user function] for a new representation of the frame order analysis results.
* Addition of the new user functions [http://www.nmr-relax.com/manual/structure_add_helix.html structure.add_helix] and [http://www.nmr-relax.com/manual/structure_add_sheet.html structure.add_sheet] for manually defining secondary structure.
* Speed up of the <code>'fit to first' </code> algorithm in the [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose] user function.
* Significant improvements to the checking of arguments passed into user functions, and the resultant error messages for invalid arguments.
* Improvements and fixes for the RelaxError messages to better explain user errors.
<section begin=changes/>
* Removal of the Mac OS X taskbar icon functionality. This code has been disabled since its deletion back in Jun 2012, as it does not work with wxPython 2.8 or 2.9. However with wxPython Phoenix, the disabled code fails as there is no wx.TaskBarIcon.
* Keyword to positional argument conversion for the GUI <code>wx.ListCtrl.SetStringItem() </code> function calls. The keyword arguments for this function must exist for backwards compatibility with ancient wxPython versions. The current documentation lists them as positional arguments, and keyword arguments are not accepted by wxPython-Phoenix.* Keyword to positional argument conversion for the GUI <code>wx.ScrolledWindow.EnableScrolling() </code> calls. These function calls were using keyword arguments, however the old wxPython and Phoenix documentation say that these are not keyword arguments (this must have been for backwards compatibility with very old wxPython versions).* Keyword to positional argument conversion for a GUI <code>wx.BoxSizer.Clear() </code> call. This is for the spin containers in the spin viewer window. The keyword argument in wxPython classic is deleteWindows however in Phoenix it is delete_windows.
* Decreased the precision of a check in the [http://www.nmr-relax.com/api/4.1/test_suite.gui_tests.rx.Rx-class.html#test_r1_analysis Rx.test_r1_analysis GUI test]. This is to allow the test to pass on wxPython-Phoenix and Python 3.
* Keyword to positional argument conversion for the GUI <code>wx.Font() </code> calls. A number of these were being called with keyword arguments, however the old wxPython and Phoenix documentation say that these are not keyword arguments (this must have been for backwards compatibility with very old wxPython versions).* Replacement of a <code>wx.ListCtrl.DeleteAllColumns() </code> function call from the spectrum GUI element. This function does not exist in wxPython-Phoenix. Instead the columns are looped over and <code>wx.ListCtrl.DeleteColumn() </code> is called instead.
* Creation of an initial bash script for enabling bash completion.
* Improvements for the bash completion relax script. Directories and relax scripts are now much better handled.
* Fine tuning of the bash completion relax script. The option "<code>-o nospace" </code> for "<code>complete" </code> has been removed as spaces are not added for directories anyway. This means that a space is added after all options and scripts.
* More precision decreases in the [http://www.nmr-relax.com/api/4.1/test_suite.gui_tests.rx.Rx-class.html#test_r1_analysis Rx.test_r1_analysis GUI test]. This is to allow the test to pass on wxPython-Phoenix and Python 3.
* Updates to the upload section of the release checklist document for sending files to SourceForge.
* Added release instructions for creating the <code>README.rst </code> files for the download area. This is for using the [https://sourceforge.net/p/nmr-relax/code-python-html2rest custom html2rest] to automatically generate the reStructuredText file from the wiki release notes.* Expanded the release checklist instructions for creating the <code>README.rst </code> files.* Updates to many frame order test suite shared data relax scripts. These scripts are used for data generation and display, and are not part of the test suite. The updates are for the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model] and [http://www.nmr-relax.com/manual/pymol_frame_order.html pymol.frame_order] user functions which no longer support the '<code>dist' </code> keyword argument (this functionality was shifted into the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function]).* First commit after the svn to git migration: Created a <code>.gitignore </code> file for the new git repository.
* Documented the svn to git repository migration. All of the scripts used and detailed instructions have been included.
* Standardisation of the section titles in a number of the documentation files.
* Git support for the repository version information. This is used in the relax introductory text, the manual compilation, and in the relax save states. The version.repo_revision variable has been renamed to [http://www.nmr-relax.com/api/4.1/version-module.html#repo_head version.repo_head] to be repository type independent. For the repository URL, all of the git remotes are included.
* C module blacklisting of the [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.relax_disp.Relax_disp-class.html#test_bug_24601_r2eff_missing_data Relax_disp.test_bug_24601_r2eff_missing_data system test]. The test is skipped if the C modules are not compiled.
* Added <code>.pyc </code> and <code>.so </code> files to be ignored.
* Fix for [http://www.nmr-relax.com/api/4.1/dep_check-module.html dep_check], when packages has an appended release candidate number. For example: numpy 1.8.0rc1.
* Added a script to check for copyright notice compliance to the [https://www.gnu.org/prep/maintain/html_node/Copyright-Notices.html FSF standard].
* Collection of all commits to attribute to other authors. This is for the FSF copyright notice compliance checking script.
* Collection of all commits to exclude by the FSF copyright notice compliance checking script.
* FSF compliant copyright notices for all files in the documentation directory <code>docs/devel/</code>. This includes two <code>README </code> files with the copyright notices for all of the patches.* FSF compliant copyright notices for all files in the documentation directory <code>docs/latex/</code>. This includes a <code>README </code> file with the copyright notices for the binary graphics.* FSF compliant copyright notices for all files in the documentation directory <code>docs/html/</code>. This includes a <code>README </code> file with the copyright notices for latex2html-2008 icons. The copyright notice script has been updated to handle false negatives (significant git commits without copyright ownership), and additional copyrights not present in the git log.
* FSF compliant copyright notices for all remaining files in the documentation directory.
* Added the original oxygen icon <code>AUTHORS </code> and <code>COPYING </code> files and standardised the <code>README </code> file titles. The <code>AUTHORS </code> and <code>COPYING </code> files from the original svn repository svn://anonsvn.kde.org/home/kde/trunk/kdesupport/oxygen-icon have been added to the repository for better documentation of the copyright. The <code>README </code> file had also been updated with the origin information.* FSF compliant copyright notices for the entirety of the <code>graphics/ </code> directory.* FSF compliant copyright notices for the <code>extern/ </code> directory. The packages within this directory are skipped in the <code>devel_scripts/copyright_notices.py </code> copyright compliance checking script.
* Update to FSF compliant copyright notices for all modules in the [http://www.nmr-relax.com/api/4.1/auto_analyses-module.html auto_analyses package].
* Update to FSF compliant copyright notices for all modules in the [http://www.nmr-relax.com/api/4.1/data_store-module.html data_store package].
* FSF compliant copyright notices for the entirety of the <code>devel_scripts/ </code> directory.
* Update to FSF compliant copyright notices for all modules in the [http://www.nmr-relax.com/api/4.1/gui-module.html gui package].
* Update to FSF compliant copyright notices for all modules in the [http://www.nmr-relax.com/api/4.1/lib-module.html lib package].
* Update to FSF compliant copyright notices for all modules in the [http://www.nmr-relax.com/api/4.1/pipe_control-module.html pipe_control package].
* Update to FSF compliant copyright notices for all modules in the [http://www.nmr-relax.com/api/4.1/prompt-module.html prompt package].
* Update to FSF compliant copyright notices for all scripts in the <code>sample_scripts/ </code> directory.
* Update to FSF compliant copyright notices for all modules in the [http://www.nmr-relax.com/api/4.1/scons-module.html scons package].
* Update to FSF compliant copyright notices for all modules in the [http://www.nmr-relax.com/api/4.1/specific_analyses-module.html specific_analyses package].
* Update to FSF compliant copyright notices for all [http://www.nmr-relax.com/api/4.1/test_suite.gui_tests-module.html GUI test modules].
* Update to FSF compliant copyright notices for the [http://www.nmr-relax.com/api/4.1/test_suite-module.html base test suite modules].
* Support for automated copyright notice placement in <code>README </code> files. This is directly within the FSF copyright notice compliance checking script.* Update to FSF compliant copyright notices for all scripts in the <code>test_suite/shared_data/ </code> directory.
* Self exclusion of the FSF compliant copyright notice commits.
* Cosmetic change for the [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests.package_checking.PackageTestCase-class.html#test___all__ test___all__() unit test base class method]. The files are now sorted.
* Blacklisted missing files are now skipped in the [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests.package_checking.PackageTestCase-class.html#test___all__ test___all__() unit test base class method]. This allows for the [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._target_functions.test___init__.Test___init__-class.html test_suite.unit_tests._target_functions.test___init__.Test___init__() unit test] to pass when the relaxation curve-fitting C modules are not compiled.
* Changed the relax state file name for the [http://www.nmr-relax.com/manual/state_save.html state.save user function] calls in the sample scripts. This is to make it clearer what the files are. The old '<code>*save.bz2' </code> notation has been removed and the files are now generally called '<code>state.bz2'</code>.
* Update to FSF compliant copyright notices for the external Sobol package. An explicit README file has been added to clarify the copyright status of all files.
* Added a trivial relax script to help regenerate the <code>pec_diag.eps </code> diagram.* Added the base Xmgrace data file for the generation of the NOE data plot. This is for regenerating <code>graphics/screenshots/noe_analysis/grace.svg</code>. The copyright notice checking script has been updated for this old 2004 file.
* Changed a number of references to "Linux" to "GNU/Linux".
* Replaced all references to "open source" in the manual with "free software".
* Removed the ancient CIA.vc references in the development chapter of the manual.
* Added a README file for the <code>extern/numdifftools </code> package. This is taken from the VC log and explains the origin, version, and licensing of the package.* Added the base Xmgrace data file for the generation of the R2 peak intensity data plot. This is for regenerating <code>graphics/screenshots/xmgrace_peak_intensities.svg</code>. The copyright notice checking script has been updated for this old 2004 file.* Copyright notice updates for the <code>graphics/misc/relaxGUI_splash* </code> files.
* Fixes for the FSF copyright notice compliance checking script.
* Update to FSF compliant copyright notices for the external numdifftools package. Explicit README files have been added to clarify the copyright status of all files.
* Removal of the numdifftools extern package, as this can be easily installed in Python using <code>pip</code>.
* Support for Grace-formatted units in the specific analysis parameter object. This is currently used by the relaxation curve-fitting analysis for the Rx parameters.
* Created the [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.relax_fit.Relax_fit-class.html#test_auto_analysis_pipe_name Relax_fit.test_auto_analysis_pipe_name system test] to catch a missing [http://www.nmr-relax.com/api/4.1/lib.errors.RelaxNoPipeError-class.html RelaxNoPipeError]. This is to catch the error "<code>NameError: global name 'RelaxNoPipeError' is not defined"</code>.
* Conversion of the relaxation curve-fitting sample script to use the [http://www.nmr-relax.com/api/4.1/auto_analyses.relax_fit.Relax_fit-class.html auto-analysis].
* Improved documentation for the DIFF_MODEL variable in the <code>dauvergne_protocol.py </code> sample script. The fact that it can be supplied as a list is now mentioned in the script docstring, and the default value is now a list with all of the global models.
* Support for NMR proton pseudo-atom identification from PDB files in the internal structural object. The standard pseudo-atoms are now identified as being protons.
* Removed a duplicated proton frequency check in the [http://www.nmr-relax.com/manual/relax_data_read.html relax_data.read user function]. This resulted duplicated RelaxWarnings being printed out.
* Huge improvement for the responsiveness of the relax GUI. The [http://www.nmr-relax.com/api/4.1/gui.controller.LogCtrl-class.html relax controller window log panel] was being updated with a <code>wx.CallAfter() </code> call after every write to the IO streams. If a relax analysis was proceeding very quickly, which is the case in most analyses, this created a huge backlog of GUI updates. The result was that the GUI would freeze, running at 100% CPU usage in its own thread, with the analysis running at 100% on another thread. The fix was to shift the [http://www.nmr-relax.com/api/4.1/gui.controller.LogCtrl-class.html#write log panel write()] call to be triggered by the Timer already being used by the gauges, rather than by the IO stream write() methods. The text was already placed on a Queue object, so this change is very simple. Another small change was made to the log panel <code>write() </code> method to avoid a number of unneeded wx calls. This should also have a significant impact on the GUI updating.* Saved state file name change for the [http://www.nmr-relax.com/api/4.1/auto_analyses.noe-module.html steady-state NOE] and [http://www.nmr-relax.com/api/4.1/auto_analyses.relax_fit-module.html relaxation curve-fitting] auto-analyses. The names are now simply '<code>state.bz2'</code>. This is so the file is easier to identify as being a relax state file that can be loaded with the [http://www.nmr-relax.com/manual/state_load.html state.load user function].
* The relaxation curve-fitting sample script now timestamps the data pipe bundle name.
* Redesign of Troels' [http://www.nmr-relax.com/api/4.1/lib.plotting.grace-module.html grace2images.py script]. The executable script creation has been shifted from the relaxation curve-fitting auto-analysis ([http://www.nmr-relax.com/api/4.1/auto_analyses.relax_fit-module.html auto_analyses.relax_fit]) into the new function [http://www.nmr-relax.com/api/4.1/lib.plotting.grace-module.html#create_grace2images lib.plotting.grace.create_grace2images()]. This is now also used by the steady-state NOE auto-analysis. The content of the script has also been shifted into the [http://www.nmr-relax.com/api/4.1/lib.plotting.grace-module.html#GRACE2IMAGES lib.plotting.grace.GRACE2IMAGES variable] to allow for easier code editing. The <code>grace2images.py </code> script itself has been heavily modified: The script now uses Python3 by default; The depreciated optparse module has been changed to argparse; A copyright notice has been placed at the top of the script; The top comment has been converted into a docstring; The default format is now EPS rather than PNG, as PNG is often not supported as an output device; Bug fix in that all formats can now be created (supplying "<code>JPG" </code> previously did nothing); General code and comment cleanups.
* The FSF copyright notice compliance checking script is no longer dependent on relax. The relevant [http://www.nmr-relax.com/api/4.1/lib.io-module.html lib.io relax module] functions have been copied into the script, and modified with the assumptions of Python 3 only compatibility and less flexible input.
* The relax [http://www.nmr-relax.com/api/4.1/status.Status-class.html status singleton] now stores the time it was created as the program starting time. This is to allow for elapsed time calculations, which will be used in the auto-analyses for more detailed printouts.
* Standardisation of initial and final printouts in the auto-analyses, including the elapsed time. The main auto-analyses now use [http://www.nmr-relax.com/api/4.1/lib.text.sectioning-module.html#title lib.sectioning.title()] for marking the start and the end of the analysis. And after the final title() printout, the [http://www.nmr-relax.com/api/4.1/lib.timing-module.html#print_elapsed_time lib.timing.print_elapsed_time() function] is called to provide user feedback to how long relax had been running for.
* Creation of the [http://www.nmr-relax.com/api/4.1/test_suite.gui_tests.relax_disp.Relax_disp-class.html#test_bug_missing_replicates Relax_disp.test_bug_missing_replicates GUI test]. This is to catch an Attribute error when the replicated spectra are specified via the spectrum list GUI element rather than the peak intensity loading wizard.
* More of the GUI main menu entries are disabled during execution locking. This includes all of the '<code>Tools' </code> menu entries to block the free file format from changing mid-execution, the system information user function from being called, and the test suite from being run. The BMRB export menu entry is also disabled.* Safe execution of all of the auto-analyses (those that acquire the execution lock). The whole of the <code>__init__() </code> code of the auto-analyses is now wrapped within a try-finally set of statements. This is to be absolutely sure that the execution lock is released. This is not always the case, for example the [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.relax_fit.Relax_fit-class.html#test_auto_analysis_pipe_name Relax_fit.test_auto_analysis_pipe_name system test] was not releasing the lock due to a RelaxError, and this was causing the later GUI tests to fail.
* Updated the [http://www.nmr-relax.com/api/4.1/test_suite.gui_tests.rx.Rx-class.html#test_r1_analysis Rx.test_r1_analysis GUI test] for the changed state file name in the auto-analysis.
* Fix for the FSF copyright notice compliance checking script for [http://www.nmr-relax.com/api/4.1/lib.plotting.grace-module.html lib/plotting/grace.py]. The copyright notices within the <code>grace2images.py </code> script in the module variable are now ignored. This additionally required removing duplicate copyright notices as both the module and embedded script have "Copyright (C) 2013 Troels E. Linnet".
* Unique and temporary hash support in the spin containers. These private data structures will allow for fast SpinContainer to InteratomContainer and reverse lookups. The hash is temporary and only created when a SpinContainer is created. It is not stored, so it is regenerated between relax sessions.
* Unique and temporary hash support in the interatomic data containers. The interatomic data containers now have a unique and temporary private hash assigned to it, just as with the spin containers. They also now have the ability to store the unique spin container hashes. This is currently unused but will allow for fast SpinContainer to InteratomContainer and reverse lookups.
* Data container hash cross-reference recreation. This is used by the [http://www.nmr-relax.com/manual/model_selection.html model_selection], [http://www.nmr-relax.com/manual/pipe_copy.html pipe.copy], [http://www.nmr-relax.com/manual/results_read.html results.read] and [http://www.nmr-relax.com/manual/state_load.html state.load] user functions. The cross referencing recreation is for both spin containers and interatomic data containers. The old [http://www.nmr-relax.com/api/4.1/pipe_control.mol_res_spin-module.html#metadata_update pipe_control.mol_res_spin.metadata_update()] and new [http://www.nmr-relax.com/api/4.1/pipe_control.interatomic-module.html#metadata_update pipe_control.interatomic.metadata_update()] functions are called after the loading a results or state file, or a data pipe copy, so that the data structures properly cross-reference each other's hashes.
* Huge speed up of the interatomic data container handling. The [http://www.nmr-relax.com/api/4.1/pipe_control.interatomic-module.html#create_interatom pipe_control.interatomic.create_interatom()], [http://www.nmr-relax.com/api/4.1/pipe_control.interatomic-module.html#return_interatom return_interatom()], and [http://www.nmr-relax.com/api/4.1/pipe_control.interatomic-module.html#return_interatom_list return_interatom_list()] functions now operate with the unique spin hashes rather than spin IDs. This avoids the expensive calls to the now deleted pipe_control.interatomic.id_match() function.
* Fixes for the copying of spin or interatomic data containers. The [http://www.nmr-relax.com/api/4.1/data_store.prototype-module.html data_store.prototype] methods [http://www.nmr-relax.com/api/4.1/data_store.prototype.Prototype-class.html#__clone__ Prototype.__clone__()] and [http://www.nmr-relax.com/api/4.1/data_store.prototype.Prototype-class.html#__deepcopy__ Prototype.__deepcopy__()] will now regenerate the unique hash if a <code>_generate_hash() </code> function is present. This function has been added to [http://www.nmr-relax.com/api/4.1/data_store.mol_res_spin.SpinContainer-class.html#_generate_hash SpinContainer] and [http://www.nmr-relax.com/api/4.1/data_store.interatomic.InteratomContainer-class.html#_generate_hash InteratomContainer].
* Changed the spin ID printout for the [http://www.nmr-relax.com/manual/rdc_read.html rdc.read user function] to be the unique ID rather than file ID. This is to help with debugging.
* Bug fix for the [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.n_state_model.N_state_model-class.html#test_CaM_IQ_tensor_fit N_state_model.test_CaM_IQ_tensor_fit system test]. Some of the RDC data contained RDCs between two @N spins rather than an @N and @H spin. This bug was only uncovered by the switch to the spin and interatomic data container hashes for fast lookups.
* The [http://www.nmr-relax.com/api/4.1/pipe_control.interatomic-module.html#interatomic_loop interatomic_loop() function] now uses the spin hash fast lookup table rather than spin IDs.
* Redesign of the [http://www.nmr-relax.com/api/4.1/pipe_control.mol_res_spin-module.html#create_spin create_spin() function] of the [http://www.nmr-relax.com/api/4.1/pipe_control.mol_res_spin-module.html pipe_control.mol_res_spin module]. This function is the backend of the [http://www.nmr-relax.com/manual/spin_create.html spin.create user function] and is also used throughout relax. Instead of creating a single residue or spin, if only a name and not number is supplied, now multiple spins are created. If the residue name is supplied but not the residue number, now all residues matching the given name will have new spins created. For example creating the spin with the name 'NE1' and only specifying the residue name 'TRP', then all tryptophans in all molecules will have NE1 indole side-chain spins created. This makes the operation of the [http://www.nmr-relax.com/manual/spin_create.html spin.create user function] more logical for the user.
* Support for catching segfaults and other errors from Modelfree4. This allows for non-silent exiting from the <code>Popen() </code> class. All signals are now reported via RelaxErrors.
* Added the text of the LGPLv3 licence to the extern.sobol package.
* Added FSF recommended LGPLv3 licence notices to the top of all of the extern.sobol files. Excluded is the auto-generated test output file.
* Renamed the LGPLv3 file in the extern.sobol package to <code>COPYING.LESSER</code>.
* Updated all of the minfx project links from Gna! to the SourceForge site.
* Updated all of the relax deployment scripts for the Gna! shutdown. These now use the SourceForge sites for [https://sourceforge.net/projects/nmr-relax/ relax], [https://sourceforge.net/projects/minfx/ minfx], and [https://sourceforge.net/projects/bmrblib/ bmrblib] instead. The svn to git conversion is also taken into account, and git is used to pull in the latest relax code from the SourceForge mirror.
* Removed the dead Freshmeat/Freecode and Gmane text from the development chapter of the manual.
* Copyright notice and FSF compliant copyright notice script updates.
* Renamed the FSF Copyright Validator script to the acronym <code>fsfcv</code>.
* Split the FSF Copyright Validation script into a configuration file and an executable script. The configuration part of the script has been retained but with all data stripped to be able to provide a blank template for a new configuration file. And the new mimetypes section has been converted into a variable rather than manipulating the mimetypes Python module so that the configuration script requires no Python imports.
* Converted the whole FSF copyright notice validation script code into a class. This is in preparation for a number of major changes to the script.
* The FSF copyright notice validation script now uses the argparse Python module. This is for more powerful command line argument processing. The new <code>--blank-config </code> option will now print out the blank configuration file, and the DEBUG variable has been replaced with the <code>-d </code> or <code>--debug </code> command line option.
* Improved the documentation of the fsfcv configuration file.
* Implementation of the configuration file parsing. This uses modern Python import mechanisms to load the blank config first for default values, followed by the user supplied configuration file.
* Reactivated the user supplied binary mimetypes for the FSF Copyright Validation script.
* More robust reading of copyright notices from binary files in the FSF Copyright Validation script. The reading of the text file will now return and empty list if a UnicodeDecodeError occurs.
* Updated the fsfcv configuration file for the <code>fsfcv </code> script and configuration file itself.* Fixes for the <code>extern/numpy_future.py </code> copyright notices.
* Support for multiple additional years in the FSF Copyright Validation script.
* Added a progress meter, a simple spinner, to the FSF Copyright Validation script. This is taken directly from [http://www.nmr-relax.com/api/4.1/lib.text.progress-module.html lib.text.progress], and the output is sent to STDERR. All other script output is now sent to STDOUT. It is only active if the verbose flag is off.* Separated the missing copyright notices from non-valid copyright notices in the <code>fsfcv </code> script. These are now counted separately and a different message printed out for the missing notice case.* Support added to the <code>fsfcv </code> script for handling content not within a version control repository. The untracked and non-valid copyright counting is turned off in this case.* Improved the feedback from the progress meter in the <code>fsfcv </code> script. This now says what the numbers are, using text such as "X files checked.".* Activated the '<code>link' </code> option for the epydoc API documentation. This allows for the navigation link to point to "/" rather than "http://www.nmr-relax.com". This is for SSL and <code>https:// </code> preparations, so that the http://www.nmr-relax.com part of the URL is not present in the local links.* Shifted the epydoc API documentation copyright notice insertion into the scons script. This notice was previously hardcoded into the <code>devel_scripts/google_analytics.js </code> script - as that is the GPLv3+ copyright notice of that script with the date of 2012. Instead the copyright notice in the Google analytics script is now skipped and the correct FDLv1.3 copyright notice with the current year programmatically inserted via the <code>scons/manuals.py </code> script.
* Adding new format of NMRPipe SeriesTab which give errors.
* Added the [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.relax_disp.Relax_disp-class.html#test_bug_seriestab_format Relax_disp.test_bug_seriestab_format system test] to check for the new format of NMRPipe SeriesTab.
* Changes to [http://www.nmr-relax.com/api/4.1/lib.spectrum.nmrpipe-module.html lib.spectrum.nmrpipe] to handle NMRPipe SeriesTab, when assignment has not been performed. Auto detecting the multiplier column.
* Fixing for allowing renaming of SeriesTab spectrum ID.
* Fix for help section in ./<code>grace2images.py </code> file. It was unclear how to get different types of images.
* Extended the [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.relax_disp.Relax_disp-class.html#test_bug_seriestab_format Relax_disp.test_bug_seriestab_format system test] to include reading of several SeriesTab files, and selecting intensity column.
* Modified [http://www.nmr-relax.com/api/4.1/lib.spectrum.nmrpipe-module.html lib.spectrum.nmrpipe] in [http://www.nmr-relax.com/api/4.1/lib.spectrum.nmrpipe-module.html#read_seriestab read_seriestab()] to allow for selecting intensity column.
* Extended the help section of running a Docker container, so now it is also possible to run a bash session in the container.
* Fix for deploy script of relax to ubuntu. The version variables was wrongly set.
* When running Docker with OpenDX, the current working directory is now mounted on <code>$HOME/work </code> instead of <code>$HOME</code>.
* Made the Ultimate Docker file, which package relax and OpenDX together in one Dockerfile. Everything can now be packed together. This makes it an ultimate opportunity to easily ship the relax Docker image to run 'everywhere' easily.
* Letting the default intensity column of SeriesTab be 'VOL'. This is the column SeriesTab uses. The 'HEIGHT' column is copied in from the nmrDraw <code>test.tab </code> file, and does not represent the measurement.* Fixes to [http://www.nmr-relax.com/api/4.1/script-sconstruct-module.html sconstruct], when building with Python 3 and SCons. The current sconstruct caused an '<code>SyntaxError: invalid syntax' </code> when using '<code>`' </code> in the file.
* Fixes to [http://www.nmr-relax.com/api/4.1/script-sconstruct-module.html sconstruct], when cleaning with Python 3 and SCons. This fix is to print the list represented.
* Removed the Oxygen Icon directory from the skipped directory list of the <code>fsfcv </code> script.
* Added copyright notices for every Oxygen Icon.
* Small fix for the FSF Copyright Validation script (<code>fsfcv</code>).
* Capitalised the copyright symbol in the Sobol' external library copyright notices. This is for easier handling by the FSF Copyright Validation script.
* Fixes for the <code>fsfcv </code> script configuration for the Sobol' external package.* The alternative committer names are now better handled in the <code>fsfcv </code> script. The committer's names in the VC logs are now also translated from the alternative to the standard name.
* Correct spelling of Troels Schwarz-Linnet in the copyright notices.
* Troels' name is now handled differently in the <code>fsfcv </code> script configuration file. The text "Troels E. Linnet" is now the alternative name, and "Troels Schwarz-Linnet" the standard name.
* MS Windows support for the FSF Copyright Validation script.
* Cut and paste error fix for the Oxygen Icon licensing text in the <code>README </code> files. As stated in the <code>COPYING </code> file, the licence is LGPLv3+, not GPLv3+.
* Updated the general relax copyright notice for 2018. This last copyright year is now stored as info.copyright_final_year.
* Clarified the GPLv3+ licensing in the relax introduction string.
* Manual: Addition of a GPLv3+ copyright notice to a [http://www.nmr-relax.com/manual/index.html second title page].
* Another Oxygen Icon licensing text fix in the <code>README </code> files.
* Improved the LGPLv3+ licensing text for the base directory of the Oxygen Icons.
* Manual: Added the LGPLv3+ copyright notice for the Oxygen Icons to the [http://www.nmr-relax.com/manual/index.html second title page].
* Documentation for the copyright and public domain notices for 3D structures. This is to explain why the strict format text files are not modified to include notices, hence they are placed in the <code>README </code> file, and detailing the public domain nature of the Protein Data Bank repository.
* Updated the script for Docker images.
* Adding Dockerfile for Ubuntu 18.04 LTS and development on Windows.
* Fix for comparison of arrays to None. The use of '<code>x == None' </code> should be '<code>x is None'</code>.
* Initial commit of travis-ci.
* Setting <code>sys.exit(1) </code> in dep_check, to make Travis-ci fail the build on error.
* Travis CI: Adding minfx to pip requirements file.
* Travis CI: Fixing path to minfx for pip to install.
* Travis CI: Adding <code>PYTHON_INCLUDE_DIR</code>.* Travis CI: Fix for getting <code>Python.h</code>.* Travis CI: Again trying to fix export variable to find <code>Python.h</code>.* Travis CI: Adding debug echo of path to <code>Python.h</code>.* Travis CI: Moving export to <code>.travis.yml</code>.
* Travis CI: Adding unit test to travis.
* Travis CI: Fix for executing relax from current folder.
* Travis CI: Removing scons, since it should already be part of Compilers & Build toolchail toolchain in Trusty images.
* Travis CI: Adding print of relax information.
* Travis CI: Adding more packages to pip requirements.
* Travis CI: Removed matplotlib from Python 2.6.
* Travis CI: Remove test of Python 2.6.
* Renamed <code>README </code> file to markdown.* Added travis build shield to <code>README</code>.
* Adding system-tests to be executed with travis.
* Creation of a large set of system tests for implementing the [http://www.nmr-relax.com/manual/frame_order_decompose.html frame_order.decompose user function]. The tests have been copied from <code>Frame_order.test_distribute_* </code> and include: [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose_free_rotor_z_axis Frame_order.test_decompose_free_rotor_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose_iso_cone_z_axis Frame_order.test_decompose_iso_cone_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose_iso_cone_xz_plane_tilt Frame_order.test_decompose_iso_cone_xz_plane_tilt], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose_iso_cone_free_rotor_z_axis Frame_order.test_decompose_iso_cone_free_rotor_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose_iso_cone_torsionless_z_axis Frame_order.test_decompose_iso_cone_torsionless_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose_pseudo_ellipse_xz_plane_tilt Frame_order.test_decompose_pseudo_ellipse_xz_plane_tilt], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose_pseudo_ellipse_z_axis Frame_order.test_decompose_pseudo_ellipse_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose_pseudo_ellipse_free_rotor_z_axis Frame_order.test_decompose_pseudo_ellipse_free_rotor_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose_pseudo_ellipse_torsionless_z_axis Frame_order.test_decompose_pseudo_ellipse_torsionless_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose_rotor_z_axis Frame_order.test_decompose_rotor_z_axis].
* Creation of the [http://www.nmr-relax.com/manual/frame_order_decompose.html frame_order.decompose user function] front end.
* Implementation of the [http://www.nmr-relax.com/manual/frame_order_decompose.html frame_order.decompose user function] backend.
* Scons: Fixes for the manual compilation. The relax manual cannot be compiled if one of the <code>sys.path </code> values contains a '<code>docs/' </code> directory. Instead of appending the relax <code>docs/ </code> path to <code>sys.path</code>, it is now prepended. The documentation Python module <code>__all__ </code> lists have also been filled out.* Renamed the [http://www.nmr-relax.com/api/4.1/version-module.html#version relax default repository version] from <code>"repository checkout" </code> to <code>"repository commit"</code>. This general text is more appropriate for a git repository.
* Manual: Removed a Gna! reference in the [http://www.nmr-relax.com/manual/Introduction.html intro chapter].
* Manual: Alias creation for the relax mailing lists. This is to allow for a centralised place for changing the mailing list name, if any changes occur to the mailing list in the future.
* [http://www.nmr-relax.com/manual/Free_software_infrastructure.html Manual, Ch. Infrastructure]: Removed the Gna! information from the relax website section.
* [http://www.nmr-relax.com/manual/Free_software_infrastructure.html Manual, Ch. Infrastructure]: Updated the relax mailing list information from Gna! to SourceForge. This is now all through LaTeX aliases, so infrastructure changes should be easier to deal with in the future.
* [http://www.nmr-relax.com/manual/Free_software_infrastructure.html Manual, Ch. Infrastructure]: Abstracted the bug reporting section using aliasing. This removes all Gna! specific links from the chapter, shifting them to SourceForge links in the main <code>relax.tex </code> file.* [http://www.nmr-relax.com/manual/Free_software_infrastructure.html Manual, Ch. Infrastructure]: Abstract the relax repository section and switch from svn to git. This removes all Gna! specific links from the chapter, shifting them to SourceForge links in the main <code>relax.tex </code> file.
* [http://www.nmr-relax.com/manual/Free_software_infrastructure.html Manual, Ch. Infrastructure]: Removal of the news section, as this is not supported on SourceForge.
* [http://www.nmr-relax.com/manual/Free_software_infrastructure.html Manual, Ch. Infrastructure]: Abstract the distribution archive section and switch from svn to git. This removes all Gna! specific links from the chapter, shifting them to SourceForge links in the main <code>relax.tex </code> file.
* [http://www.nmr-relax.com/manual/Installation_instructions.html Manual, Ch. Installation]: Abstraction of the bug tracker links. This replaces the dead Gna! links to the current SourceForge links.
* [http://www.nmr-relax.com/manual/The_N_state_model_or_ensemble_analysis.html Manual, Ch. N-state model]: Abstraction of the relax-users mailing list.
* [http://www.nmr-relax.com/manual/relax_development.html Manual, Ch. Development]: Removal of the section describing creating and submitting patches.
* [http://www.nmr-relax.com/manual/relax_development.html Manual, Ch. Development]: Section rearrangement in preparation for new text.
* [http://www.nmr-relax.com/manual/relax_development.html Manual, Ch. Development]: svn to git and infrastructure abstraction in the Committers section. All references to svn have been changed to git. And the Gna! infrastructure has been abstracted to aliases in the main <code>relax.tex </code> file so that future infrastructure changes are easier to deal with. In addition, many edits of the text have been made.
* [http://www.nmr-relax.com/manual/relax_development.html Manual, Ch. Development]: Expansion of the relax repository section.
* [http://www.nmr-relax.com/manual/relax_development.html Manual, Ch. Development]: Minor edits to the relax repository git mirror section.
* [http://www.nmr-relax.com/manual/relax_development.html Manual, Ch. Development]: Minor editing of the tracker section.
* [http://www.nmr-relax.com/manual/relax_development.html Manual, Ch. Development]: Updated the very out of date links section. This was incredibly out of date. The links have been updated to include everything listed at http://www.nmr-relax.com/links.html.
* [http://www.nmr-relax.com/manual/Index.html Manual, Index]: Removed the no longer relevant <code>svnmerge.py </code> entry.
* Simplify Travis file.
* Added travis-ci support for Python 3.7 and OSX. Adding notifications from <code>builds att travis-ci.com </code> to <code>nmr-relax-devel att lists.sourceforge.net</code>. This is after inspiration from https://github.com/WeblateOrg/translation-finder/blob/master/.travis.yml. Windows can not be added due to unknown compile error.* Fixing a bug for running scons. This happens after a '<code>pip install -U numpy'</code>, where numpy is upgraded from 13.3 to 16.1.0. More to read here: https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.set_printoptions.html; https://stackoverflow.com/questions/1987694/how-to-print-the-full-numpy-array; https://github.com/numpy/numpy/pull/12353.
* Fix for building on Mac OSX Python 3.7. A possible solution was found here: https://stackoverflow.com/questions/31019854/typeerror-cant-use-a-string-pattern-on-a-bytes-like-object-in-re-findall.
* Adding sending mails to <code>nmr-relax-devel att lists.sourceforge.net</code>. This introduces a spamming problem. Everyone who forks this project and have travis setup for their user will spam the develop mailing list. To limit this, there are options in travis: https://docs.travis-ci.com/user/notifications/; https://docs.travis-ci.com/user/conditional-builds-stages-jobs. Introducing a condition like if: branch = master seems not to be implemented yet: https://github.com/travis-ci/travis-ci/issues/1405. Travis has internal ticket to track this feature request.
* SCons: Git support for the scons distribution targets. This was previously only set up for Subversion.
* FSF Copyright Validation script: Support for tracking files renamed in later repositories. In this case, a file rename in the current git repository would not allow the file to be found in the SVN archive repository. The history of the later repository is now used to find all file renames after the end of the earlier repository. False git history is also correctly handled.
* FSF Copyright Validation script: Bug fixes for recording the first VC commit as copyright ownership.
* FSF Copyright Validation configuration: Updates for recent files and the script bug fixes. A lot false git history needed to be identified and blocked. And a lot of <code>README </code> files added for copyright identification needed to be manually included.
* Python multiversion test suite script: Added Python 3.6 and 3.7 to the list to test.
* Travis CI config: Minimise mailing list messages with successes only reported after fixing failures.
* Added Python as overall language to travis.
* System tests: [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.relax_disp.Relax_disp-class.html#test_paul_schanda_nov_2015 Relax_disp.test_paul_schanda_nov_2015] is now skipped when Scipy is missing.
* Devel scripts: Improved logic for finding <code>Python.h </code> in the manual C module building script.* SCons: Improved logic for finding <code>Python.h </code> for building the C modules.* Python multiversion test suite script: Removal of Python 2.3 and 2.4. These Python versions have not been supported since the first usage of "<code>from __future__ import absolute_import" </code> back in 2013.
* Test suite: Graceful failure of the GUI tests when the wx app cannot be setup. This currently occurs when using wxPython-Phoenix.
* Travis CI config: Adding Python 3.6 and adding test of mpirun.
* <code>.gitignore</code>: Ignoring Windows C extensions.
* Travis CI config: Trying to add MPI for Windows. It does not seem to work.
* Travis CI config: Trying MPI on Windows does not work: "<code>The processor type ''mpi4py'' is not supported."</code>* GUI: Fix for a wxPython 2.9 issue found via the [http://www.nmr-relax.com/api/4.1/test_suite.gui_tests.relax_disp.Relax_disp-class.html#test_bug_missing_replicates Relax_disp.test_bug_missing_replicates GUI test]. The spectrum ID wx.ListCtrl element cannot be queried for item 0 when empty.* Development scripts: Rewrote the <code>python_seek.py </code> script to report all import errors.* Creation of a large set of system tests for expanding the [http://www.nmr-relax.com/manual/frame_order_decompose.html frame_order.decompose user function]. The tests have been copied from Frame_order.test_decompose_* and modified to include the new '<code>total'</code>, '<code>reverse'</code>, and '<code>mirror' </code> user function keywords. The tests include: [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose2_free_rotor_z_axis Frame_order.test_decompose2_free_rotor_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose2_iso_cone_z_axis Frame_order.test_decompose2_iso_cone_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose2_iso_cone_xz_plane_tilt Frame_order.test_decompose2_iso_cone_xz_plane_tilt], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose2_iso_cone_free_rotor_z_axis Frame_order.test_decompose2_iso_cone_free_rotor_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose2_iso_cone_torsionless_z_axis Frame_order.test_decompose2_iso_cone_torsionless_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose2_pseudo_ellipse_xz_plane_tilt Frame_order.test_decompose2_pseudo_ellipse_xz_plane_tilt], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose2_pseudo_ellipse_z_axis Frame_order.test_decompose2_pseudo_ellipse_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose2_pseudo_ellipse_free_rotor_z_axis Frame_order.test_decompose2_pseudo_ellipse_free_rotor_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose2_pseudo_ellipse_torsionless_z_axis Frame_order.test_decompose2_pseudo_ellipse_torsionless_z_axis], [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.frame_order.Frame_order-class.html#test_decompose2_rotor_z_axis Frame_order.test_decompose2_rotor_z_axis]* User function [http://www.nmr-relax.com/manual/frame_order_decompose.html frame_order.decompose]: Implementation of the '<code>total'</code>, '<code>reverse' </code> and '<code>mirror' </code> params. This allows a fixed number of structures to be generated over the distribution, for the model order to be reversed, and for the models to step from the negative angle to positive angle and then return to the negative angle. The original code has been simplified by switching from <code>numpy.arange() </code> to <code>numpy.linspace() </code> for generating the range of angles. This function is far more reliable than <code>arange() </code> which has end point instability issues.
* Creation of the [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib._structure._internal.test_object.Test_object-class.html#test_add_model Test_object.test_add_model unit test]. This is within the [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib._structure._internal.test_object-module.html _lib._structure._internal.test_object test module]. The aim is to reveal issues with the model number accounting within the internal structural object.
* System test: Addition of [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.structure.Structure-class.html#test_add_secondary_structure Structure.test_add_secondary_structure]. This will be used to quickly implement the new [http://www.nmr-relax.com/manual/structure_add_helix.html structure.add_helix] and [http://www.nmr-relax.com/manual/structure_add_sheet.html structure.add_sheet] user functions.
* User function: Implementation of [http://www.nmr-relax.com/manual/structure_add_sheet.html structure.add_sheet] for defining beta sheets.
* Library: Implementation of the [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#is_bool_or_bool_list lib.arg_check.is_bool_or_bool_list() function]. This is to allow for either Boolean values or lists of Booleans.
* User functions: Registration of the '<code>bool_or_bool_list' </code> argument type.* User function [http://www.nmr-relax.com/manual/frame_order_decompose.html frame_order.decompose]: The argument '<code>reverse' </code> can now be a list of Booleans. This allows different modes to be selectively reversed.* User function [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose]: Speed up of the <code>'fit to first' </code> algorithm. The translation and rotation are now skipped for the first structure (as the translation is zero and the rotation matrix is the identity matrix).* User function [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose]: Improved the documentation of the '<code>models' </code> arg.
* RelaxErrors: Implementation of a number of new error types. This includes the [http://www.nmr-relax.com/api/4.1/lib.errors.RelaxBoolListBoolError-class.html RelaxBoolListBoolError], [http://www.nmr-relax.com/api/4.1/lib.errors.RelaxNoneBoolError-class.html RelaxNoneBoolError], [http://www.nmr-relax.com/api/4.1/lib.errors.RelaxNoneBoolListBoolError-class.html RelaxNoneBoolListBoolError], and [http://www.nmr-relax.com/api/4.1/lib.errors.RelaxNoneTupleNumError-class.html RelaxNoneTupleNumError] objects.
* Unit tests: Complete checking of the [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module].
* [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module]: Missing RelaxError import for the new [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#is_bool_or_bool_list is_bool_or_bool_list() function]. The lib.error import statement has also been spread across multiple lines and alphabetically sorted.* [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module]: Protection of the functions against future numpy depreciations. The code '<code>arg == None' </code> will not be supported by numpy in the future, if the arg being checked is a numpy object. Instead the '<code>arg is None' </code> syntax must be used.
* RelaxErrors: Bug fix for the error message generation for list types. The simple_types and list_types variables are class rather than instance variables, but these were being unintentionally modified by the [http://www.nmr-relax.com/api/4.1/lib.errors.BaseArgError-class.html#__init__ BaseArgError base class __init__() method].
* [http://www.nmr-relax.com/api/4.1/lib.compat-module.html lib.compat module]: Implementation of the Python version independent [http://www.nmr-relax.com/api/4.1/lib.compat-module.html#from_iterable from_iterable() function]. This will be used to avoid directly using <code>itertools.chain.from_iterable()</code>, which was only introduced in Python 2.6 and later. For Python &ge; 2.6, the <code>itertools.chain.from_iterable() </code> function is used, otherwise the roughly equivalent [http://www.nmr-relax.com/api/4.1/lib.compat-module.html#from_iterable_pre_2_6 lib.compat.from_iterable_pre_2_6() function] is used.
* [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module]: Redesign of the [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#is_float_object is_float_object() function] to handle any data input. Previously the function could only handle max rank-2 Python lists (lists of lists), and max rank-2 numpy arrays. And only the first dimensionality was being checked. Now any rank list or numpy array is correctly handled.
* [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module]: Addition of the can_be_none argument to the [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#is_bool is_bool() function].
* [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module]: Documentation fixes for the <code>is_*() </code> functions.
* [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module]: Fix for the wrong RelaxErrors being used in the [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#is_num_tuple is_num_tuple() function].
* [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module]: Fix for missing RelaxError imports for the [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#is_list is_list() function].
* [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module]: Fixes to and simplification of the [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#is_int_list is_int_list() function]. Boolean lists no longer evaluate as true.
* RelaxErrors: Addition of more error objects in preparation for a new lib.arg_check function.
* RelaxErrors: Expansion of the functionality of the [http://www.nmr-relax.com/api/4.1/lib.errors.BaseArgError-class.html BaseArgError base class]. The docstring now documents the arguments. The '<code>dim' </code> and '<code>rank' </code> arguments have been added to allow for more control over the reported message for array-type objects. And the '<code>can_be_none' </code> argument has been added to append <code>', or None' </code> to the message, negating the need for the <code>RelaxNone*Error </code> objects. For formatting the lists used in the BaseArgError class, the new function [http://www.nmr-relax.com/api/4.1/lib.text.string-module.html#human_readable_list human_readable_list()] has been added to the [http://www.nmr-relax.com/api/4.1/lib.text.string-module.html lib.text.string module].
* [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module]: Creation of the generic [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#validate_arg validate_arg() function]. A large number of associated unit tests have been added to test all combinations. The [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check-module.html _lib.test_arg_check unit tests] include: [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_all_basic_types Test_arg_check.test_validate_arg_all_basic_types], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_all_basic_types_and_all_containers Test_arg_check.test_validate_arg_all_basic_types_and_all_containers], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_all_containers Test_arg_check.test_validate_arg_all_containers], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_bool Test_arg_check.test_validate_arg_bool], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_bool_list Test_arg_check.test_validate_arg_bool_list], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_bool_list_rank2 Test_arg_check.test_validate_arg_bool_list_rank2], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_bool_or_bool_list Test_arg_check.test_validate_arg_bool_or_bool_list], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_float Test_arg_check.test_validate_arg_float], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_float_list Test_arg_check.test_validate_arg_float_list], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_float_list_rank2 Test_arg_check.test_validate_arg_float_list_rank2], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_float_or_float_list Test_arg_check.test_validate_arg_float_or_float_list], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_func Test_arg_check.test_validate_arg_func], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_int Test_arg_check.test_validate_arg_int], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_int_list Test_arg_check.test_validate_arg_int_list], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_int_list_rank2 Test_arg_check.test_validate_arg_int_list_rank2], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_int_or_int_list Test_arg_check.test_validate_arg_int_or_int_list], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_list Test_arg_check.test_validate_arg_list], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_list_or_numpy_array Test_arg_check.test_validate_arg_list_or_numpy_array], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number Test_arg_check.test_validate_arg_number], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_array_rank1 Test_arg_check.test_validate_arg_number_array_rank1], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_array_rank2 Test_arg_check.test_validate_arg_number_array_rank2], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_array_rank3 Test_arg_check.test_validate_arg_number_array_rank3], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_list Test_arg_check.test_validate_arg_number_list], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_list_rank2 Test_arg_check.test_validate_arg_number_list_rank2], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_list_rank3 Test_arg_check.test_validate_arg_number_list_rank3], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_numpy_array_rank1 Test_arg_check.test_validate_arg_number_numpy_array_rank1], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_numpy_array_rank2 Test_arg_check.test_validate_arg_number_numpy_array_rank2], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_numpy_array_rank3 Test_arg_check.test_validate_arg_number_numpy_array_rank3], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_or_number_tuple Test_arg_check.test_validate_arg_number_or_number_tuple], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_tuple Test_arg_check.test_validate_arg_number_tuple], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_tuple_rank2 Test_arg_check.test_validate_arg_number_tuple_rank2], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_number_tuple_rank3 Test_arg_check.test_validate_arg_number_tuple_rank3], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_numpy_float_array Test_arg_check.test_validate_arg_numpy_float_array], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_numpy_float_matrix Test_arg_check.test_validate_arg_numpy_float_matrix], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_numpy_float_rank3 Test_arg_check.test_validate_arg_numpy_float_rank3], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_numpy_int_array Test_arg_check.test_validate_arg_numpy_int_array], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_numpy_int_matrix Test_arg_check.test_validate_arg_numpy_int_matrix], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_numpy_int_rank3 Test_arg_check.test_validate_arg_numpy_int_rank3], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_str Test_arg_check.test_validate_arg_str], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_str_list Test_arg_check.test_validate_arg_str_list], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_str_list_rank2 Test_arg_check.test_validate_arg_str_list_rank2], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_str_or_file_object Test_arg_check.test_validate_arg_str_or_file_object], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_str_or_str_list Test_arg_check.test_validate_arg_str_or_str_list], [http://www.nmr-relax.com/api/4.1/test_suite.unit_tests._lib.test_arg_check.Test_arg_check-class.html#test_validate_arg_tuple Test_arg_check.test_validate_arg_tuple].
* [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module]: Fixes for handling empty numpy arrays. This is for the [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#is_float_array is_float_array()] and [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#is_float_matrix is_float_matrix()] functions.
* [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module]: Removal of the <code>is_list_val_or_list_of_list_val() </code> function. This was never completely implemented, and was only used by the '<code>point' </code> argument of the [http://www.nmr-relax.com/manual/dx_map.html dx.map user function]. The user function py_type <code>"list_val_or_list_of_list_val" </code> value has been renamed to <code>'num_list_or_num_list_of_lists' </code> and the call to <code>is_list_val_or_list_of_list_val() </code> replaced by a call to [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#validate_arg validate_arg()]. The '<code>dim' </code> argument for the '<code>point' </code> argument of the [http://www.nmr-relax.com/manual/dx_map.html dx.map user function] has been modified to match the validate_arg() function syntax.* User function definition redesign, increasing the argument setting flexibility. The '<code>py_type' </code> argument definition has been replaced by '<code>basic_types'</code>, '<code>container_types'</code>, and sometimes '<code>dim'</code>. This matches the new [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#validate_arg validate_arg() function] in the [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module] and allows for far greater flexibility in defining a parameter together with more extensive parameter checking than previously possible.
* [http://www.nmr-relax.com/api/4.1/specific_analyses.consistency_tests.api-module.html specific_analyses.consistency_tests.api module]: Missing RelaxWarning import.
* User function definitions: Support for checking file lists (from <code>arg_type='file sel multi'</code>). The new [http://www.nmr-relax.com/api/4.1/lib.errors.RelaxStrFileListStrFileError-class.html RelaxStrFileListStrFileError object] has been created for this check (and the [http://www.nmr-relax.com/api/4.1/lib.errors.RelaxStrListError-class.html RelaxStrListError] also added for completeness).* User function definitions: Overrides for arguments with '<code>arg_type' </code> set. The '<code>arg_type' </code> argument is now fully documented in the [http://www.nmr-relax.com/api/4.1/user_functions.objects-module.html user_functions.objects module] [http://www.nmr-relax.com/api/4.1/user_functions.objects.Uf_container-class.html#add_keyarg Uf_container.add_keyarg() function docstring]. The value is now checked, and a few unimplemented values have been eliminated. Overrides for the '<code>dim'</code>, '<code>basic_types'</code>, and '<code>container_types' </code> are now set for almost all arguments with '<code>arg_type' </code> set. And checks that these are not set in the user function definition have been added.
* [http://www.nmr-relax.com/manual/system_cd.html system.cd user function]: Removal of the incorrect wiz_filesel_style argument in the definition.
* User function definitions: Split of the <code>'file sel' </code> arg_type value into readable and writable. The arg_type value is now either <code>'file sel read' </code> or <code>'file sel write'</code>. The <code>'file sel multi' </code> value has also been split into <code>'file sel multi read' </code> and <code>'file sel multi write'</code>. This is used for checking if file objects supplied to the user function are correctly readable or writable. And it is used in the GUI to automatically set the file selection dialog style. Hence the redundant '<code>wiz_filesel_style' </code> argument has been removed from the user function definitions. The [http://www.nmr-relax.com/api/4.1/lib.check_types-module.html#is_filetype_readable is_filetype_readable()], [http://www.nmr-relax.com/api/4.1/lib.check_types-module.html#is_filetype_rw is_filetype_rw()], and [http://www.nmr-relax.com/api/4.1/lib.check_types-module.html#is_filetype_writable is_filetype_writable()] functions have been added to the lib.check_types module to check the file objects from within the [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html lib.arg_check module] [http://www.nmr-relax.com/api/4.1/lib.arg_check-module.html#validate_arg validate_arg() function].* Test suite: Zero times reported on MS Windows with <code>--time </code> no longer have a negative sign.* <code>python_seek.py </code> development script: Added _tkinter to the '<code>all' </code> list for checking the Python install.* Test suite: Unit test times displayed with <code>--time </code> are now in milliseconds.* Python <code>tempfile.mktemp()</code>: Converted all usage of the function to <code>tempfile.mkstemp()</code>. The <code>tempfile.mktemp() </code> function was depreciated in Python 2.3. According to the Python documentation: "A historical way to create temporary files was to first generate a file name with the mktemp() function and then create a file using this name. Unfortunately this is not secure, because a different process may create a file with this name in the time between the call to mktemp() and the subsequent attempt to create the file by the first process. The solution is to combine the two steps and create the file immediately. This approach is used by mkstemp() and the other functions described above.". The Travis CI testing system was sometimes failing on files created with <code>mktemp()</code>, so hopefully <code>mkstemp() </code> will alleviate the issue.
<section end=changes/>
* Bug fix for the [http://www.nmr-relax.com/manual/pcs_structural_noise.html pcs.structural_noise user function]. The user function now uses a real multivariate normal distribution for sampling atomic positions. The previous random unit vector + univariate Gaussian sampling does not correctly reproduce the multivariate normal distribution.
* Python 3 bugfix for the [http://www.nmr-relax.com/api/4.1/test_suite.system_tests.relax_disp.Relax_disp-class.html#test_bug_24601_r2eff_missing_data Relax_disp.test_bug_24601_r2eff_missing_data system test]. Tab characters rather than spaces made the system test script unloadable in Python 3.
* Python 3 fixes for the [http://www.nmr-relax.com/api/4.1/gui.misc-module.html gui.misc module]. This is for text formatting using the <code>"x"*num </code> logic. In Python 3, <code>num </code> is often a float so this does not work and an explicit <code>int() </code> function call is required.
* Python 3 fix for the combo list sequence elements. Comparison of integers to values of None are not allowed.
* Bug fix for "<code>Tools→System information" </code> GUI menu item. The user function has been renamed from sys_info to [http://www.nmr-relax.com/manual/system_sys_info.html system.sys_info]. * Python &ge; 3.4 fix by removing an unused <code>types.ListType </code> import.
* Bug fix allowing for spaces in file paths in the [http://www.nmr-relax.com/api/4.1/gui.misc-module.html#open_file GUI open_file() function]. This used by the file preview buttons and the results viewer window.
* Minor fixes for the relaxation curve-fitting sample script.
* Another small fix for trp indole 15N spins in the relaxation curve-fitting sample script.
* Fix for the [http://www.nmr-relax.com/api/4.1/auto_analyses.relax_fit-module.html relaxation curve-fitting auto-analysis] for when the data pipe name is incorrect. This was simply a missing import.
* Bug fix for the relaxation dispersion GUI analysis when specifying replicated spectra. This is for the Attribute error when the replicated spectra are specified via the spectrum list GUI element rather than the peak intensity loading wizard. The [http://www.nmr-relax.com/api/4.1/test_suite.gui_tests.relax_disp.Relax_disp-class.html#test_bug_missing_replicates GUI test Relax_disp.test_bug_missing_replicates ] now passes.
* Bug fix by redesigning the GUI pipe editor pop up menu. The menu now uses IDs to associate menu items with the correct method to call. Previously all menu entries were calling the method of the last menu entry, which was in most cases the pipe switching method. As the pipe deletion method is now properly exposed, the Question dialog was increased in size to be able to see all the text.
* MS Windows fixes for running relax from git and git-svn repositories. Multiple commands on MS Windows need to be separated by "<code>&&" </code> and not "<code>;"</code>.* Bug fix: Removal of <code>'\u' </code> escape sequences from the <code>latex_mf_table.py </code> test suite script docstring. This fixes [https://sourceforge.net/p/nmr-relax/tickets/1/ Bug #1] reported on the new SourceForge infrastructure, and allows the script to be used with Python 3.
* Bug fix for the model number tracking with the addition of new models. If a single model is present without a model number, this is now correctly renumbered.
<section end=bugfixes/>
Trusted, Bureaucrats
4,228

edits