Changelog
All notable changes to this project will be documented in this file.
[1.3.4] - 2026-07-28
Added
RDKit XYZ Saving: Added XYZ file output support to RDKit
Molecule.to_xyz(...)optimizer workflows.Mordred 3D Descriptors: Added 3D descriptor support to
Mordredwhen configured withignore_3D=False, using ChemMLMolecule-based serial 3D optimization followed by parallel Mordred descriptor calculation.Feature Cleaning Refresh: Revised feature cleaning functions to be under feature_cleaning.py under preprocessing, with additional correlated and invariant feature removal tools.
Genetic Algorithm Multiprocessing: Added multiprocessing support to GeneticAlgorithm() for faster evaluation of large populations, with optional
n_jobsparameter to specify number of parallel processes (default is 1, no parallelization).AutoML Model Saving: Both overall best model and best model per feature are now saved to disk within the output directory, along with other metadata necessary for model replication. Replication example given in docs as well.
Changed
Standardized molecule loading for foss_descriptors to avoid redundant code in each descriptor generator.
foss_descriptors and feature_cleaning use lazy loading of modules throughout (SPEC 1 compliant).
ConstantColumns() now uses the RemoveInvFeatures() function as the true backend, and will be removed in v1.4.
Added
target_features_countandactive_fractionparameters to GeneticAlgorithm() to allow for direct specification of the number of features to select/ratio of features to preserve, rather than previous random choice that always preserved about half of features.AutoML now uses eigen spectrum-based Coulomb matrix instead of sorted; this is a more robust representation that avoids degeneracy issues with sorted Coulomb matrices.
AutoML now accepts an output_dir parameter due to increased output files and directories being generated, including best model artifacts.
Fixed/Miscellaneous
Some minor code comment updates.
Updated documentation and tests for new/changed features.
Notes
Support Status: ChemML v1.3.5 will be the last release to support Python 3.8-3.12 as they are EoL. Future releases (v1.4+) will require an update to Python 3.14 in accordance with [SPEC 0](https://scientific-python.org/specs/spec-0000/). Note that 1.3.5 and 1.4.0 will be equally capable, and this is being done to streamline future development and maintenance.
Commits Included:
[1.3.3] - 2026-04-22
Added
LightGBM Integration: Added LightGBM algorithm support to the model screener functionality
Classifier AutoML: Completed classifier AutoML capabilities for expanded model screening
Pradhan et al. 2026: Added reproducible workflow and datasets for the Inverse Design paper by Pradhan et al. 2026
Changed
RDKit Fingerprints: Upgraded the RDKFP implementation to utilize RDKit’s modern
rdFingerprintGeneratorset of fingerprint generatorsDescriptor Calculation Logic: AutoML’s RDKit descriptor calculation now relies on
RDKDesc()wrapper class in FOSS descriptor moduleFOSS Descriptors/Tests: Modified FOSS descriptors functionality logic and expanded related tests
Documentation Setup: Transitioned the repository’s Markdown changelog into
docs/changelog.rstto support unified ReadTheDocs rendering, and updated the main index accordinglyTutorial Notebooks: Updated feature representation documentation and notebooks corresponding to new RDKFP code outputs
Progress Tracking via tqdm: Implemented a progress bar for RDKit descriptor calculations and genetic algorithm using tqdm
Fixed/Miscellaneous
Modernized Packaging: Added
pyproject.tomlfor standard PEP 517/518 builds, eliminating setup.py and –use-pep517 flag during installPandas 3.0 Compatibility: Fixed some incompatibilities with pandas 3.0 found in CI/CD testing; in theory this should make ChemML compatible with pandas 3.0, but further testing is needed
TensorFlow 2.x Compatibility: Patched backwards compatibility errors in Neural Fingerprint graph convolutional layers
Python 3.8 Support: Ensured dependencies, test module configurations, and setups maintain Python 3.8 backwards compatibility
Documentation: Updated documentation index page to keep up-to-date with README.md
Commits Included:
5eb23ef - updating feature rep docs with new RDKFP code
6e3fe21 - patching TF2.x error in neural fingerprints
c5dc859 - updating RTD page, moving changelog to docs
e725bed - Updating RDKFP to use modern rdFingerprintGenerator
8e6d60c - Adding LightGBM to modelscreener
2ae5a02 - Using foss_descriptors’s RDKit descriptor function
28ee6bd - adding progress bar for rdkit descriptor calculation
85bc354 - completing classifier AutoML
0c4782f - Confirming pip install fix (closed pyproject.toml dev)
a526f01 - fixing pandas 3.0 issues on CI/CD
6bf11de - Modifying foss descriptors and tests
8ca2e1f - adding pyproject.toml and 3.8 backwards compatibility
35fe0cf - patched CI/CD to fix nitinmad issue
6205026 - Updated the GeneticAlgorithm to be abel view as progress bar using tqdm
368d2ec - Added tqdm
fcca36b - Add reproducible workflow and datasets for Pradhan et al. 2026 Inverse Design paper
[1.3.2] - 2025-12-05
Added
MLP Model Enhancement: Added
get_params()method to the MLP class for scikit-learn compatibility with model screening toolsGitHub Actions Workflow: Created comprehensive CI/CD pipeline (
test.yml) for cross-platform testing on Ubuntu, macOS, and Windows with native coverage reportingMixed Precision Workaround: Added mixed precision policy initialization in LorentzLorenz to prevent
ml_dtypes.float4_e2m1fncompatibility errors with TensorFlow 2.19+Keras 3 Compatibility: Updated Adam optimizer imports and instantiations to use Keras 3 standard (removed deprecated
.legacymodule anddecayparameter)Dictionary-based Metrics: Implemented Keras 3-compliant multi-output model metrics using output name mapping to prevent duplicate metric naming errors
GitHub Native Coverage Reporting: Added artifact uploads for coverage XML reports from each test run on different platforms
GitHub Actions Badge: Added workflow status badge to README for visibility into test status
Changed
Loss Specification: Updated LorentzLorenz model compilation to use list of losses for each output instead of single loss string, matching Keras 3 requirements
Metrics Configuration: Changed from list-based metrics to dictionary-based metrics for multi-output models to ensure unique metric names in Keras 3
AutoML Multi-core Support: Enhanced
model_screener.pywith improved multi-core processing capabilitiesModel Screener: Updated
test_hyp()compatibility for better parameter tracking and reportingCI/CD Infrastructure: Migrated from Travis CI to GitHub Actions with improved coverage reporting
Version Tracking: Updated README to reference GitHub releases instead of PyPI for latest version
Version Number: Bumped to 1.3.2 to reflect Keras 3 compatibility and infrastructure improvements
Removed
Travis CI Configuration: Removed outdated
.travis.ymlfile (superseded by GitHub Actions)Codecov Integration: Removed external Codecov service dependency in favor of GitHub-native coverage artifact uploads
PyPI Badge: Replaced with GitHub releases badge as repo is ahead of PyPI
Fixed
Keras 3/TensorFlow 2.19 Compatibility: Fixed “Found two metrics with the same name” error by implementing proper output naming and dictionary-based metrics
Adam Optimizer: Removed incompatible
decayparameter for Keras 3 Adam optimizer initializationMixed Precision Issues: Resolved
ml_dtypes.float4_e2m1fnAttributeError by setting global mixed precision policy to float32PyTorch Installation: Added OS-specific PyTorch installation in GitHub Actions workflow
OpenBabel Import: Fixed openbabel import failures in GitHub Actions by adding openbabel-wheel pip installation alongside conda installation
Technical Details
Commits Included:
b83abd9 - patch to published models - Added
get_params()method to MLP class - Fixed LorentzLorenz model metrics for Keras 3 compatibility - Updated notebook documentationdba73a6 - backwards compatibility fixes - Updated Adam optimizer imports (removed
.legacy) - Fixed mixed precision initialization in LorentzLorenz - Updated test imports for consistency5739610 - AutoML multi-core update - Enhanced
model_screener.pywith improved parallelization - Updatedspace.pyfor better genetic algorithm integration - Modified MLP to support model screening viaget_params()- Updated test cases for AutoML screening8bbe071 - Updated readme and setup for local install - Updated README installation instructions - Modified setup.py for Python 3.12 compatibility
d167ce8 - code CI/CD updated to GitHub Actions - Migrated from Travis CI to GitHub Actions workflow - Added
.github/workflows/test.ymlfor cross-platform testing - Configured conda-forge dependencies with Mambaforge - Added OS-specific PyTorch installation for CI environments400b260 - CI/CD patches - Added pytest and coverage configuration - Skipped test_Dragon in CI due to software availability - Configured matplotlib backend for CI environments - Added coverage XML artifact uploads
29e3715 - macOS CI/CD patch for tkinter - Added tk to conda-forge dependencies for macOS compatibility - Enhanced matplotlib configuration for non-GUI backend - Added MPLBACKEND environment variable for CI
5571532 - removing extra import to avoid CI/CD issues - Removed unused
from turtle import backimport from explain.py - Fixed ModuleNotFoundError for _tkinter on macOS CI
Dependencies Updated
TensorFlow/Keras: Now compatible with Keras 3 and TensorFlow 2.19+
PyTorch: Added proper CPU-only installation for CI environments
System Libraries: Added openbabel-wheel for proper pip installation alongside conda openbabel
Testing
All tests pass on Ubuntu, macOS, and Windows with Python 3.12
Cross-platform CI validation implemented via GitHub Actions
Coverage reporting integrated with Codecov
Migration Guide for Users
If you’re upgrading from the previous version, note these breaking changes:
Adam Optimizer Parameters: The
decayparameter is no longer supported in Adam. Uselearning_ratescheduling instead.Keras 3 Models: Multi-output models now require dictionary-based metrics configuration:
metrics_dict = { 'output_name': ['metric1', 'metric2'], ... } model.compile(metrics=metrics_dict)
Mixed Precision: Mixed precision is now disabled by default to ensure compatibility. Enable it explicitly if needed.
—
For more information on each change, see the individual commit messages or the pull request discussions.