* Preliminary work on XTC reporter
1. Move and adapt xtc writer/reader from moleculekit (explicit permission
granted by the authors to do so)
2. Create XTCTrajectoryFile
3. Create XTCReporter
* Add licence and attribution to c++ xtc library
Apply clang-format to it
Remove some unused functions and document the rest
* Add attribution and licence to cython wrappers for the xtc library
Remove some unused functions
* Change XTCTrajectoryFile to XTCFile
Simplify the interface and document the class
* Add test for the xtc file parser
* Update XTC reporter with new parser name
* Fix incorrect function name in XTCReporter
* XTCFile:
* Add function to get number of frames
* Add function to read a group of frames from a file
* Add tests for the above
* Ensure data is passed as float32 in XTC file
* Add XTCReporter and tests
* Add more tests to XTCReporter
* Remove unnecessary pdb reporter in XTC tests
* Copy test xtc file in python/tests/systems to build directory for testing
* Remove XTC file reading from the interface
Make XTCFile mimic DCDFile more closely
* Use xtc_read to test the correctness of the XTC reporter
* Add a test for reporting triclinic boxes
* Make XTC library compatible with triclinic boxes.
Adapt XTCFile to triclinic boxes
* Change XTCFile to take a file as argument instead of a filename
* Match DCDFile handling of the box
* Fix comment
* Revert "Change XTCFile to take a file as argument instead of a filename"
This reverts commit 9815d4790b.
* Fix dangling file name issue
* Remove index file functionality from XTC parser.
Remove unused define switch PLATFORM_Linux
* Fix formatting
* Remove inconsistent variable naming in xtcfile.py
* Change file argument name to match other reporters
* Do not turn off error checking in cython wrappers
* Fix leftover fileName in reporter
* Rewrite wrapper to xtclib in C++
* Small changes to wrapper code
* Small changes to wrapper code
* Small changes to wrapper code
* XTCFile: Get number of atoms directly from topology
* DCDFile: Get number of atoms directly from topology
* Change constexpr to const
* Check precision in XTC file matches the written one
* Add a write function to XTCFrame.
Make write check for errors C++ side.
* Rewrite large trajectory files without loading the whole file to memory
* Remove unused code in XTC test
* Avoid spurious copy of the positions array when calling xtc_write_frame
* Pass box as reference
* Remove unnecessary imports and definitions
* Fix formatting
* Use std::string instead of char*
* Use .c_str() instead of .data()
* Fix crash in Mac by correctly checking precision
* Use TemporaryDirectory for tests instead of NamedTemporaryFile (Fixes windows ci)
* Remove unnecessary file creation
* Propagate exceptions via cython
* Switch to TemporaryDirectory in xtcfile.py
* Remove unnecessary include
* Update some comments and document functions
* Add XTC reporter to the docs
* Created OBC2 that works with current force fields
* Created HCT, OBC1, GBn, and GBn2 that works with current force fields
* Added documentation for GB models
* Updates to documentation and tests based on comments
* Added formula for screening parameter
* Top level Python module is now "openmm"
* Updated module names in examples
* Updated module names in documentation
* Updated module in CI scripts
* Added deprecation warning
* Initial fixes for Apple silicon
Doesn't work yet
* assume vec4 is supported on apple
* Trust the user with env variables
* Fix macos-version-min logic
* Use list-comprehension in Python code
A minor change, but slighly easier to understand the initialization of
`parent_exclude_list` in my opinion.
* Implement __ne__ in Python classes that has __eq__
In Python 3, `__ne__` is automatically implemented as `not __eq__`.
However, in Python 2 it seems to be implemented as `not is` (so based on object
identity).
Based on setup.py [0] which says that "OpenMM requires Python 2.7 or better", it
should be useful to have better support for Python 2 :)
This was already done in 4 of the 12 classes that implements `__eq__`
```
>>> class WildCard(object):
... def __eq__(self, other): return True
>>> w = WildCard()
>>> w == 42
True
>>> w != 42
True
>>> w != w
False
```
[0]: 5cef29ce8d/wrappers/python/setup.py (L237)
* Use umambiguous floor division for index calculations in Python
This makes the code work as intended if run as Python 3
```
$ python2 -c 'print(3/2, 3//2)'
(1, 1)
$ python3 -c 'print(3/2, 3//2)'
1.5 1
```
* Use `with` for file handling in Python
* Use `is None` instead of `== None` in Python
This is recommended in PEP8:
> Comparisons to singletons like None should always be done with is or is not, never the equality operators.
> - https://www.python.org/dev/peps/pep-0008/#programming-recommendations
- Make Python 2.7 a minimum requirement per pandegroup/openmm#1656
- Make the bond classes as well as other forcefield.py singletons inherit from
Singleton to make them pickleable
- Make class Bond inherit from namedtuple instead of tuple
Hard-code CC and CXX to clang for Macs, since gcc/g++ will *not* work with
Anaconda, despite the fact that distutils will try to use them. System Python,
homebrew, and MacPorts on Macs will always use clang, so this hack should always
work and fix issues with users that have GCC installed from MacPorts or homebrew
*and* Anaconda.