Skip to content

Commit 4729095

Browse files
Fix DynamicQuantities test failures in extension refactor
- Remove duplicate _is_dimension_error definition from model_parsing.jl - Fix qualified function call in generated code for _is_dimension_error - Add proper oneunit function for DynamicQuantities support - Export oneunit from main module for test compatibility - Fix get_unit fallback to return oneunit for consistent behavior This addresses the CI failures in DynamicQuantities tests where: 1. _is_dimension_error was not accessible in generated code 2. oneunit function was missing from exports 3. get_unit was returning computed values instead of unit structure 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 695e991 commit 4729095

File tree

3 files changed

+12
-7
lines changed

3 files changed

+12
-7
lines changed

src/ModelingToolkit.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ export map_variables_to_equations
296296

297297
export toexpr, get_variables
298298
export simplify, substitute
299-
export get_unit, validate, equivalent, screen_unit, get_literal_unit
299+
export get_unit, validate, equivalent, screen_unit, get_literal_unit, oneunit
300300
export build_function
301301
export modelingtoolkitize
302302
export generate_initializesystem, Initial, isinitial, InitializationProblem

src/systems/model_parsing.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -892,8 +892,7 @@ end
892892

893893
# Unitful convert_units functions moved to ModelingToolkitUnitfulExt extension
894894

895-
# Extensible dimension error check - extensions can add methods
896-
_is_dimension_error(e) = false
895+
# Dimension error check function is defined in unit_check.jl
897896

898897
convert_units(::DynamicQuantities.Quantity, value::Num) = value
899898

@@ -912,7 +911,7 @@ function parse_variable_arg(dict, mod, arg, varclass, kwargs, where_types)
912911
try
913912
$setdefault($vv, $convert_units($unit, $name))
914913
catch e
915-
if isa(e, $(DynamicQuantities.DimensionError)) || (_is_dimension_error(e))
914+
if isa(e, $(DynamicQuantities.DimensionError)) || ($(ModelingToolkit)._is_dimension_error(e))
916915
error("Unable to convert units for \'" * string(:($$vv)) * "\'")
917916
elseif isa(e, MethodError)
918917
error("No or invalid units provided for \'" * string(:($$vv)) *

src/systems/unit_check.jl

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ end
6161
const unitless = DQ.Quantity(1.0)
6262
get_literal_unit(x) = screen_unit(something(__get_literal_unit(x), unitless))
6363

64+
# Get unit value of a quantity (oneunit functionality)
65+
oneunit(x::DQ.AbstractQuantity) = DQ.Quantity(1.0, DQ.dimension(x))
66+
oneunit(x::Real) = unitless
67+
oneunit(x) = get_unit(x)
68+
6469
"""
6570
Find the unit of a symbolic item.
6671
"""
@@ -79,8 +84,8 @@ function get_unit(op, args) # Fallback
7984
unit_args = get_unit.(args)
8085
try
8186
result = op(unit_args...)
82-
# For operations that return a unit directly, return it
83-
return screen_unit(result)
87+
# For operations that return a unit directly, return oneunit to get the unit structure
88+
return oneunit(result)
8489
catch
8590
try
8691
# Try with oneunit for numeric operations
@@ -174,7 +179,8 @@ function get_unit(x::Symbolic)
174179
end
175180
end
176181

177-
# Add DQ.DimensionError method to existing _is_dimension_error function
182+
# Dimension error detection function - extensible for different unit systems
183+
_is_dimension_error(e) = false # Default fallback
178184
_is_dimension_error(e::DQ.DimensionError) = true
179185

180186
"""

0 commit comments

Comments
 (0)