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 Mordred when configured with ignore_3D=False, using ChemML Molecule-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_jobs parameter 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_count and active_fraction parameters 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 rdFingerprintGenerator set of fingerprint generators

  • Descriptor Calculation Logic: AutoML’s RDKit descriptor calculation now relies on RDKDesc() wrapper class in FOSS descriptor module

  • FOSS Descriptors/Tests: Modified FOSS descriptors functionality logic and expanded related tests

  • Documentation Setup: Transitioned the repository’s Markdown changelog into docs/changelog.rst to support unified ReadTheDocs rendering, and updated the main index accordingly

  • Tutorial 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.toml for standard PEP 517/518 builds, eliminating setup.py and –use-pep517 flag during install

  • Pandas 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:

  1. 5eb23ef - updating feature rep docs with new RDKFP code

  2. 6e3fe21 - patching TF2.x error in neural fingerprints

  3. c5dc859 - updating RTD page, moving changelog to docs

  4. e725bed - Updating RDKFP to use modern rdFingerprintGenerator

  5. 8e6d60c - Adding LightGBM to modelscreener

  6. 2ae5a02 - Using foss_descriptors’s RDKit descriptor function

  7. 28ee6bd - adding progress bar for rdkit descriptor calculation

  8. 85bc354 - completing classifier AutoML

  9. 0c4782f - Confirming pip install fix (closed pyproject.toml dev)

  10. a526f01 - fixing pandas 3.0 issues on CI/CD

  11. 6bf11de - Modifying foss descriptors and tests

  12. 8ca2e1f - adding pyproject.toml and 3.8 backwards compatibility

  13. 35fe0cf - patched CI/CD to fix nitinmad issue

  14. 6205026 - Updated the GeneticAlgorithm to be abel view as progress bar using tqdm

  15. 368d2ec - Added tqdm

  16. 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 tools

  • GitHub Actions Workflow: Created comprehensive CI/CD pipeline (test.yml) for cross-platform testing on Ubuntu, macOS, and Windows with native coverage reporting

  • Mixed Precision Workaround: Added mixed precision policy initialization in LorentzLorenz to prevent ml_dtypes.float4_e2m1fn compatibility errors with TensorFlow 2.19+

  • Keras 3 Compatibility: Updated Adam optimizer imports and instantiations to use Keras 3 standard (removed deprecated .legacy module and decay parameter)

  • 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.py with improved multi-core processing capabilities

  • Model Screener: Updated test_hyp() compatibility for better parameter tracking and reporting

  • CI/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.yml file (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 decay parameter for Keras 3 Adam optimizer initialization

  • Mixed Precision Issues: Resolved ml_dtypes.float4_e2m1fn AttributeError by setting global mixed precision policy to float32

  • PyTorch 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:

  1. b83abd9 - patch to published models - Added get_params() method to MLP class - Fixed LorentzLorenz model metrics for Keras 3 compatibility - Updated notebook documentation

  2. dba73a6 - backwards compatibility fixes - Updated Adam optimizer imports (removed .legacy) - Fixed mixed precision initialization in LorentzLorenz - Updated test imports for consistency

  3. 5739610 - AutoML multi-core update - Enhanced model_screener.py with improved parallelization - Updated space.py for better genetic algorithm integration - Modified MLP to support model screening via get_params() - Updated test cases for AutoML screening

  4. 8bbe071 - Updated readme and setup for local install - Updated README installation instructions - Modified setup.py for Python 3.12 compatibility

  5. d167ce8 - code CI/CD updated to GitHub Actions - Migrated from Travis CI to GitHub Actions workflow - Added .github/workflows/test.yml for cross-platform testing - Configured conda-forge dependencies with Mambaforge - Added OS-specific PyTorch installation for CI environments

  6. 400b260 - 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

  7. 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

  8. 5571532 - removing extra import to avoid CI/CD issues - Removed unused from turtle import back import 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:

  1. Adam Optimizer Parameters: The decay parameter is no longer supported in Adam. Use learning_rate scheduling instead.

  2. Keras 3 Models: Multi-output models now require dictionary-based metrics configuration:

    metrics_dict = {
        'output_name': ['metric1', 'metric2'],
        ...
    }
    model.compile(metrics=metrics_dict)
    
  3. 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.