The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- New continuous coordination number compute
freud.order.ContinuousCoordination
. - New methods for conversion of box lengths and angles to/from
freud.box.Box
. - Add copy button to documentation code snippets.
- Support Numpy 2.0.
- Default value for
terminate_after_blocked
inFilterRAD
.
freud.order.Translational
.- Support for Python 3.8.
- Coloring plots by polytope area in
freud.locality.Voronoi
. - Neighbor vectors to
freud.locality.NeighborList
s.
- The
normalize
argument tofreud.density.RDF
is nownormalization_mode
. - The
neighbors
argument toenv_neighbors
forEnvironmentMotifMatch
class. - The
neighbors
argument tocluster_neighbors
forEnvironmentCluster
class. freud.order.Nematic
uses orientation vectors instead of quaternions and a nematic director.freud.order.Nematic
raises a warning when the zero is vector passed.- Remove zero-padding from arrays in
freud.environment.EnvironmentCluster
andfreud.environment.EnvironmentMotifMatch
and replace with ragged lists of NumPy arrays. - Provide support via GitHub discussions.
- The
global_search
flag infreud.environment.EnvironmentCluster
.
- Support for python 3.12
- Support for python 3.7
- The
gsd.hoomd.Frame
class is supported as a system-like input.
- Require building with cython>=3.0.2
- Filter neighborlists with
freud.locality.FilterSANN
andfreud.locality.FilterRAD
.
- Neighborlists generated by certain compute objects now exist after the compute object is garbage collected.
- All source files have the freud license header at the top.
- The
compute()
method of each compute object returns self.
- Documentation renders with the furo theme.
- Support for Python 3.6
- Support for Python 3.11.
- n(r) property in
freud.density.RDF
is now properly normalized by the number of query points.
- Mass dependence in
freud.cluster.ClusterProperties
. - Inertia tensor calculation in
freud.cluster.ClusterProperties
.
- Compatibility with new namespace for
MDAnalysis.coordinates.timestep.Timestep
.
- Support for 2D systems in
freud.diffraction.StaticStructureFactorDebye
. - Compilation uses the C++17 standard.
EnvironmentMotifMatch
correctly handlesNeighborList
s with more neighbors per particle than the motif.
include_input_points
argument tofreud.locality.PeriodicBuffer
.macos-arm64
binary builds on conda-forge and PyPI.
freud.data.UnitCell.generate_system
now generates positions in the same order as the basis positions.
- (breaking) Some
freud.diffraction.StaticStructureFactorDebye
property names changed to be more descriptive. freud.diffraction.DiffractionPattern
now raises an exception when used with non-cubic boxes.
freud.diffraction.StaticStructureFactorDebye
implementation now givesS_k[0] = N
.- Cython is no longer listed as an install requirement in
setup.py
.
- Custom CMake build type
ReleaseWithDocs
.
freud.diffraction.StaticStructureFactorDirect
class (unstable) can be used to compute the static structure factor S(k) by sampling reciprocal space vectors.- Python 3.10 is supported.
- Documentation examples are tested with pytest.
- Use clang-format as pre-commit hook.
- Add related tools section to the documentation.
freud.diffraction.DiffractionPattern
normalization changed such thatS(k=0) = N
.- Added error checking for
r_min
,r_max
arguments infreud.density.RDF
,freud.locality.NeighborList
,freud.locality.NeighborQuery
, andfreud.density.LocalDensity
classes. - CMake build system only uses references to TBB target.
- Re-organized tests for the static structure factor classes.
- Move
util::Histogram<T>::Axes
toutil::Axes
. - Use new
flake8
pluginflake8-force
for linting Cython code.
freud.diffraction.StaticStructureFactorDebye
class (unstable) can be used to compute the static structure factor S(k) using the Debye formula.
- Updated lambda functions to capture
this
by reference, to ensure compatibility with C++20 and above. - Fixed
Box.contains
to run in linear time,O(num_points)
. - Fixed compilation to pass compiler optimization flags when build type is ReleaseWithDocs (major perf regression since 2.4.1).
- Upgrade to auditwheel 4.0.0 in cibuildwheel to ensure RPATH is patched properly for
libfreud.so
in Linux wheels.
- Added missing git submodules to source distribution.
- Added
out
option for thewrap
,unwrap
,make_absolute
, andmake_fractional
methods ofBox
. - The
Steinhardt
andSolidLiquid
classes expose the rawqlmi
arrays. - The
Steinhardt
class supports computing order parameters for multiplel
.
- Improvements to plotting for the
DiffractionPattern
. - Wheels are now built with cibuildwheel.
- Fixed/Improved the
k
values and vectors in theDiffractionPattern
(more improvement needed). - Fixed incorrect computation of
Steinhardt
averaged quantities. Affects all previous versions of freud 2. - Fixed documented formulas for
Steinhardt
class. - Fixed broken arXiv links in bibliography.
- The
compute
method ofDiffractionPattern
class has areset
argument.
- Documentation on ReadTheDocs builds and renders.
- NeighborList
filter
method has been optimized. - TBB 2021 is now supported (removed use of deprecated TBB features).
- Added new pre-commit hooks for
black
,isort
, andpyupgrade
. - Testing framework now uses
pytest
.
- Python 3.8 builds with Windows MSVC were broken due to an unrecognized CMake compiler option.
- Fixed broken documentation by overriding scikit-build options.
- RPATH on Linux is now set correctly to find TBB libraries not on the global search path.
- 2D box image calculations now return zero for the image z value.
- Fixed wrong attribute name in
EnvironmentCluster.plot
.
- The Box class has a method
contains
to determine particle membership in a box. - NeighborList class exposes
num_points
andnum_query_points
attributes. compute
method ofGaussianDensity
class has avalues
argument.- Support for pre-commit hooks.
- Python 3.9 is supported.
- NeighborList raises a
ValueError
instead of aRuntimeError
if provided invalid constructor arguments. - freud now builds using scikit-build (requires CMake).
freud.order.Translational
- Source distributions now include Cython source files.
- Hexatic order parameter (unweighted) normalizes by number of neighbors instead of the symmetry order k.
- Particles with an i-j normal vector of [0, 0, 0] are excluded from 2D Voronoi NeighborList computations for numerical stability reasons.
- Memory leak in
makeDefaultNlist
function where a NeighborList was being allocated and not freed.
- Support for garnett 0.7.
- Custom NeighborLists can be created from a set of points using
from_points
. Distances will be calculated automatically. - The Box class has methods
compute_distances
andcompute_all_distances
to calculate distances between arrays of points and query points. - Hexatic can now compute 2D Minkowski Structure Metrics, using
weighted=True
along with a Voronoi NeighborList. - Examples have been added to the Cluster, Density, Environment, and Order Modules.
- Module examples have been integrated with doctests to ensure they are up to date with API.
- SphereVoxelization class in the
density
module computes a grid of voxels occupied by spheres. freud.diffraction.DiffractionPattern
class (unstable) can be used to compute 2D diffraction patterns.
- Cython is now a required dependency (not optional). Cythonized
.cpp
files have been removed. - An instance of GaussianDensity cannot compute 3D systems if it has been previously computed 2D systems.
- Histogram bin locations are computed in a more numerically stable way.
- Improved error handling of Cubatic input parameters.
- PMFTs are now properly normalized such that the pair correlation function tends to unity for an ideal gas.
- PMFTXYT uses the correct orientations when
points
andquery_points
differ. - GaussianDensity Gaussian normalization in 2D systems has been corrected.
- Python 3.5 is no longer supported. Python 3.6+ is required.
- NeighborQuery objects can now create NeighborLists with neighbors sorted by bond distance.
- LocalDescriptors
compute
takes an optional maximum number of neighbors to compute for each particle.
- Corrected calculation of neighbor distances in the Voronoi NeighborList.
- Added finite tolerance to ensure stability of 2D Voronoi NeighborList computations.
- The Box class has methods
center_of_mass
andcenter
for periodic-aware center of mass and shifting points to center on the origin.
- The make_random_box system method no longer overwrites the NumPy global random number generator state.
- The face_orientations argument of PMFTXYZ has been renamed to equiv_orientations and must be provided as an Mx4 array, where M is the number of symmetrically equivalent particle orientations.
- Improved documentation about query modes.
- The Voronoi class uses smarter heuristics for its voro++ block sizes, resulting in significant performance gains for large systems.
- The from_box method correctly passes user provided dimensions to from_matrix it if is called.
- Correctly recognize Ovito DataCollection objects in from_system.
- Corrected
ClusterProperties
calculation of centers of mass in specific systems. - Set z positions to 0 for 2D GSD systems in from_system.
- PMFTXY and PMFTXYZ index into query orientations using the query point index instead of the point index.
- Rewrote development documentation to match the conventions and logic in version 2.0 of the code.
- Automatic conversion of 2D systems from various data sources.
- Mybinder deployment works with freud v2.0.
- Minor errors in freud-examples have been corrected.
- Ability to specify "system-like" objects that contain a box and set of points for most computes.
- NeighborLists and query arguments are now accepted on equal footing by compute methods that involve neighbor finding via the
neighbors=...
argument. - Extensive new documentation including tutorial for new users and reference sections on crucial topics.
- Standard method for preprocessing arguments of pair computations.
- New internal ManagedArray object that allows data persistence and improves indexing in C++.
- Internal threaded storage uses the standard ManagedArray object.
- C++ Histogram class to standardize n-dimensional binning and simplify writing new methods.
- Upper bound r_max option for number of neighbors queries.
- Lower bound r_min option for all queries.
- Steinhardt now supports l = 0, 1.
- C++ BondHistogramCompute class encapsulates logic of histogram-based methods.
- 2D PMFTs accept quaternions as well as angles for their orientations.
- ClusterProperties computes radius of gyration from the gyration tensor for each cluster.
freud.data
module for generating example particle systems.- Optional normalization for RDF, useful for small systems.
plot()
methods forNeighborQuery
andBox
objects.- Added support for reading system data directly from MDAnalysis, garnett, gsd, HOOMD-blue, and OVITO.
- Various validation tests.
- All compute objects that perform neighbor computations now use NeighborQuery internally.
- Neighbor-based compute methods now accept NeighborQuery (or "system-like") objects as the first argument.
- All compute objects that perform neighbor computations now loop over NeighborBond objects.
- Renamed (ref_points, points) to (points, query_points) to clarify their usage.
- Bond vector directionality is standardized for all computes that use it (always from query_point to point).
- Standardized naming of various common parameters across freud such as the search distance r_max.
- Accumulation is now performed with
compute(..., reset=False)
. - Arrays returned to Python persist even after the compute object is destroyed or resizes its arrays.
- All class attributes are stored in the C++ members and accessed via getters wrapped as Python properties.
- Code in the freud.common has been moved to freud.util.
- NeighborQuery objects require z == 0 for all points if the box is 2D.
- Renamed several Box methods, box.ParticleBuffer is now locality.PeriodicBuffer.
- Cluster now finds connected components of the neighbor graph (the cluster cutoff distance is given through query arguments).
- Refactored and renamed attributes of Cluster and ClusterProperties modules.
- CorrelationFunction of complex inputs performs the necessary conjugation of the values before computing.
- Updated GaussianDensity constructor to accept tuples as width instead of having 2 distinct signatures.
- RDF bin centers are now strictly at the center of bins.
- RDF no longer performs parallel accumulation of cumulative counts (provided no performance gains and was substantially more complex code).
- MatchEnv has been split into separate classes for the different types of computations it is capable of performing, and these classes all use v2.0-style APIs.
- The Voronoi class was rewritten to use voro++ for vastly improved performance and correctness in edge cases.
- Improved Voronoi plotting code.
- Cubatic uses standard library random functions instead of Saru (which has been removed from the repo).
- APIs for several order parameters have been standardized.
- SolidLiquid order parameter has been completely rewritten, fixing several bugs and simplifying its C++ code.
- Steinhardt uses query arguments.
- PMFTXY2D has been renamed to PMFTXY.
- Removed unused orientations from PMFTXYZ and PMFTXY.
- PMFTXY and PMFTXYZ include the phase space volume of coordinates that are implicitly integrated out (one angle in PMFTXY, and three angles in PMFTXYZ).
- Documentation uses automodule instead of autoclass.
- Citations are now included using bibtex and sphinxcontrib-bibtex.
- Removed all neighbor exclusion logic from all classes, depends entirely on locality module now.
- Compute classes requiring 2D systems check the dimensionality of their input boxes.
- LinkCell nearest neighbor queries properly check the largest distance found before proceeding to next shell.
- LocalDensity uses the correct number of points/query points.
- RDF no longer forces the first bin of the PCF and first two bins of the cumulative counts to be 0.
- Steinhardt uses the ThreadStorage class and properly resets memory where needed.
- The freud.util module.
- Python 2 is no longer supported. Python 3.5+ is required.
- LinkCell no longer exposes the internals of the cell list data structure.
- Cubatic no longer returns the per-particle tensor or the constant r4 tensor.
- LocalWl return values are real instead of complex.
- Fixed missing Condon-Shortley phase affecting LocalWl and Steinhardt Wl computations. This missing factor of -1 caused results for third-order (Wl) Steinhardt order parameters to be incorrect, shown by their lack of rotational invariance. This problem was introduced in v0.5.0.
- Reduced various compiler warnings.
- Possible out of bounds LinkCell access.
- RDF plots now use the provided
ax
object.
- Optimized performance for
RotationalAutocorrelation
. - Added new tests for cases with two different sets of points.
- Fixed bug resulting in the
LocalQlNear
andLocalWlNear
class wrongly using a hard instead of a soft cut-off, which may have resulted in an incorrect number of neighbors. This would cause incorrect results especially for systems with an average n-th nearest-neighbor distance smaller thanrmax
. This problem was introduced in v0.6.4. - Fixed duplicate neighbors found by
LinkCell
NeighborQuery
methods - Corrected data in
LocalQl
,LocalWl
documentation example - Repeated Cubatic Order Parameter computations use the correct number of replicates.
- Repeated calls to
LocalQl.computeNorm
properly reset the underlying data. - Clarified documentation for
LocalBondProjection
andMSD
- Added
.plot()
method and IPython/Jupyter PNG representations for many classes. AttributeError
is raised when one tries to access an attribute that has not yet been computed.- Added
freud.parallel.getNumThreads()
method. - New examples for integration with simulation and visualization workflows.
- Removed extra C++ includes to speed up builds.
- The C++ style is now based on clang-format.
- Refactored C++ handling of thread-local storage.
- SolLiq order parameter computations are parallelized with TBB.
- Optimized performance of Voronoi.
- Several Box properties are now given as NumPy arrays instead of tuples.
- Box methods handling multiple vectors are parallelized with TBB.
- Eigen is now used for all matrix diagonalizations.
- Calling setNumThreads works correctly even if a parallel compute method has already been called.
- Fixed segfault with chained calls to NeighborQuery API.
- Correct
exclude_ii
logic.
- Removed outdated
computeNList
function fromLocalDescriptors
.
- New neighbor querying API to enable reuse of query data structures (see NeighborQuery class).
- AABBQuery (AABB tree-based neighbor finding) added to public API.
- Ability to dynamically select query method based on struct of arguments.
- All compute objects have
__repr__
and__str__
methods defined. - NeighborLists can be accessed as arrays of particle indices via
__getitem__
. - ParticleBuffer supports different buffer sizes in x, y, z.
- Box makeCoordinates, makeFraction, getImage now support 2D arrays with multiple points.
- Use constant memoryviews to prevent errors with read-only inputs.
- LocalQl is now parallelized with TBB.
- Optimized performance of RotationalAutocorrelation.
- NematicOrderParameter uses SelfAdjointEigenSolver for improved stability.
- Added build flags for Cython debugging.
- LinkCell computes cell neighbors on-demand and caches the results for significant speedup.
- Corrected type of
y_max
argument to PMFTXY2D from int to float. - Reduce logging verbosity about array conversion.
- Fixed number of threads set upon exiting the NumThreads context manager.
- Corrected quaternion array sizes and added missing defaults in the documentation.
- Empty ParticleBuffers return valid array shapes for concatenation.
- Wheels are built against NumPy 1.10 for improved backwards compatibility.
- Freshly updated README and documentation homepage.
- Moved to GitHub.
- New msd.MSD class for computing mean-squared displacements.
- New order.RotationalAutocorrelation class.
- Cython memoryviews are now used to convert between C++ and Cython.
- New and improved freud logo.
- Internal-only AABB tree (faster for many large systems, but API is unstable).
- Improved module documentation, especially for PMFT.
- Refactored internals of LocalQl and related classes.
- Upgraded ReadTheDocs configuration.
- Improved CubaticOrderParameter handling of unusable seeds.
- Fixed box error in NearestNeighbors.
- All long-deprecated methods and classes were removed.
- Bond module removed.
- Builds are now tested on Windows via Appveyor, though officially unsupported.
- Multiple user-reported issues in setup.py were resolved.
- C++ errors are handled more cleanly as Python exceptions.
- Fixed bug in SolLiq box parameters.
- Documentation corrected for NeighborList.
- Various minor compiler errors on Windows were resolved.
- Linux wheels are now pushed to the real PyPI server instead of the test server.
- macOS deployment pyenv requires patch versions to be specified.
- Error in Python versions in macOS automatic deployment.
- PyPI builds automatically deploy for Mac and Linux.
- macOS deployment target is now 10.12 instead of 10.9 to ensure TBB compatibility.
- Unwrapping positions with images is now vectorized.
- Minor documentation fixes.
- TBB includes were not always detected correctly by setup.py.
- Example notebooks are now shown in the documentation.
- Many unit tests were added.
- New class:
freud.environment.LocalBondProjection
. freud
is now available on the Python Package Index (PyPI) asfreud-analysis
.
- Documentation was revised for several modules.
- New class
freud.box.ParticleBuffer
was adapted from the previousVoronoiBuffer
to include support for triclinic boxes. - The
bond
andpmft
modules verify system dimensionality matches the coordinate system used. - Minor optimization: arrays are reduced across threads only when necessary.
- NumPy arrays of lengths 2, 3, 6 are now correctly ducktyped into boxes.
- Removed internal use of deprecated code.
- C++ code using
uint
has been changed tounsigned int
, to improve compiler compatibility.
- In
freud.locality.LinkCell
,computeCellList()
has been replaced bycompute()
.
- The
kspace
module has been removed.
- Codecov to track test coverage.
- Properties were added to MatchEnv, AngularSeparation, Cubatic/Nematic order parameters, Voronoi.
- freud uses Cython and setup.py instead of CMake for installation.
- Properties (not get functions) are the official way to access computed results.
- Interface module has been improved significantly.
- density.FloatCF, density.ComplexCF, order parameter documentation is improved.
- Many compute methods now use points, orientations from ref_points, ref_orientations if not provided.
- Reset methods have been renamed to
reset
.
kspace
module had a missing factor of pi in the volume calculation ofFTsphere
.
- Get functions have been deprecated.
- Setter methods have been deprecated.
- Reduce methods are called internally, so the user-facing methods have been deprecated.
- GaussianDensity.resetDensity() is called internally.
- Allow specification of rmin for LocalWl (previously was only possible for LocalQl).
- New environment module. Contains classes split from the order module.
- Box duck-typing: methods accepting a box argument will convert box-like objects into freud.box.Box objects.
- All Python/Cython code is now validated with flake8 during continuous integration.
- Refactoring of LocalQl and LocalWl Steinhardt order parameters.
- MatchEnv uses BiMap instead of boost::bimap.
- All boost shared_arrays have been replaced with std::shared_ptr.
- Replaced boost geometry with standard containers in brute force registration code.
- NearestNeighbors automatically uses ref_points as the points if points are not provided.
- Box::unwrap and Box::wrap return the vectors after updating.
- Everything other than true order parameters moved from Order module to Environment module.
- Use lambda function in parallel_for in CorrelationFunction.
- Tests no longer depend on nose. Python's unittest is used instead.
- Vastly improved documentation clarity and correctness across all modules.
- Docstrings are now in Google format. The developer guide offers guidance for module authors.
- Fixed LocalDescriptors producing NaN's in some cases.
- Fixed cython passing C++ the default argument force_resize to NeighborList::resize.
- Standardize freud.common.convert_array error message.
- Boost is no longer needed to build or run freud.
- Removed undocumented shapesplit module.
- Removed extra argument from TransOrderParam in C++.
- Allow specification of maximum number of neighbors to use when computing LocalDescriptors
- Using the default neighbor list with LocalDescriptors requires specifying the precompute argument
- Updated and improved tests
- Cleaned AngularSeparation module and documentation
- Memory issue in nlist resolved
- Voronoi neighborlist now includes periodic neighbors
- Voronoi neighborlist computes weight according to the facet area in 3D
- Box module exposes
getImage(vec)
- Voronoi module can compute and return cell volumes/areas
- Cluster module supports box argument in compute methods.
- Refactored C++ code to reduce extraneous #includes
- Refactored PMFT code
- Refactored box module to remove unused methods
- Resolved bug in
kspace.AnalyzeSFactor3D
- Box module
getCoordinates()
in favor of duplicatebox.makeCoordinates()
- Removed deprecated API for ComplexWRDF and FloatWRDF
- Added nematic order parameter
- Added optional rmin argument to density.RDF
- Added credits file
- Wrote development guide
- Added Python interface for box periodicity
- Various bug fixes and code cleaning
- Fixed all compile-time warnings
- Ensured PEP 8 compliance everywhere
- Minimized boost dependence
- Many documentation rewrites
- Wrote development guide
- Made tests deterministic (seeded RNGs)
- Removed deprecated Box API warnings
- Standardized numpy usage
- Added a generic neighbor list interface
- Set up CircleCI for continuous integration
- Set up documentation on ReadTheDocs
- Added bumpversion support
- Various bug fixes
- Added python-style properties for accessing data
- Fixed issues with voronoi neighbor list
- trajectory module removed
- box constructor API updated
- PMFTXYZ API updated to take in more quaternions for
face_orientations
, or have a sensible default value - NearestNeighbors:
- over-expanding box fixed
- strict rmax mode added
- ability to get wrapped vectors added
- minor updates to C-API to return full lists from C
- Addition of Bonding modules
- Addition of local environment matching
- Replace boost::shared_array with std::shared_ptr (C++ 11)
- Moved all tbb template classes to lambda expressions
- Moved trajectory.Box to box.Box
- trajectory is deprecated
- Fixed Bond Order Diagram and allow for global, local, or orientation correlation
- Added python-level voronoi calculation
- Fixed issues with compiling on OS X, including against conda python installs
- Added code to compute bonds between particles in various coordinate systems
- PMFT: Fixed issue involving binning of angles correctly
- PMFT: Fixed issue in R12 which prevented compute/accumulate from being called with non-flattened arrays
- PMFT: Updated xyz api to allow simpler symmetric orientations to be supplied
- PMFT: Updated pmftXY2D api
- PMFT: Histograms are properly normalized, allowing for comparison between systems without needing to "zero" the system
- fsph: Added library to calculate spherical harmonics via cython
- Local Descriptors: Uses fsph, updates to API
- Parallel: Added default behavior to setNumThreads and added context manager
- Add compiler flags for C++11 features
- Added Saru RNG (specifically for Cubatic Order Parameter, available to all)
- Cubatic Order Parameter
- Rank 4 tensor struct
- Environment Matching/Cluster Environment
- Shape aware fourier transform for structure factor calculation
- Added deprecation warnings; use python -W once to check warnings
- Added Change Log
- Moved all documentation in Sphinx; documentation improvements
- C++ wrapping moved from Boost to Cython
- Itercell only available in python 3.x
- PMFT:
- XY
- XYZ with symmetry, API updated
- R, T1, T2
- X, Y, T2
- viz removed (is not compatible with cython)