3333 lambda s : s .replace ("%" , " percent " ),
3434 ],
3535)
36- if hasattr (ureg ,"formatter" ):
37- # for newer versions of pint
38- ureg .formatter .default_format = "~,P"
39- else :
40- ureg .default_format = "~,P"
36+ ureg .formatter .default_format = "~,P"
4137
4238if "percent" not in ureg :
4339 # percent is native in pint >= 0.21
@@ -76,12 +72,12 @@ def format_cell(cell):
7672 return cell
7773
7874 q = get_quantity (cell )
79- if not q or isnan (q .nominal_value ):
75+ if not q or isnan (q .magnitude . nominal_value ):
8076 return cell
8177
8278 q = truncate_digits (q )
8379 try :
84- return str (q .nominal_value ) if isnan (q .std_dev ) else str (q )
80+ return str (q .magnitude . nominal_value ) if isnan (q . magnitude .std_dev ) else str (q )
8581 except Exception :
8682 return cell
8783
@@ -104,19 +100,16 @@ def get_quantity(s):
104100
105101 try :
106102 parts [0 ] = ufloat_fromstr (parts [0 ])
107- meas = ureg .Measurement (* parts )
108- if not hasattr (meas ,"nominal_value" ) and (val := hasattr (meas ,"value" )):
109- meas .nominal_value = float (val ) # Measurement.value is a `Quantity` object
110- return meas
103+ return ureg .Measurement (* parts )
111104 except ValueError :
112105 return None
113106
114107
115108def truncate_digits (q ):
116- if isnan (q .nominal_value ):
109+ if isnan (q .magnitude . nominal_value ):
117110 return q
118111
119- v = Decimal (str (q .nominal_value ))
112+ v = Decimal (str (q .magnitude . nominal_value ))
120113 vt = v .as_tuple ()
121114
122115 if vt .exponent >= 0 :
@@ -125,8 +118,8 @@ def truncate_digits(q):
125118 dgts = len (vt .digits )
126119 dgts = max_dgts if dgts > max_dgts else dgts
127120 s = f"{ v :.{dgts }g} "
128- if not isnan (q .std_dev ):
129- s += f"+/-{ q .std_dev :.{dgts }g} "
121+ if not isnan (q .magnitude . std_dev ):
122+ s += f"+/-{ q .magnitude . std_dev :.{dgts }g} "
130123
131124 if q .units :
132125 s += f" { q .units } "
@@ -277,7 +270,7 @@ def make_quantities(path, key, value):
277270 return key , value
278271
279272 # silently ignore "nan"
280- if isnan (q .nominal_value ):
273+ if isnan (q .magnitude . nominal_value ):
281274 return False
282275
283276 # ensure that the same units are used across contributions
@@ -305,11 +298,11 @@ def make_quantities(path, key, value):
305298 q = truncate_digits (q )
306299
307300 # return new value dict
308- display = str (q .value ) if isnan (q .std_dev ) else str (q )
301+ display = str (q .value ) if isnan (q .magnitude . std_dev ) else str (q )
309302 value = {
310303 "display" : display ,
311- "value" : q .nominal_value ,
312- "error" : q .std_dev ,
304+ "value" : q .magnitude . nominal_value ,
305+ "error" : q .magnitude . std_dev ,
313306 "unit" : str (q .units ),
314307 }
315308 return key , value
0 commit comments