Skip to content

Commit 4052262

Browse files
committed
fix python dimension conversion
1 parent e69b2a8 commit 4052262

File tree

4 files changed

+18
-5
lines changed

4 files changed

+18
-5
lines changed

python/units_python.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@ NB_MODULE(units_llnl_ext, mod)
732732
units::precise::generate_custom_count_unit(
733733
static_cast<std::uint16_t>(value));
734734
} else {
735-
def = def * (units::unit_from_string(key).pow(value));
735+
def = def * (units::default_unit(key).pow(value));
736736
}
737737
}
738738
new (dim) Dimension{def};

test/python/test_dimensions.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,16 @@ def test_dimensions_decompose1():
7878
d1 = Dimension("volume")
7979
decomposition = d1.decompose()
8080

81-
assert decomposition["meters"] == 3
81+
assert decomposition["Length"] == 3
8282

8383

8484
def test_dimensions_decompose2():
8585
u1 = Unit("$ per watt radian")
8686
dim = u1.dimension
8787
decomposition = dim.decompose()
88-
88+
print(f"dim={decomposition}")
8989
dim2 = Dimension(decomposition)
90+
print(f"dim2={dim2.decompose()}")
9091
assert dim2 == dim
9192
assert dim2.default_unit == u1
9293

units/units.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6121,6 +6121,9 @@ precise_unit default_unit(std::string unit_type)
61216121
if (unit_type.compare(0, 10, "quantityof") == 0) {
61226122
return default_unit(unit_type.substr(10));
61236123
}
6124+
if (unit_type.compare(0, 9, "measureof") == 0) {
6125+
return default_unit(unit_type.substr(9));
6126+
}
61246127
if (unit_type.compare(0, 6, "rateof") == 0) {
61256128
return default_unit(unit_type.substr(6)) / precise::s;
61266129
}
@@ -6171,6 +6174,11 @@ precise_unit default_unit(std::string unit_type)
61716174
unit_type.substr(0, unit_type.size() - strlen("rate"))) /
61726175
precise::s;
61736176
}
6177+
auto retunit=unit_from_string(unit_type);
6178+
if (is_valid(retunit))
6179+
{
6180+
return precise_unit(retunit.base_units());
6181+
}
61746182
return precise::invalid;
61756183
}
61766184

units/units_conversion_maps.hpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3248,7 +3248,7 @@ std::array<std::pair<const char*, precise_unit>, 233>
32483248

32493249
// Mostly from https://en.wikipedia.org/wiki/International_System_of_Units
32503250
UNITS_CPP14_CONSTEXPR_OBJECT
3251-
std::array<std::pair<const char*, precise_unit>, 247> defined_measurement_types{
3251+
std::array<std::pair<const char*, precise_unit>, 251> defined_measurement_types{
32523252
{
32533253
{"", precise::defunit},
32543254
{"arb", precise::defunit},
@@ -3283,8 +3283,8 @@ std::array<std::pair<const char*, precise_unit>, 247> defined_measurement_types{
32833283
{"temp", precise::K},
32843284
{"thermodynamictemperature", precise::K},
32853285
{"thermalconductivity", precise::W / precise::m / precise::K},
3286-
{"amount", precise::mol},
32873286
{"amountofsubstance", precise::mol},
3287+
{"amount", precise::mol},
32883288
{"substance", precise::mol},
32893289
{"sub", precise::mol},
32903290
{"luminousintensity", precise::cd},
@@ -3498,5 +3498,9 @@ std::array<std::pair<const char*, precise_unit>, 247> defined_measurement_types{
34983498
{"information", precise::bit},
34993499
{"unitless", precise::one},
35003500
{"numeric", precise::one},
3501+
{"currency",precise::currency},
3502+
{"value",precise::currency},
3503+
{"money",precise::currency},
3504+
{"count",precise::count},
35013505
}};
35023506
} // namespace UNITS_NAMESPACE

0 commit comments

Comments
 (0)