Releases: linkml/linkml-map
Releases · linkml/linkml-map
v0.5.2
v0.5.2
Bug fixes
- Move
linkmlto runtime dependencies:linkmlwas only in dev dependencies despite being imported at runtime (data_loaders.pyuseslinkml.validator.loaders). Without the constraint, downstream resolvers could pair linkml-runtime 1.10.0 with an older incompatible linkml, causingFormat.JSONimport errors. (#192)
Full Changelog: v0.5.1...v0.5.2
v0.5.1
v0.5.1
Bug fixes
- Fix
requires-pythonupper bound:<=3.13was interpreted as<=3.13.0by 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
v0.5.0
Behavioral changes
- Null-safe expressions:
{x}and barexin expressions now propagateNonethrough arithmetic, ordering comparisons, membership tests, and function calls instead of aborting the entire expression. Equality (==,!=) uses Python's native handling (None == "x"→False). This meanscase()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_fromnow supports dot notation (table.field) for looking up values from joined tables viajoinsonClassDerivation. (#159) --continue-on-errorflag:map-dataCLI 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-schemaflag:map-dataCLI 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_numericoption onunit_conversion: Opt-in flag to returnNonefor non-numeric values instead of raising. For columns with coded values (e.g.,'A','M') mixed with numeric data. (#175, #176)- Multi-enum
any_ofsupport: Enum mapping now works for slots with multiple enum ranges viaany_of. (#172) - Enhanced mapping metadata:
TransformationSpecificationnow 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:
TransformationErrornow includespopulated_fromfor 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.pynow handles classes withkey: trueattributes, not justidentifier: true. (#169, #177) - Expr with spaced class names: Expression slot derivations no longer resolve to
Nonewhen the source class name contains a space. (#171) - Scalars with no range:
map_objectno 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
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, enablingcase()guards to work correctly. (#186)
v0.5.0-rc2
v0.5.0-rc2
All changes from v0.5.0-rc1, plus:
Improvements
-
Source context in error messages:
TransformationErrornow includespopulated_fromfor 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
v0.5.0-rc1
Behavioral changes
- Null-safe expressions:
{x}and barexin expressions now propagateNonethrough arithmetic, ordering comparisons, membership tests, and function calls instead of aborting the entire expression. Equality (==,!=) uses Python's native handling (None == "x"→False). This meanscase()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_fromnow supports dot notation (table.field) for looking up values from joined tables viajoinsonClassDerivation. (#159) --continue-on-errorflag:map-dataCLI 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-schemaflag:map-dataCLI now accepts an explicit target schema. (#156)none_if_non_numericoption onunit_conversion: Opt-in flag to returnNonefor non-numeric values instead of raising. For columns with coded values (e.g.,'A','M') mixed with numeric data. (#175, #176)- Multi-enum
any_ofsupport: Enum mapping now works for slots with multiple enum ranges viaany_of. (#172) - Enhanced mapping metadata:
TransformationSpecificationnow 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.pynow handles classes withkey: trueattributes, not justidentifier: true. (#169, #177) - Expr with spaced class names: Expression slot derivations no longer resolve to
Nonewhen the source class name contains a space. (#171) - Scalars with no range:
map_objectno longer recurses into multivalued scalars with no declared range. (#173)
Infrastructure
v0.4.0
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
- @madanucd made their first contribution in #110
- @jackhiggs made their first contribution in #119
Full Changelog: v0.3.9...v0.4.0
v0.4.0-rc2
What's Changed
New Features
- Add multi-output stream writers and
-O/--additional-outputCLI option by @amc-corey-cox in #115 - Add
uuid5()function to transformation expressions by @amc-corey-cox in #117 - Allow multiple
class_derivationsfor the same target class by @amc-corey-cox in #118 - Replace hand-rolled expression evaluator with simpleeval by @amc-corey-cox in #122
- Coerce numeric strings in comparison operators by @amc-corey-cox in #135
- Add cross-table lookup support for join-based transformations by @amc-corey-cox in #136
- Implement pivot operation for EAV/measurement data transformation by @cmungall in #108
- Implement offset operation by @madanucd in #110
Bug Fixes
- Fix JSON output: omit null values and add trailing newline by @amc-corey-cox in #149
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
- @jackhiggs made their first contribution in #119
- @madanucd made their first contribution in #110
- @turbomam made their first contribution in #130
Full Changelog: v0.3.9...v0.4.0-rc2
v0.3.9
What's Changed
- Add support for copy directives by @Silvanoc in #35
- add biolink subset test separte from other example tests for ease of … by @sierra-moxon in #39
- add denormalizing transform notebook by @sierra-moxon in #40
- Fix up and re-enable tests by @pkalita-lbl in #44
- Handle
overridesonSlotDerivationby @pkalita-lbl in #45 - Clean up dependency specifications by @pkalita-lbl in #46
- Converting all unit tests to pytest by @ialarmedalien in #51
- Ruff format and lint by @ialarmedalien in #52
- Removing poetry and using uv for python and package management by @ialarmedalien in #54
- Ruff linter fixes: automated by @ialarmedalien in #55
- Markdown compiler -- minor template fix by @ialarmedalien in #56
- Automatic python code fixes suggested by ruff by @ialarmedalien in #57
- Automatic ruff lint fixes, plus some type additions and docs. by @ialarmedalien in #58
- add license by @kevinschaper in #66
- Address
Page not founds by @hrshdhgd in #77 - Map value when single value provided for multivalued slot. by @martinwellman in #78
- Implement value_mappings by @amc-corey-cox in #65
- Implement transform on in-lined classes in multi-value slot by @amc-corey-cox in #73
- Slot derivation for constant values by @amc-corey-cox in #80
- Fix Model Issues by @amc-corey-cox in #84
- add template for pydantic gen and value to slotderivation by @sierra-moxon in #87
- Adds new testing Framework with example by @amc-corey-cox in #90
- Update deepdiff to fix CVE by @amc-corey-cox in #92
- And read and write TSV for data mapping by @amc-corey-cox in #100
- Allow populated_from to lookup from external class by @amc-corey-cox in #101
- Adding AI integrations from copier template by @cmungall in #102
New Contributors
- @sierra-moxon made their first contribution in #39
- @pkalita-lbl made their first contribution in #44
- @kevinschaper made their first contribution in #66
- @hrshdhgd made their first contribution in #77
- @amc-corey-cox made their first contribution in #65
Full Changelog: v0.3.8...v0.3.9
v0.3.9-rc2
What's Changed
- Fix Model Issues by @amc-corey-cox in #84
- add template for pydantic gen and value to slotderivation by @sierra-moxon in #87
- Adds new testing Framework with example by @amc-corey-cox in #90
- Update deepdiff to fix CVE by @amc-corey-cox in #92
Full Changelog: v0.3.9-rc1...v0.3.9-rc2