Skip to content

Releases: linkml/linkml-map

v0.5.2

07 Apr 14:36
1639e8c

Choose a tag to compare

v0.5.2

Bug fixes

  • Move linkml to runtime dependencies: linkml was only in dev dependencies despite being imported at runtime (data_loaders.py uses linkml.validator.loaders). Without the constraint, downstream resolvers could pair linkml-runtime 1.10.0 with an older incompatible linkml, causing Format.JSON import errors. (#192)

Full Changelog: v0.5.1...v0.5.2

v0.5.1

07 Apr 12:33
67778c9

Choose a tag to compare

v0.5.1

Bug fixes

  • Fix requires-python upper bound: <=3.13 was interpreted as <=3.13.0 by uv, excluding 3.13.1+ patch versions and breaking downstream dependency resolution. Changed to <3.14. (#191)

Full Changelog: v0.5.0...v0.5.1

v0.5.0

06 Apr 21:47
4051193

Choose a tag to compare

v0.5.0

Behavioral changes

  • Null-safe expressions: {x} and bare x in expressions now propagate None through arithmetic, ordering comparisons, membership tests, and function calls instead of aborting the entire expression. Equality (==, !=) uses Python's native handling (None == "x"False). This means case() fallback branches now fire correctly when variables are null — the previous behavior silently skipped them, which caused up to 84-93% row loss in pipelines with sparse companion variables. (#180, #181, #182)

Features

  • Cross-table joins: populated_from now supports dot notation (table.field) for looking up values from joined tables via joins on ClassDerivation. (#159)
  • --continue-on-error flag: map-data CLI can now collect row-level errors and report a summary instead of aborting on the first failure. Errors include structured context (class, slot, row index). (#162, #163)
  • --target-schema flag: map-data CLI now accepts an explicit target schema. (#156)
  • is_numeric() expression function: Curators can guard expressions against bad data: case((is_numeric(x), x * 2.54), (True, None)) (#186)
  • Arithmetic coercion: Operators now coerce numeric strings from tabular input — "100" / "50"2.0. Non-coercible operands return None with a warning. (#186)
  • none_if_non_numeric option on unit_conversion: Opt-in flag to return None for non-numeric values instead of raising. For columns with coded values (e.g., 'A', 'M') mixed with numeric data. (#175, #176)
  • Multi-enum any_of support: Enum mapping now works for slots with multiple enum ranges via any_of. (#172)
  • Enhanced mapping metadata: TransformationSpecification now supports FAIR mapping metadata and agent hierarchy. (#81)

Bug fixes

  • Expression errors no longer masked: Real runtime errors (division by zero, type errors, non-numeric data) now propagate with actual messages instead of the misleading "Expression not in safe subset." (#185, #186)
  • Source context in error messages: TransformationError now includes populated_from for both class and slot derivations, so curators see which source table/column caused the error. (#183, #184)
  • Numeric string coercion in unit_conversion: String values like "120" from TSV/CSV columns are now coerced to float before conversion. (#175, #176)
  • Key-based class handling: dynamic_object.py now handles classes with key: true attributes, not just identifier: true. (#169, #177)
  • Expr with spaced class names: Expression slot derivations no longer resolve to None when the source class name contains a space. (#171)
  • Scalars with no range: map_object no longer recurses into multivalued scalars with no declared range. (#173)

Infrastructure

  • Bump linkml to 1.10.0 and linkml-runtime to 1.10.0. (#189)
  • Require Python >=3.10 (3.9 is EOL). Ruff target bumped to py310 with pyupgrade modernization. (#189)
  • Ruff lint and format enforced in CI via pre-commit. (#179)
  • Biolink subsetting tests use local fixtures instead of live API fetch. (#168)

Full Changelog: v0.4.0...v0.5.0

v0.5.0-rc3

01 Apr 21:09
9c1a0e3

Choose a tag to compare

v0.5.0-rc3 Pre-release
Pre-release

v0.5.0-rc3

All changes from v0.5.0-rc2, plus:

Bug fixes

  • Expression errors no longer masked: Real runtime errors (division by zero, type errors, non-numeric data) now propagate with actual messages instead of the misleading "Expression not in safe subset." (#185, #186)

Features

  • is_numeric() expression function: Curators can guard expressions against bad data: case((is_numeric(x), x * 2.54), (True, None)) (#186)
  • Arithmetic coercion: Operators now coerce numeric strings from tabular input — "100" / "50"2.0. Non-coercible operands return None with a warning, enabling case() guards to work correctly. (#186)

v0.5.0-rc2

01 Apr 19:02
583983c

Choose a tag to compare

v0.5.0-rc2 Pre-release
Pre-release

v0.5.0-rc2

All changes from v0.5.0-rc1, plus:

Improvements

  • Source context in error messages: TransformationError now includes populated_from for both class and slot derivations, so curators see which source table/column caused the error without opening the YAML spec. (#183, #184)

    Before: class_derivation=Quantity; slot_derivation=value_decimal
    After: class_derivation=Quantity (from pht004041); slot_derivation=value_decimal (from phv00191041)

v0.5.0-rc1

31 Mar 21:32
ca26623

Choose a tag to compare

v0.5.0-rc1 Pre-release
Pre-release

v0.5.0-rc1

Behavioral changes

  • Null-safe expressions: {x} and bare x in expressions now propagate None through arithmetic, ordering comparisons, membership tests, and function calls instead of aborting the entire expression. Equality (==, !=) uses Python's native handling (None == "x"False). This means case() fallback branches now fire correctly when variables are null — the previous behavior silently skipped them, which was not the intended semantics and caused up to 84-93% row loss in pipelines with sparse companion variables. (#180, #181, #182)

Features

  • Cross-table joins: populated_from now supports dot notation (table.field) for looking up values from joined tables via joins on ClassDerivation. (#159)
  • --continue-on-error flag: map-data CLI can now collect row-level errors and report a summary instead of aborting on the first failure. Errors include structured context (class, slot, row index). (#162, #163)
  • --target-schema flag: map-data CLI now accepts an explicit target schema. (#156)
  • none_if_non_numeric option on unit_conversion: Opt-in flag to return None for non-numeric values instead of raising. For columns with coded values (e.g., 'A', 'M') mixed with numeric data. (#175, #176)
  • Multi-enum any_of support: Enum mapping now works for slots with multiple enum ranges via any_of. (#172)
  • Enhanced mapping metadata: TransformationSpecification now supports FAIR mapping metadata and agent hierarchy. (#81)

Bug fixes

  • Numeric string coercion in unit_conversion: String values like "120" from TSV/CSV columns are now coerced to float before conversion. (#175, #176)
  • Key-based class handling: dynamic_object.py now handles classes with key: true attributes, not just identifier: true. (#169, #177)
  • Expr with spaced class names: Expression slot derivations no longer resolve to None when the source class name contains a space. (#171)
  • Scalars with no range: map_object no longer recurses into multivalued scalars with no declared range. (#173)

Infrastructure

  • Ruff lint and format enforced in CI via pre-commit. (#179)
  • Biolink subsetting tests use local fixtures instead of live API fetch. (#168)
  • Removed unused Dragon AI workflow.
  • Added Copilot code review ruleset.

v0.4.0

16 Mar 21:16
96d48d3

Choose a tag to compare

What's Changed

  • Implement pivot operation for EAV/measurement data transformation by @cmungall in #108
  • Relax dependency version constraints for library compatibility by @amc-corey-cox in #109
  • Add markers and instructions to extract branches from long functions by @amc-corey-cox in #105
  • offset implementation by @madanucd in #110
  • Fix known dependency vulnerabilities by @jackhiggs in #119
  • Allow multiple class_derivations for the same target class by @amc-corey-cox in #118
  • Add uuid5() function to transformation expressions by @amc-corey-cox in #117
  • Replace hand-rolled expression evaluator with simpleeval by @amc-corey-cox in #122
  • Add multi-output stream writers and -O CLI option by @amc-corey-cox in #115
  • Coerce numeric strings in comparison operators by @amc-corey-cox in #135
  • NMDC: Document inlined-object flattening to lakehouse-style columns (tests only) by @turbomam in #130
  • NMDC: Document string/scalar-to-structured measurement transforms (tests only) by @turbomam in #131
  • Add cross-table lookup support for join-based transformations by @amc-corey-cox in #136
  • Add NMDC transformation pattern tests (flattening + uuid5) by @turbomam in #145
  • Add NMDC Biosample-Study cross-table join tests (#136) by @turbomam in #148
  • Fix JSON output: omit null values and add trailing newline by @amc-corey-cox in #149
  • Clarify architectural vision: TransformationSpecification as IR by @amc-corey-cox in #153
  • Document expression language, functions, and multi-output for RC by @amc-corey-cox in #154

New Contributors

Full Changelog: v0.3.9...v0.4.0

v0.4.0-rc2

11 Mar 15:38
96d48d3

Choose a tag to compare

v0.4.0-rc2 Pre-release
Pre-release

What's Changed

New Features

Bug Fixes

Security

  • Bump asteval>=1.0.5 and duckdb>=1.1.0 to address known security vulnerabilities by @jackhiggs in #119

Documentation

  • Clarify architectural vision: TransformationSpecification as IR by @amc-corey-cox in #153
  • Document expression language, functions, multi-output, and joins for RC by @amc-corey-cox in #154

Tests

  • Add NMDC transformation pattern tests (flattening + uuid5) by @turbomam in #145
  • Add NMDC Biosample-Study cross-table join tests by @turbomam in #148
  • NMDC: Document inlined-object flattening to lakehouse-style columns (tests only) by @turbomam in #130
  • NMDC: Document string/scalar-to-structured measurement transforms (tests only) by @turbomam in #131

Maintenance

  • Relax dependency version constraints for library compatibility by @amc-corey-cox in #109

New Contributors

Full Changelog: v0.3.9...v0.4.0-rc2

v0.3.9

22 Dec 23:37
58ddd11

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.3.8...v0.3.9

v0.3.9-rc2

07 Oct 15:27
55168cf

Choose a tag to compare

v0.3.9-rc2 Pre-release
Pre-release

What's Changed

Full Changelog: v0.3.9-rc1...v0.3.9-rc2