All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- ReSpecTh 2.x support in
ReSpecTh_to_ChemKED: the reference is read from thebibliographyLinkchild elements (referenceDOI,details) with no DOI lookup, falling back to the 1.xdoiandpreferredKeyattributes - Conversion of laminar burning velocity and speciation measurements, alongside ignition delay. ReSpecTh's four speciation experiment types all map to ChemKED
speciation measurement - Mapping tables in
converters.pyfor ReSpecTh experiment types, apparatus kinds and modes, common property names, speciation independent variables, and ignition targets and types apparatus_kindargument toReSpecTh_to_ChemKEDand-ak/--apparatus-kindtorespth2ck, for files whose apparatus ReSpecTh records only as the genericflameuncertaintyandevaluated standard deviationproperties and dataGroup columns are converted and attached to the quantity they describe, whether that is a datapoint value, a common property, a species amount, or a concentration profile- ReSpecTh
commentelements are converted to ChemKEDcomments isvalid_experimentvalidation rule cross-checkingexperiment-typeagainst the datapoint contents and the apparatus kind, which theanyofdatapoints schema cannot do on its own- Round-trip tests asserting the converter reproduces each checked-in ReSpecTh/ChemKED fixture pair
resolve_referencemaps an uncertainty that points at a column by itslabelorid, and one that referencesinitial composition, onto the quantity it describes; both were silently dropped before0.5.0added to the allowedchemked-versionvalues, and a test asserting the current__version__is always among them, sinceget_file_metadatastamps it into every converted file
- The
tubular reactorapparatus kind is renamedflow reactor, the name ReSpecTh, the ChemKED database, and the speciation literature all use.tubular reactoris still accepted as converter input and maps toflow reactor - The mole and mass fraction sum check uses a relative tolerance of 1e-3 (
composition_sum_tolerance) rather than the NumPy default of 1e-5, so compositions reported to a few digits are not rejected for round-off - An auxiliary profile against a
residence-timeaxis is recorded with the axis nametime, whichauxiliary-profiles.independent.nameallows, since a residence time is a time coordinate
- A composition amount of exactly zero, meaning a species measured as absent, is accepted when it carries uncertainty metadata. It was accepted without metadata and rejected with it, and
isvalid_compositionalready allowed it. Only a negative value is an error for a property with no configured units - The unsupported-composition-units error lists the units the converter actually accepts, built from
composition_unitsrather than hand-written, so it cannot fall behind the table again - Every text file is now opened with an explicit UTF-8 encoding. Reading or writing a ChemKED or ReSpecTh file whose author names contain non-ASCII characters previously depended on the platform's preferred encoding, and failed on Windows.
convert_to_ReSpecThcould also rewrite its pretty-printed XML in the platform encoding while declaring UTF-8 in the file. The ruff rulePLW1514now enforces this - Relative uncertainties and relative evaluated standard deviations are now checked to be dimensionless. They previously bypassed unit validation entirely, so
uncertainty-type: relativewithuncertainty: 0.1 kelvinvalidated and was then misread at load time - An uncertainty value Pint cannot parse is reported as a validation error instead of raising
UndefinedUnitErrorout of the validator - Unit strings that ReSpecTh writes with bare negative exponents, such as
ms-1andkg m-2 s-1, are normalized for Pint instead of escaping as aDimensionalityErrorfrom outside the guarded block get_ignition_typeaccepted only 5 of the 10 ignition types and 6 of the 18 ignition targets the schema allows; the vocabulary is now in step withignition_delay_schema.yamland is checked by a testexperimentTypeis matched case-insensitively, so the lowercase spelling used throughout ReSpecTh 2.x is recognizedignitionTypeis only required for ignition delay filescomposition_schema.yamlnow references the shareduncertainty-metadatadefinition instead of a hand-copied duplicate that had drifted totype: float, so a species amount accepts the same uncertainty forms as every other quantity. The definition is hoisted to its own top-level anchor invalue_unit_schema.yaml- Composition units accept concentrations (
mol/cm3,mol/m3,mol/dm3,mol/L), the misspellingmole factionfound in part of the ReSpecTh corpus, and a mixture of mole percent and mole fraction, which is reconciled onto mole fraction
0.5.0 - 2026-07-02
- Add codemeta file
- GitHub Actions CI workflow testing on Python 3.10, 3.11, 3.12, 3.13, and 3.14 on Linux, and Python 3.14 on macOS and Windows
- GitHub Actions workflow for deploying documentation to GitHub Pages, and separate workflow for publishing to PyPI on version tags using Trusted Publishers
- Updates dependency groups:
pytest-covintest,ruffinlint - Adds ruff, mypy, and pre-commit-hooks to
.pre-commit-config.yaml httpx2as a direct dependency for HTTP calls inorcid.py- pytest
testpaths,filterwarnings, and coverage configuration inpyproject.toml live_apipytest marker andtests/test_live_api.pywith contract tests that verify mock data still matches real Crossref and ORCID API responses- GitHub Actions workflow (
.github/workflows/live-api.yml) running live API contract tests on a weekly schedule and on manual dispatch tests/_mock_data.pycentralising shared Crossref and ORCID mock data for use by bothconftest.pyandtest_live_api.pymock_orcid_apiandmock_all_apisfixtures intests/conftest.py- Development and testing documentation in
docs/development.rstandCONTRIBUTING.md
- replaces
os.pathwithpathlib.Pathoperations - replaces
codemeta.jsonfile withCITATION.cff - All tests that previously called external APIs directly now use mock fixtures;
addopts = "-m 'not live_api'"inpyproject.tomlexcludes live API tests from the default run - switched to Coveralls for code coverage
- Directly use the Markdown formatting of the README on pypi, rather than converting to reST
- Composition type is included in the pandas data-frame resulting from
to_dataframe() - Migrated from
setup.py/setup.cfgtopyproject.tomlwith hatchling build backend pandasmoved from optionaldataframesextra into main dependencies- Moved source to
src/pyked/layout; tests moved to top-leveltests/directory orcid.pynow useshttpx2instead ofrequestsfor HTTP calls, and updated to use ORCID public API v3.0- Updated conda recipe to use
load_file_regexfor version, updated all dependency pins, require Python >= 3.10 - Updated README badges; added GitHub Actions CI badge; updated Codecov to
mainbranch - Updated
docs/conf.py: replaced deprecatedpkg_resourceswithimportlib.metadata; replaced deprecatedautodoc_default_flagswithautodoc_default_options; updated intersphinx mappings; fixedlanguage = Nonedeprecation; removed legacy Travis CI environment check - Updated paths and URLs in example notebooks and
ck-tutorial.rst
filterinchemked.pyincompatible with Python 3.14; replaced with list comprehension- ORCID URL stripping in
converters.pyusedlstrip()(strips characters, not a prefix) causing malformed ORCIDs when Crossref returnshttps://URLs; replaced withrfind('/')approach consistent withvalidation.py - Test assertions for Crossref author names updated to match current API response format
- Test path assertions for ReSpecTh conversion detail string corrected after test directory migration
pandas.util.testing(removed in pandas 1.0) replaced withpandas.testingin test fixtures- Removed
no_internet()helper andinternet_missingskip marker fromtest_validation.py; tests now mock APIs instead of skipping when offline - Duplicate
compression_timeentry inDataPointdocstring causing Sphinx build failure
appveyor.ymlreplaced by GitHub Actionsrequirements.txtreplaced bypyproject.tomldependenciesMANIFEST.innot needed with hatchling build backend
0.4.1 - 2018-03-09
- Documentation for old versions is available on the Releases page of the docs
- Doctr deploys on tags now
- Syntax changes for example files in the documentation
0.4.0 - 2018-03-07
- New method to instantiate a
ChemKEDclass directly from a ReSpecTh XML file - The
__version__attribute can be imported from the top-level module - New
time-historiesfield to replace thevolume-history. This field allows specification of several other relevant parameters besides volume. - Added
rcm-datafield and movedcompressed-temperature,compressed-pressure, andcompression-timeto this field - Added
stroke,clearance, andcompression-ratioto thercm-datafield - Added conda-forge instructions to the installation documentation
- Allow alpha versions to be specified during testing
- Crossref lookups via Habanero now comply with the "be-nice" policy
- Removed
UnboundLocalErrorfrom error processing for reference validation - Switch to flake8 for style checking in CI services
file-authorfield is now a list calledfile-authors- ReSpecTh->ChemKED converter function now returns a dictionary, while the command-line entry points write out files
- Require Habanero>=0.6.0 to support the
mailtoargument - Require pytest>=3.2.0 to support the
pytest.mark.filterwarningsdecorator - Deprecate the
volume-historyfield in the ChemKED YAML file and replace withtime-histories - ORCID lookups are now done by a function in the local
orcid.pymodule, removing an external dependency - Composition in a
DataPointis now stored in a dictionary ofnamedtuples (calledComposition) rather than a list of dictionaries
- Crossref lookups in the converters use the common API instance from validation
d/dt max extrapolatedignition type can be converted to/from ReSpecTh- Tests now check for appropriate warnings and ignore unrelated warnings
0.3.0 - 2017-10-09
- New extrapolated ignition type, where the maximum slope is extrapolated to the baseline
- Tests that the composition type is stored properly in the
DataPoint species_conversiondictionary can be passed to theget_cantera_mole_fractionandget_cantera_mass_fractionfunctions to change the name of a species in the output string- Jupyter Notebook examples of usage
- Removes
elemental-compositionas a synonym foratomic-composition
- Fixes
test_incorrect_doi_period_at_enddocstring
- Conda builds are now noarch - one package for all Pythons!
- pip installs now require Python compatible with 3.5
- Appveyor runs a single job and no longer builds conda packages
- Remove journal from required fields in the reference
0.2.1 - 2017-08-31
- Fixes Cantera convenience output functions
0.2.0 - 2017-08-10
- Adds ChemKED method to write new file, with tests
- Adds converters to and from ReSpecTh files, with tests
- Adds command-line entry points for converter scripts
- Add docs for converters
ignition_typedictionary inDataPointis nowdeepcopyd
0.1.6 - 2017-07-17
- Added logo files to repo
- Added
first_stage_ignition_delay,compressed_pressure, andcompressed_temperatureas properties
- Added Zenodo collection DOI to CITATION.md
0.1.5 - 2017-05-22
- Schema can now be split into multiple files via
!includedirective
- Remove Python 2.7 classifier from
setup.py - DataFrame output for datapoints lists with multiple compositions (i.e., a species not in all compositions)
- Improved tests with no internet
- Improved tests with no warning
0.1.4 - 2017-04-21
- Add
skip_validationkeyword argument to theChemKEDinitializer
- Python 2.7 support is removed again
0.1.3 - 2017-04-13
- Add back Python 2.7 support
- Add Appveyor builds for Windows conda packages
0.1.2 - 2017-04-13
- Tests of the composition uncertainty in the DataPoint
- Tests of the values in the references
- Packaging for conda and PyPI
- Add Anaconda-Server badge to README
- All fixed DOIs in CITATION.md are now specified with placeholders
0.1.1 - 2017-04-02
- Added Zenodo DOI badge to README
- Added CITATION file, and mention of license to README
- Fixed chemked-version bug in schema introduced in 0.1.0
0.1.0 - 2017-04-02
- First minor release of PyKED, supporting autoignition experiments.
- Basic API documentation is available via https://pr-omethe-us.github.io/PyKED/