Skip to content

Change Log#

2026-07-13#

  • Consolidate file opener for writing.
  • Add a finalize(). Runs once after the trajectory is fully processed.
  • Add the lifetime and lifetime_distribution analyses (#306)
  • Add note that gro file coordinates are discarded with groxtc trajectory types (#305)
  • Consolidation and speed improvements to the subgraph_* analyses
  • Use tokenizer in zmatrix command parameter parsing
  • Raise errors when attempting to divide by zero in zmatrix commands
  • Fix GRO file index looping
  • Better error messages in LAMMPS reader
  • Guard against divide by zero in steinhardt analysis
  • Various documentation fixes
  • Cache the static GRO topology in groxtc trajectories instead of re-parsing it every frame
  • Fetch node coordinates once per frame in the steinhardt analysis
  • Warn when a requested LAMMPS timestep falls between dumped steps
  • Flush the end-of-trajectory message when the trajectory ends
  • Rotate LAMMPS general triclinic atom coordinates into the restricted frame for the minimum image convention
  • Grab coordinates once per frame in steinhardt, rather than once per atom.
  • Consolidate fractional coordinate conversion
  • Cache gro topology in groxtc trajectories for significant speed increase
  • Raise errors when the BOX BOUNDS or ATOMS sections are missing from a LAMMPS trajectory
  • Consolidate 3d vector math, MIC calculations, and lattice parameters
  • Fix max energy bound check in PE_LJ
  • Fix triclinic box periodicity in partially periodic boxes
  • Ensure an input file section has been started before any commands have been added
  • Write a unit placeholder cell instead of NaN in PDB/MOL2 output when the periodic box is absent or partially periodic
  • Set lattice angles of flat dimensions to be 90 degrees
  • Default to collapse when DIRECTED = false is given without a conversion mode, instead of erroring
  • Read the periodic box once per frame in the Z-matrix search rather than re-querying it on every constraint evaluation
  • Batch the node attribute writes in the degree, connected_components, and modularity_optimization analyses
  • Set the angle Z-matrix command's name so it is no longer blank when used as a TOTAL
  • Use attribute vector assignment util more consistently
  • Pass lattice parameters around in a Box struct rather than re-obtaining on the fly
  • Fix transposed values in the label_node_blocks node-count mismatch error message
  • Clarify the DIRECTED error message when more than one conversion mode is supplied
  • Set default lammps data output PBC boundaries to be 0 -> 1

2026-06-11#

  • Update igraph to version 1.0.1 (#299)
  • Fix origin collection in LAMMPS general triclinic boxes.
  • Safer floating point zero box length detection.
  • Fixed minimum value detection in neighbor listing. Only matters if you're doing inv_dist.
  • Removed dead PBC edge attribute setting from graph edge creation. Logic moved to a graph util.
  • Remove spurious double edge creation when using ADD.EDGES.FROM_FILE.
  • Change label_node_block documentation language.
  • Fix MIC distances for boolean wrapped distance calculations.
  • Remove dead GRAPH.ADD.ATRIBUTE.EDGE.EDGE pe_lj.
  • Fix off by one error in modularity optimization.
  • Use MIC util in steinhardt calculation.
  • Properly scale PBCs when PBC.DIM = read
  • Validate Z-matrix reference row existence
  • Avoid crash when writing attribute histogram of empty graph
  • Pass directedness to edge id collector in write_edge_graph
  • Grab correct PBCs in steinhardt analysis
  • Throw an error if negative node indicies are read from .nds or .edg files.
  • Store trajectory file cursor at GRAPH.ADD.NODES.TRAJECTORY level to prevent multiple graph blocks advancing the same cursor erroneously on the same timestep.
  • Allow negative dihedral angles, use IUPAC sign conventions.
  • Initialize coordinate matrix if TOTAL zmatrix command is used.
  • Add MPI execution to input file tutorial
  • Fix edge case in neighborlist results vector
  • Change line tokenizer pre-allocation. Larger size, moved to instantiation.
  • Allocate a single string stream in the zmatrix search.
  • Preallocate vectors in pe_lj and inv_dist
  • Prevent negation of 2-body constraints due to neighbor listing
  • Remove unused singular attribute update/notifiers.
  • Use edge ids instead of node pairs to avoid issues with parallel edges.
  • Remove doubled remark line from PDB file writer
  • Add note on == comparitors in delete_edges/nodes analysis doc
  • Avoid division by zero when PBCs are set to zero, either in 2D trajectories, or when PBCs are disabled in a dimension
  • Add references to igraph docs in analysis commands docs (#303)
  • Add type-aware attr comparisons
  • Prevent ROW = SUM, or other future TOTAL commands from being used in ROW commands
  • Add optional argument to ADD.EDGES/NODES.FROM_FILE that specifies the delimiters used in that file.
  • Add a walkthrough on a GROMACS example
  • Update dev guide IO references to the Utils::IO filename helper and remove the stale Count_Lines_In_File entry.
  • Remove inv_dist Z-matrix constraint from the not/none docs and error message.
  • Add MIC support to dev walkthrough of new zmatrix commands.
  • Remove the single node-attribute updating and unused variables from observers
  • Remove unused variables from the Z-matrix commands, trajectory readers, etc.
  • Persist the trajectory file cursors across timesteps so readers resume from the last read frame instead of skipping the file from the beginning every frame.
  • Use inclusive distance bounds
  • Fix multi-frame gro and multi-frame lammpstrj general triclinic parsing.
  • Validate pe_lj sigma and epsilon are positive. Fix the optional argument parsing
  • Replace in_avail() stream-parsing with LineTokenizer across all input file components
  • Consolidate the numeric/string/boolean attribute type switches into Utils::Graph visitor helpers with_attr_value and with_attr_column.

2026-03-29#

  • Add Change Log to documentation site
  • Automatically link to issues in CHANGELOG.md
  • Remove duplicated attribute validation checks. These are mostly handled by the attribute get functions.
  • Pre-collect coordinates from igraph to significantly improve zmatrix_search speed. Execution time reduced by up to 30% in small systems. (#298)
  • Fix TOTAL commands not being executed due to input file parsing bug
  • Allow multiple TOTAL commands per ZMATRIX block
  • Write TOTAL command results to .zmt output files
  • TOTAL = SUM will attempt to convert string attributes to numeric values
  • Reduced the number of mid-loop vector allocations for significant speedups.

2026-03-26#

  • Add error message input to validate_true_false util function.
  • Use validate_string util function in more places.
  • Use ChemRXiv citation
  • Consolidate the text to boolean operation functions into Utils::Comparison. Also adds "!=" to delete_* analyses
  • Re-implement ZMATRIX.TOTAL
  • Rename ZMATRIX.TOTAL PE command to SUM, and adjust accordingly
  • Use the correct name "Z-matrix" where appropriate in the docs.

2026-03-24#

  • Fix links in docs that prevented proper doc compilation.
  • Changed documentation backend to use Zensical instead of mkdocs (#295)
  • Added links to example folders on gitlab in the docs.
  • Added links to wikipedia articles for a few graph theory terms.
  • Added attr_hist analysis (#261)
  • Added GRAPH.ADD.GRAPH command to copy a graph from another block. (#289)
  • Safer internal input file data accessing. Bad cm*-> accesses should throw errors instead of seg-faulting now. (#296)

2026-03-19#

  • Add averaged option to steinhardt parameter based on J Chem Phys, 129, 114707 (2008). (#291)
  • Improve documentation of merge_equal_nodes analysis (#293)
  • Fix gitlab link in docs. (#294)
  • Remove duplicate PBC logging (#292)
  • Consolidate internal utils to src/utils (#277)

2026-03-17#

  • Fix error message for invalid node attribute types in write_node_file.hpp
  • Fix bug in delete_* analyses where the attribute would only be deleted if it was lowercase.
  • Reduce file reading operations in ADD.NODES/EDGES.FROM_FILE commands (#290)
  • Read tilt factors from trajectories. Remove angular PBC parameters. (#2)

2026-03-15#

  • Fix subgraph_* analyses improperly skipping edges in directed graphs. (#282)
  • Move validation step in edg/nds readers to execute block (#283)
  • Guard a delimiter write when no node attributes are supplied in edg/nds files (#284)
  • Fix seg-fault when trying to write PBC bounds for a graph block with no trajectory (#287)
  • Remove old gitlab links and repo name (#286)
  • Add rename_attr analysis (#285)
  • Allow GRAPH.DIRECTED to be called multiple times (#288)

2026-03-08#

  • Replace ghost particle approach with minimum image convention (MIC) for periodic boundary conditions (PBCs) (#279)
    • Remove PBC.CUTOFF setting, add_ghosts analysis, and delete_ghosts analysis
    • Support triclinic (non-orthogonal) cells via upper-triangular box matrix (Initial work towards #2)
    • Apply MIC to all distance, angle, and dihedral calculations
    • Apply MIC to neighbor lists
    • Apply MIC to edge attributes
    • Update tutorial and all relevant docs
  • Update ghost node ghost_of attribute when deleting or merging nodes. Only relevant if analyses were run before the last ZMATRIX_SEARCH. (#274) Superceded by MIC changes in #279
  • Use igraph_incident to handle multi-edges. (#280)

2026-03-03#

  • Fix a link in the docs
  • Fix the nav menu's hiding behavior when zooming in the docs (#270)
  • Fix steinhardt analysis overwriting previous steinhardt calculations with default value (#272)
  • Fix bug where GRAPH.DIRECTED wouldn't use the default combination method when not specified (#273)
  • Fix attribute validation in edge file writer (#278)
  • Fix bug where WRITE.EDGES.ATTRIBUTES.EDGES would fail to write an attribute from ADD.ATTRIBUTE.EDGE.EDGE because there were no edges in the graph.

2026-02-26#

  • Add analysis_utils.hpp to consolidate shared analysis logic
  • Add subgraph_search analysis (#267)
  • Add subgraph_enumerate analysis (#268)
  • Fix the ordering of analysis commands to be alphabetical in the docs
  • Add steinhardt analysis (#269)

2026-02-24#

  • Require that attributes exist before attempting to read from them (#263)
  • Properly skip timestep header row in ADD.EDGES.FROM_FILE (#264)
  • Update error message when attempting out-of-bounds tokens in tokenizer
  • Add missing delimiter between last i attribute and j. (#265)
  • Add subgraph_census analysis (#266)

2026-02-22#

  • Significant updates to docs (#257)
  • Remove the range restriction on angle command parameters (#260)
  • Made compilation flags case-insensitive (#258)
  • Added timestep to the edge file headers (#259)
  • Allow multiple edge file locations (#256)
  • Use an enum instead of manually defined integers for command component types
  • Properly complain when a command component is doubly defined (#262)
  • Refactor input file header parsing
    • Fix appending to the auto-generated header files rather than building from scratch on configuration.
    • Prevent redefinition of the NAME variable
    • Properly require NAME commands at the top of consecutive blocks of the same type
  • Add label_nodes analysis (#255)

2026-02-16#

  • Add CHANGELOG.md
  • Update documentation content and style