In the algorithm and analysis submodules, the unit conversions and handling should be transitioned from openmm.unit to pint. However, functions and methods that accept openmm.unit.Quantity objects should retain their type hints (change unit.Quantity to "openmm.unit.Quantity") and unit conversions (change isinstance(data, unit.Quantity) to type(data).__name__ == "Quantity").
In the openmm submodules, no changes are necessary since openmm is a required dependency.
A few to-dos left to complete before the release of MDHelper 1.0.0:
General
(Issue #1) Remove OpenMM dependency from the algorithm and analysis submodules.
(Issue #1) Transition from openmm.unit to pint for unit tracking. Current functions and methods should continue to accept data stored in openmm.unit.Quantity objects for compatibility, but they should be converted to pint.Quantitys or made unitless into floats within the function/method.
(Issue #3) Remove ArrayLike type hints and replace with most reasonable data type (tuple[<type>], list[<type>], or np.ndarray[<type>]).
Ensure consistent API by appending verbs to functions and methods without them.
Write recipe to upload to Conda (specifically the conda-forge channel).
Analysis
Ensure consistency of keys in analysis results objects.
Verify that unwrapping is necessary/implemented correctly in analysis.electrostatics and analysis.transport modules.
Check validity of unwrapping/wrapping in analysis.profile module.
Add time blocking (n_blocks argument) support for all analysis modules that support outputting results as functions of time.
analysis.electrostatics
Implement the DipoleMoment class.
Allow calculations in only specified directions, i.e. axes="xy", in the DipoleMoment class.
analysis.polymer
Verify that the end-to-end distance vector calculation in the EndToEndVector class is correct.
openmm.bond
FENE bonds are weird.
JOSS paper
Prepare manuscript for JOSS.
Update documentation (Getting Started guide, etc.) and add examples.
Update README and contributor guidelines.
Once everything above is done, rename the package to MDCraft.
Slated for 1.0.1:
Add unit test for analysis.electrostatics.DipoleMoment -- use a bulk water system and check if the relative permittivity is close to 78.
Add unit test for analysis.polymer.EndToEndVector -- use a frozen polymer and a random walk polymer to ensure the ACF stays at 1 and decays to 0, respectively.
Add unit test for analysis.polymer.Gyradius -- TBD.
Add unit test for analysis.polymer.SingleChainStructureFactor -- use old "negative chi" results to show correct slopes in the three distinct regimes.
Add unit test for analysis.profile.DensityProfile -- TBD.
Add unit test for analysis.structure.RDF -- use bulk argon system.
Add unit test for analysis.structure.StructureFactor -- use solid lattice to show peaks at relevant wavenumbers.
Add unit test for analysis.structure.IncoherentIntermediateScatteringFunction -- use solid lattice and show invariance of peaks over time.
Add partial calculations to analysis.structure.IncoherentIntermediateScatteringFunction.