egauge-python 0.9.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. egauge/ctid/__init__.py +7 -0
  2. egauge/ctid/bit_stuffer.py +65 -0
  3. egauge/ctid/ctid.py +967 -0
  4. egauge/ctid/encoder.py +436 -0
  5. egauge/ctid/intel_hex_encoder.py +98 -0
  6. egauge/ctid/waveform.py +299 -0
  7. egauge/examples/data/test-ctid-decoder.raw +0 -0
  8. egauge/examples/test_capture.py +77 -0
  9. egauge/examples/test_common.py +26 -0
  10. egauge/examples/test_ctid.py +89 -0
  11. egauge/examples/test_ctid_decoder.py +93 -0
  12. egauge/examples/test_local.py +201 -0
  13. egauge/examples/test_register.py +104 -0
  14. egauge/loggers.py +72 -0
  15. egauge/pyside/__init__.py +0 -0
  16. egauge/pyside/ansi2html.py +112 -0
  17. egauge/pyside/terminal.py +295 -0
  18. egauge/webapi/__init__.py +34 -0
  19. egauge/webapi/auth.py +364 -0
  20. egauge/webapi/cloud/__init__.py +30 -0
  21. egauge/webapi/cloud/credentials.py +86 -0
  22. egauge/webapi/cloud/credentials_dialog.py +58 -0
  23. egauge/webapi/cloud/gui/credentials_dialog.py +100 -0
  24. egauge/webapi/cloud/serial_number.py +276 -0
  25. egauge/webapi/device/__init__.py +38 -0
  26. egauge/webapi/device/capture.py +453 -0
  27. egauge/webapi/device/ctid_info.py +553 -0
  28. egauge/webapi/device/device.py +349 -0
  29. egauge/webapi/device/local.py +268 -0
  30. egauge/webapi/device/physical_quantity.py +439 -0
  31. egauge/webapi/device/physical_units.py +473 -0
  32. egauge/webapi/device/register.py +338 -0
  33. egauge/webapi/device/register_row.py +145 -0
  34. egauge/webapi/device/register_type.py +851 -0
  35. egauge/webapi/device/slop.py +334 -0
  36. egauge/webapi/device/virtual_register.py +353 -0
  37. egauge/webapi/error.py +34 -0
  38. egauge/webapi/json_api.py +332 -0
  39. egauge_python-0.9.8.dist-info/METADATA +148 -0
  40. egauge_python-0.9.8.dist-info/RECORD +44 -0
  41. egauge_python-0.9.8.dist-info/WHEEL +5 -0
  42. egauge_python-0.9.8.dist-info/entry_points.txt +2 -0
  43. egauge_python-0.9.8.dist-info/licenses/LICENSE +22 -0
  44. egauge_python-0.9.8.dist-info/top_level.txt +1 -0
@@ -0,0 +1,851 @@
1
+ # !!! DO NOT EDIT !!! Generated by gen-phys-units.
2
+ #
3
+ # Released under MIT license.
4
+ # See file LICENSE for details.
5
+ #
6
+ # pylint: disable=too-few-public-methods
7
+ # pylint: disable=too-many-locals
8
+
9
+ from enum import Enum
10
+
11
+ from .physical_units import AlternateUnit, PhysicalUnits, \
12
+ PhysicalUnitConversion, PrimaryUnit
13
+
14
+ class UnitSystem(Enum):
15
+ METRIC = 0
16
+ IMPERIAL = 1
17
+
18
+ METRIC = 0 # for backwards compatibility (use UnitSystem instead)
19
+ IMPERIAL = 1 # for backwards compatibility (use UnitSystem instead)
20
+
21
+ class RegisterType(Enum):
22
+ POWER = "P"
23
+ APPARENT_POWER = "S"
24
+ VOLTAGE = "V"
25
+ CURRENT = "I"
26
+ FREQ = "F"
27
+ THD = "THD"
28
+ TEMP = "T"
29
+ FLOW = "Q"
30
+ SPEED = "v"
31
+ NUMBER = "#"
32
+ RESISTANCE = "R"
33
+ IRRADIANCE = "Ee"
34
+ REACTIVE_POWER = "PQ"
35
+ MONEY = "$"
36
+ ANGLE = "a"
37
+ HUMIDITY = "h"
38
+ FLOWVOL = "Qv"
39
+ PRESSURE = "Pa"
40
+ CHARGE = "Qe"
41
+ VOLTAGE_MEAN = "Vdc"
42
+ CURRENT_MEAN = "Idc"
43
+ MASS = "m"
44
+ FIXED3 = "#3"
45
+ AIR_QUALITY = "aq"
46
+ PERCENTAGE = "%"
47
+ PPM = "ppm"
48
+ DISCRETE = "d"
49
+ TEMP_DIFF = "dT"
50
+
51
+ def _create_units():
52
+ pus = PhysicalUnits()
53
+
54
+ p0 = PrimaryUnit("W", "Power")
55
+ pus.add(p0)
56
+ pus.add_scaled(p0, "yW", 1e+24, "yocto")
57
+ pus.add_scaled(p0, "zW", 1e+21, "zepto")
58
+ pus.add_scaled(p0, "aW", 1e+18, "atto")
59
+ pus.add_scaled(p0, "fW", 1000000000000000, "femto")
60
+ pus.add_scaled(p0, "pW", 1000000000000, "pico")
61
+ pus.add_scaled(p0, "nW", 1000000000, "nano")
62
+ pus.add_scaled(p0, "μW", 1000000, "micro")
63
+ pus.add_scaled(p0, "mW", 1000, "milli")
64
+ pus.add_scaled(p0, "kW", 1 / 1000, "kilo")
65
+ pus.add_scaled(p0, "MW", 1 / 1000000, "mega")
66
+ pus.add_scaled(p0, "GW", 1 / 1000000000, "giga")
67
+ pus.add_scaled(p0, "TW", 1 / 1000000000000, "tera")
68
+ pus.add_scaled(p0, "PW", 1 / 1000000000000000, "peta")
69
+ pus.add_scaled(p0, "EW", 1 / 1e+18, "exa")
70
+ pus.add_scaled(p0, "ZW", 1 / 1e+21, "zetta")
71
+ pus.add_scaled(p0, "YW", 1 / 1e+24, "yotta")
72
+
73
+ p1 = PrimaryUnit("VA", "Apparent Power")
74
+ pus.add(p1)
75
+ pus.add_scaled(p1, "yVA", 1e+24, "yocto")
76
+ pus.add_scaled(p1, "zVA", 1e+21, "zepto")
77
+ pus.add_scaled(p1, "aVA", 1e+18, "atto")
78
+ pus.add_scaled(p1, "fVA", 1000000000000000, "femto")
79
+ pus.add_scaled(p1, "pVA", 1000000000000, "pico")
80
+ pus.add_scaled(p1, "nVA", 1000000000, "nano")
81
+ pus.add_scaled(p1, "μVA", 1000000, "micro")
82
+ pus.add_scaled(p1, "mVA", 1000, "milli")
83
+ pus.add_scaled(p1, "kVA", 1 / 1000, "kilo")
84
+ pus.add_scaled(p1, "MVA", 1 / 1000000, "mega")
85
+ pus.add_scaled(p1, "GVA", 1 / 1000000000, "giga")
86
+ pus.add_scaled(p1, "TVA", 1 / 1000000000000, "tera")
87
+ pus.add_scaled(p1, "PVA", 1 / 1000000000000000, "peta")
88
+ pus.add_scaled(p1, "EVA", 1 / 1e+18, "exa")
89
+ pus.add_scaled(p1, "ZVA", 1 / 1e+21, "zetta")
90
+ pus.add_scaled(p1, "YVA", 1 / 1e+24, "yotta")
91
+
92
+ p2 = PrimaryUnit("V", "Voltage")
93
+ pus.add(p2)
94
+ pus.add_scaled(p2, "yV", 1e+24, "yocto")
95
+ pus.add_scaled(p2, "zV", 1e+21, "zepto")
96
+ pus.add_scaled(p2, "aV", 1e+18, "atto")
97
+ pus.add_scaled(p2, "fV", 1000000000000000, "femto")
98
+ pus.add_scaled(p2, "pV", 1000000000000, "pico")
99
+ pus.add_scaled(p2, "nV", 1000000000, "nano")
100
+ pus.add_scaled(p2, "μV", 1000000, "micro")
101
+ pus.add_scaled(p2, "mV", 1000, "milli")
102
+ pus.add_scaled(p2, "kV", 1 / 1000, "kilo")
103
+ pus.add_scaled(p2, "MV", 1 / 1000000, "mega")
104
+ pus.add_scaled(p2, "GV", 1 / 1000000000, "giga")
105
+ pus.add_scaled(p2, "TV", 1 / 1000000000000, "tera")
106
+ pus.add_scaled(p2, "PV", 1 / 1000000000000000, "peta")
107
+ pus.add_scaled(p2, "EV", 1 / 1e+18, "exa")
108
+ pus.add_scaled(p2, "ZV", 1 / 1e+21, "zetta")
109
+ pus.add_scaled(p2, "YV", 1 / 1e+24, "yotta")
110
+
111
+ p3 = PrimaryUnit("A", "Current")
112
+ pus.add(p3)
113
+ pus.add_scaled(p3, "yA", 1e+24, "yocto")
114
+ pus.add_scaled(p3, "zA", 1e+21, "zepto")
115
+ pus.add_scaled(p3, "aA", 1e+18, "atto")
116
+ pus.add_scaled(p3, "fA", 1000000000000000, "femto")
117
+ pus.add_scaled(p3, "pA", 1000000000000, "pico")
118
+ pus.add_scaled(p3, "nA", 1000000000, "nano")
119
+ pus.add_scaled(p3, "μA", 1000000, "micro")
120
+ pus.add_scaled(p3, "mA", 1000, "milli")
121
+ pus.add_scaled(p3, "kA", 1 / 1000, "kilo")
122
+ pus.add_scaled(p3, "MA", 1 / 1000000, "mega")
123
+ pus.add_scaled(p3, "GA", 1 / 1000000000, "giga")
124
+ pus.add_scaled(p3, "TA", 1 / 1000000000000, "tera")
125
+ pus.add_scaled(p3, "PA", 1 / 1000000000000000, "peta")
126
+ pus.add_scaled(p3, "EA", 1 / 1e+18, "exa")
127
+ pus.add_scaled(p3, "ZA", 1 / 1e+21, "zetta")
128
+ pus.add_scaled(p3, "YA", 1 / 1e+24, "yotta")
129
+
130
+ p4 = PrimaryUnit("Hz", "Frequency")
131
+ pus.add(p4)
132
+ pus.add_scaled(p4, "yHz", 1e+24, "yocto")
133
+ pus.add_scaled(p4, "zHz", 1e+21, "zepto")
134
+ pus.add_scaled(p4, "aHz", 1e+18, "atto")
135
+ pus.add_scaled(p4, "fHz", 1000000000000000, "femto")
136
+ pus.add_scaled(p4, "pHz", 1000000000000, "pico")
137
+ pus.add_scaled(p4, "nHz", 1000000000, "nano")
138
+ pus.add_scaled(p4, "μHz", 1000000, "micro")
139
+ pus.add_scaled(p4, "mHz", 1000, "milli")
140
+ pus.add_scaled(p4, "kHz", 1 / 1000, "kilo")
141
+ pus.add_scaled(p4, "MHz", 1 / 1000000, "mega")
142
+ pus.add_scaled(p4, "GHz", 1 / 1000000000, "giga")
143
+ pus.add_scaled(p4, "THz", 1 / 1000000000000, "tera")
144
+ pus.add_scaled(p4, "PHz", 1 / 1000000000000000, "peta")
145
+ pus.add_scaled(p4, "EHz", 1 / 1e+18, "exa")
146
+ pus.add_scaled(p4, "ZHz", 1 / 1e+21, "zetta")
147
+ pus.add_scaled(p4, "YHz", 1 / 1e+24, "yotta")
148
+
149
+ p5 = PrimaryUnit("Hz·s")
150
+ pus.add(p5)
151
+
152
+ p6 = PrimaryUnit("%", "THD")
153
+ pus.add(p6)
154
+
155
+ p7 = PrimaryUnit("%·s")
156
+ pus.add(p7)
157
+
158
+ p8 = PrimaryUnit("°C", "Temperature")
159
+ pus.add(p8)
160
+
161
+ p9 = PrimaryUnit("°C·s")
162
+ pus.add(p9)
163
+ pus.add_scaled(p9, "°C·h", 1 / 3600, "Celsius degree hours")
164
+ pus.add_scaled(p9, "°C·d", 1 / 86400, "Celsius degree days")
165
+
166
+ p10 = PrimaryUnit("g/s", "Mass flow")
167
+ pus.add(p10)
168
+ pus.add_scaled(p10, "μg/s", 1000000)
169
+ pus.add_scaled(p10, "mg/s", 1000)
170
+ pus.add_scaled(p10, "kg/s", 1 / 1000)
171
+ pus.add_scaled(p10, "T/s", 1 / 1000000)
172
+ pus.add_scaled(p10, "kT/s", 1 / 1000000000)
173
+ pus.add_scaled(p10, "MT/s", 1 / 1000000000000)
174
+ pus.add_scaled(p10, "GT/s", 1 / 1000000000000000)
175
+ pus.add_scaled(p10, "TT/s", 1 / 1e+18)
176
+ pus.add_scaled(p10, "PT/s", 1 / 1e+21)
177
+
178
+ p11 = PrimaryUnit("m/s", "Speed")
179
+ pus.add(p11)
180
+ pus.add_scaled(p11, "ym/s", 1e+24, "yocto")
181
+ pus.add_scaled(p11, "zm/s", 1e+21, "zepto")
182
+ pus.add_scaled(p11, "am/s", 1e+18, "atto")
183
+ pus.add_scaled(p11, "fm/s", 1000000000000000, "femto")
184
+ pus.add_scaled(p11, "pm/s", 1000000000000, "pico")
185
+ pus.add_scaled(p11, "nm/s", 1000000000, "nano")
186
+ pus.add_scaled(p11, "μm/s", 1000000, "micro")
187
+ pus.add_scaled(p11, "mm/s", 1000, "milli")
188
+ pus.add_scaled(p11, "km/s", 1 / 1000, "kilo")
189
+ pus.add_scaled(p11, "Mm/s", 1 / 1000000, "mega")
190
+ pus.add_scaled(p11, "Gm/s", 1 / 1000000000, "giga")
191
+ pus.add_scaled(p11, "Tm/s", 1 / 1000000000000, "tera")
192
+ pus.add_scaled(p11, "Pm/s", 1 / 1000000000000000, "peta")
193
+ pus.add_scaled(p11, "Em/s", 1 / 1e+18, "exa")
194
+ pus.add_scaled(p11, "Zm/s", 1 / 1e+21, "zetta")
195
+ pus.add_scaled(p11, "Ym/s", 1 / 1e+24, "yotta")
196
+
197
+ p12 = PrimaryUnit("m")
198
+ pus.add(p12)
199
+ pus.add_scaled(p12, "ym", 1e+24, "yocto")
200
+ pus.add_scaled(p12, "zm", 1e+21, "zepto")
201
+ pus.add_scaled(p12, "am", 1e+18, "atto")
202
+ pus.add_scaled(p12, "fm", 1000000000000000, "femto")
203
+ pus.add_scaled(p12, "pm", 1000000000000, "pico")
204
+ pus.add_scaled(p12, "nm", 1000000000, "nano")
205
+ pus.add_scaled(p12, "μm", 1000000, "micro")
206
+ pus.add_scaled(p12, "mm", 1000, "milli")
207
+ pus.add_scaled(p12, "km", 1 / 1000, "kilo")
208
+ pus.add_scaled(p12, "Mm", 1 / 1000000, "mega")
209
+ pus.add_scaled(p12, "Gm", 1 / 1000000000, "giga")
210
+ pus.add_scaled(p12, "Tm", 1 / 1000000000000, "tera")
211
+ pus.add_scaled(p12, "Pm", 1 / 1000000000000000, "peta")
212
+ pus.add_scaled(p12, "Em", 1 / 1e+18, "exa")
213
+ pus.add_scaled(p12, "Zm", 1 / 1e+21, "zetta")
214
+ pus.add_scaled(p12, "Ym", 1 / 1e+24, "yotta")
215
+
216
+ p13 = PrimaryUnit("", "Whole number")
217
+ pus.add(p13)
218
+
219
+ p14 = PrimaryUnit("s")
220
+ pus.add(p14)
221
+
222
+ p15 = PrimaryUnit("Ω", "Resistance")
223
+ pus.add(p15)
224
+ pus.add_scaled(p15, "yΩ", 1e+24, "yocto")
225
+ pus.add_scaled(p15, "zΩ", 1e+21, "zepto")
226
+ pus.add_scaled(p15, "aΩ", 1e+18, "atto")
227
+ pus.add_scaled(p15, "fΩ", 1000000000000000, "femto")
228
+ pus.add_scaled(p15, "pΩ", 1000000000000, "pico")
229
+ pus.add_scaled(p15, "nΩ", 1000000000, "nano")
230
+ pus.add_scaled(p15, "μΩ", 1000000, "micro")
231
+ pus.add_scaled(p15, "mΩ", 1000, "milli")
232
+ pus.add_scaled(p15, "kΩ", 1 / 1000, "kilo")
233
+ pus.add_scaled(p15, "MΩ", 1 / 1000000, "mega")
234
+ pus.add_scaled(p15, "GΩ", 1 / 1000000000, "giga")
235
+ pus.add_scaled(p15, "TΩ", 1 / 1000000000000, "tera")
236
+ pus.add_scaled(p15, "PΩ", 1 / 1000000000000000, "peta")
237
+ pus.add_scaled(p15, "EΩ", 1 / 1e+18, "exa")
238
+ pus.add_scaled(p15, "ZΩ", 1 / 1e+21, "zetta")
239
+ pus.add_scaled(p15, "YΩ", 1 / 1e+24, "yotta")
240
+
241
+ p16 = PrimaryUnit("Ω·s")
242
+ pus.add(p16)
243
+
244
+ p17 = PrimaryUnit("W/m²", "Irradiance")
245
+ pus.add(p17)
246
+ pus.add_scaled(p17, "yW/m²", 1e+24, "yocto")
247
+ pus.add_scaled(p17, "zW/m²", 1e+21, "zepto")
248
+ pus.add_scaled(p17, "aW/m²", 1e+18, "atto")
249
+ pus.add_scaled(p17, "fW/m²", 1000000000000000, "femto")
250
+ pus.add_scaled(p17, "pW/m²", 1000000000000, "pico")
251
+ pus.add_scaled(p17, "nW/m²", 1000000000, "nano")
252
+ pus.add_scaled(p17, "μW/m²", 1000000, "micro")
253
+ pus.add_scaled(p17, "mW/m²", 1000, "milli")
254
+ pus.add_scaled(p17, "kW/m²", 1 / 1000, "kilo")
255
+ pus.add_scaled(p17, "MW/m²", 1 / 1000000, "mega")
256
+ pus.add_scaled(p17, "GW/m²", 1 / 1000000000, "giga")
257
+ pus.add_scaled(p17, "TW/m²", 1 / 1000000000000, "tera")
258
+ pus.add_scaled(p17, "PW/m²", 1 / 1000000000000000, "peta")
259
+ pus.add_scaled(p17, "EW/m²", 1 / 1e+18, "exa")
260
+ pus.add_scaled(p17, "ZW/m²", 1 / 1e+21, "zetta")
261
+ pus.add_scaled(p17, "YW/m²", 1 / 1e+24, "yotta")
262
+
263
+ p18 = PrimaryUnit("var", "Reactive Power")
264
+ pus.add(p18)
265
+ pus.add_scaled(p18, "yvar", 1e+24, "yocto")
266
+ pus.add_scaled(p18, "zvar", 1e+21, "zepto")
267
+ pus.add_scaled(p18, "avar", 1e+18, "atto")
268
+ pus.add_scaled(p18, "fvar", 1000000000000000, "femto")
269
+ pus.add_scaled(p18, "pvar", 1000000000000, "pico")
270
+ pus.add_scaled(p18, "nvar", 1000000000, "nano")
271
+ pus.add_scaled(p18, "μvar", 1000000, "micro")
272
+ pus.add_scaled(p18, "mvar", 1000, "milli")
273
+ pus.add_scaled(p18, "kvar", 1 / 1000, "kilo")
274
+ pus.add_scaled(p18, "Mvar", 1 / 1000000, "mega")
275
+ pus.add_scaled(p18, "Gvar", 1 / 1000000000, "giga")
276
+ pus.add_scaled(p18, "Tvar", 1 / 1000000000000, "tera")
277
+ pus.add_scaled(p18, "Pvar", 1 / 1000000000000000, "peta")
278
+ pus.add_scaled(p18, "Evar", 1 / 1e+18, "exa")
279
+ pus.add_scaled(p18, "Zvar", 1 / 1e+21, "zetta")
280
+ pus.add_scaled(p18, "Yvar", 1 / 1e+24, "yotta")
281
+
282
+ p19 = PrimaryUnit("${currency}/s", "Monetary")
283
+ pus.add(p19)
284
+
285
+ p20 = PrimaryUnit("${currency}")
286
+ pus.add(p20)
287
+
288
+ p21 = PrimaryUnit("°", "Angle")
289
+ pus.add(p21)
290
+
291
+ p22 = PrimaryUnit("°·s")
292
+ pus.add(p22)
293
+
294
+ p23 = PrimaryUnit("m³/s", "Volumetric flow")
295
+ pus.add(p23)
296
+
297
+ p24 = PrimaryUnit("Pa", "Pressure")
298
+ pus.add(p24)
299
+
300
+ p25 = PrimaryUnit("Pa·s")
301
+ pus.add(p25)
302
+
303
+ p26 = PrimaryUnit("Ah·s")
304
+ pus.add(p26)
305
+
306
+ p27 = PrimaryUnit("g", "Mass")
307
+ pus.add(p27)
308
+ pus.add_scaled(p27, "μg", 1000000, "microgram")
309
+ pus.add_scaled(p27, "mg", 1000, "milligram")
310
+ pus.add_scaled(p27, "kg", 1 / 1000, "kilogram")
311
+
312
+ p28 = PrimaryUnit("g·s")
313
+ pus.add(p28)
314
+ pus.add_scaled(p28, "μg·s", 1000000)
315
+ pus.add_scaled(p28, "mg·s", 1000)
316
+ pus.add_scaled(p28, "kg·s", 1 / 1000)
317
+ pus.add_scaled(p28, "T·s", 1 / 1000000)
318
+ pus.add_scaled(p28, "kT·s", 1 / 1000000000)
319
+ pus.add_scaled(p28, "MT·s", 1 / 1000000000000)
320
+ pus.add_scaled(p28, "GT·s", 1 / 1000000000000000)
321
+ pus.add_scaled(p28, "TT·s", 1 / 1e+18)
322
+ pus.add_scaled(p28, "PT·s", 1 / 1e+21)
323
+
324
+ p29 = PrimaryUnit("ppm", "Parts per million")
325
+ pus.add(p29)
326
+
327
+ p30 = PrimaryUnit("ppm·s")
328
+ pus.add(p30)
329
+
330
+ p31 = PrimaryUnit("A·s")
331
+ pus.add(p31)
332
+
333
+ c3 = PhysicalUnitConversion(False,
334
+ lambda x, t=None: (1/3600)*x,
335
+ lambda x, t=None: 3600*x
336
+ )
337
+ au = AlternateUnit("Ah", p31, c3)
338
+ pus.add(au)
339
+ pus.add_scaled(au, "yAh", 1e+24, "yocto")
340
+ pus.add_scaled(au, "zAh", 1e+21, "zepto")
341
+ pus.add_scaled(au, "aAh", 1e+18, "atto")
342
+ pus.add_scaled(au, "fAh", 1000000000000000, "femto")
343
+ pus.add_scaled(au, "pAh", 1000000000000, "pico")
344
+ pus.add_scaled(au, "nAh", 1000000000, "nano")
345
+ pus.add_scaled(au, "μAh", 1000000, "micro")
346
+ pus.add_scaled(au, "mAh", 1000, "milli")
347
+ pus.add_scaled(au, "kAh", 1 / 1000, "kilo")
348
+ pus.add_scaled(au, "MAh", 1 / 1000000, "mega")
349
+ pus.add_scaled(au, "GAh", 1 / 1000000000, "giga")
350
+ pus.add_scaled(au, "TAh", 1 / 1000000000000, "tera")
351
+ pus.add_scaled(au, "PAh", 1 / 1000000000000000, "peta")
352
+ pus.add_scaled(au, "EAh", 1 / 1e+18, "exa")
353
+ pus.add_scaled(au, "ZAh", 1 / 1e+21, "zetta")
354
+ pus.add_scaled(au, "YAh", 1 / 1e+24, "yotta")
355
+
356
+ c11 = PhysicalUnitConversion(False,
357
+ lambda x, t=None: (1/100)*x,
358
+ lambda x, t=None: 100*x
359
+ )
360
+ au = AlternateUnit("hPa", p24, c11)
361
+ pus.add(au)
362
+
363
+ c12 = PhysicalUnitConversion(False,
364
+ lambda x, t=None: 1.0e-5*x,
365
+ lambda x, t=None: 100000.0*x
366
+ )
367
+ au = AlternateUnit("bar", p24, c12)
368
+ pus.add(au)
369
+
370
+ c13 = PhysicalUnitConversion(False,
371
+ lambda x, t=None: 0.00014503773773*x,
372
+ lambda x, t=None: 6894.7572931783*x
373
+ )
374
+ au = AlternateUnit("psi", p24, c13)
375
+ pus.add(au)
376
+
377
+ c14 = PhysicalUnitConversion(False,
378
+ lambda x, t=None: 0.000295300999981497*x,
379
+ lambda x, t=None: 3386.375258*x
380
+ )
381
+ au = AlternateUnit("inHg", p24, c14)
382
+ pus.add(au)
383
+ au = AlternateUnit("psi·s", p25, c13)
384
+ pus.add(au)
385
+ au = AlternateUnit("inHg·s", p25, c14)
386
+ pus.add(au)
387
+
388
+ p32 = PrimaryUnit("VA·s")
389
+ pus.add(p32)
390
+ au = AlternateUnit("VAh", p32, c3)
391
+ pus.add(au)
392
+ pus.add_scaled(au, "yVAh", 1e+24, "yocto")
393
+ pus.add_scaled(au, "zVAh", 1e+21, "zepto")
394
+ pus.add_scaled(au, "aVAh", 1e+18, "atto")
395
+ pus.add_scaled(au, "fVAh", 1000000000000000, "femto")
396
+ pus.add_scaled(au, "pVAh", 1000000000000, "pico")
397
+ pus.add_scaled(au, "nVAh", 1000000000, "nano")
398
+ pus.add_scaled(au, "μVAh", 1000000, "micro")
399
+ pus.add_scaled(au, "mVAh", 1000, "milli")
400
+ pus.add_scaled(au, "kVAh", 1 / 1000, "kilo")
401
+ pus.add_scaled(au, "MVAh", 1 / 1000000, "mega")
402
+ pus.add_scaled(au, "GVAh", 1 / 1000000000, "giga")
403
+ pus.add_scaled(au, "TVAh", 1 / 1000000000000, "tera")
404
+ pus.add_scaled(au, "PVAh", 1 / 1000000000000000, "peta")
405
+ pus.add_scaled(au, "EVAh", 1 / 1e+18, "exa")
406
+ pus.add_scaled(au, "ZVAh", 1 / 1e+21, "zetta")
407
+ pus.add_scaled(au, "YVAh", 1 / 1e+24, "yotta")
408
+
409
+ p33 = PrimaryUnit("V·s")
410
+ pus.add(p33)
411
+ au = AlternateUnit("Vh", p33, c3)
412
+ pus.add(au)
413
+ pus.add_scaled(au, "yVh", 1e+24, "yocto")
414
+ pus.add_scaled(au, "zVh", 1e+21, "zepto")
415
+ pus.add_scaled(au, "aVh", 1e+18, "atto")
416
+ pus.add_scaled(au, "fVh", 1000000000000000, "femto")
417
+ pus.add_scaled(au, "pVh", 1000000000000, "pico")
418
+ pus.add_scaled(au, "nVh", 1000000000, "nano")
419
+ pus.add_scaled(au, "μVh", 1000000, "micro")
420
+ pus.add_scaled(au, "mVh", 1000, "milli")
421
+ pus.add_scaled(au, "kVh", 1 / 1000, "kilo")
422
+ pus.add_scaled(au, "MVh", 1 / 1000000, "mega")
423
+ pus.add_scaled(au, "GVh", 1 / 1000000000, "giga")
424
+ pus.add_scaled(au, "TVh", 1 / 1000000000000, "tera")
425
+ pus.add_scaled(au, "PVh", 1 / 1000000000000000, "peta")
426
+ pus.add_scaled(au, "EVh", 1 / 1e+18, "exa")
427
+ pus.add_scaled(au, "ZVh", 1 / 1e+21, "zetta")
428
+ pus.add_scaled(au, "YVh", 1 / 1e+24, "yotta")
429
+
430
+ c0 = PhysicalUnitConversion(False,
431
+ lambda x, t=None: 0.00135962115516133*x,
432
+ lambda x, t=None: 735.499*x
433
+ )
434
+ au = AlternateUnit("hp", p0, c0)
435
+ pus.add(au)
436
+
437
+ c1 = PhysicalUnitConversion(False,
438
+ lambda x, t=None: 3.412141633*x,
439
+ lambda x, t=None: 0.293071070183211*x
440
+ )
441
+ au = AlternateUnit("Btu/h", p0, c1)
442
+ pus.add(au)
443
+ pus.add_scaled(au, "MBH", 1 / 1000)
444
+
445
+ c2 = PhysicalUnitConversion(False,
446
+ lambda x, t=None: 3.412141633e-5*x,
447
+ lambda x, t=None: 29307.1070183211*x
448
+ )
449
+ au = AlternateUnit("therm/h", p0, c2)
450
+ pus.add(au)
451
+
452
+ p34 = PrimaryUnit("W·s")
453
+ pus.add(p34)
454
+ au = AlternateUnit("Wh", p34, c3)
455
+ pus.add(au)
456
+ pus.add_scaled(au, "yWh", 1e+24, "yocto")
457
+ pus.add_scaled(au, "zWh", 1e+21, "zepto")
458
+ pus.add_scaled(au, "aWh", 1e+18, "atto")
459
+ pus.add_scaled(au, "fWh", 1000000000000000, "femto")
460
+ pus.add_scaled(au, "pWh", 1000000000000, "pico")
461
+ pus.add_scaled(au, "nWh", 1000000000, "nano")
462
+ pus.add_scaled(au, "μWh", 1000000, "micro")
463
+ pus.add_scaled(au, "mWh", 1000, "milli")
464
+ pus.add_scaled(au, "kWh", 1 / 1000, "kilo")
465
+ pus.add_scaled(au, "MWh", 1 / 1000000, "mega")
466
+ pus.add_scaled(au, "GWh", 1 / 1000000000, "giga")
467
+ pus.add_scaled(au, "TWh", 1 / 1000000000000, "tera")
468
+ pus.add_scaled(au, "PWh", 1 / 1000000000000000, "peta")
469
+ pus.add_scaled(au, "EWh", 1 / 1e+18, "exa")
470
+ pus.add_scaled(au, "ZWh", 1 / 1e+21, "zetta")
471
+ pus.add_scaled(au, "YWh", 1 / 1e+24, "yotta")
472
+
473
+ c4 = PhysicalUnitConversion(False,
474
+ lambda x, t=None: x,
475
+ lambda x, t=None: x
476
+ )
477
+ au = AlternateUnit("J", p34, c4)
478
+ pus.add(au)
479
+
480
+ c5 = PhysicalUnitConversion(False,
481
+ lambda x, t=None: 0.000947817077749151*x,
482
+ lambda x, t=None: 1055.0559*x
483
+ )
484
+ au = AlternateUnit("Btu", p34, c5)
485
+ pus.add(au)
486
+
487
+ c6 = PhysicalUnitConversion(False,
488
+ lambda x, t=None: 9.47817077749151e-9*x,
489
+ lambda x, t=None: 105505590.0*x
490
+ )
491
+ au = AlternateUnit("therm", p34, c6)
492
+ pus.add(au)
493
+
494
+ p35 = PrimaryUnit("W·s/m²")
495
+ pus.add(p35)
496
+ au = AlternateUnit("Wh/m²", p35, c3)
497
+ pus.add(au)
498
+ pus.add_scaled(au, "yWh/m²", 1e+24, "yocto")
499
+ pus.add_scaled(au, "zWh/m²", 1e+21, "zepto")
500
+ pus.add_scaled(au, "aWh/m²", 1e+18, "atto")
501
+ pus.add_scaled(au, "fWh/m²", 1000000000000000, "femto")
502
+ pus.add_scaled(au, "pWh/m²", 1000000000000, "pico")
503
+ pus.add_scaled(au, "nWh/m²", 1000000000, "nano")
504
+ pus.add_scaled(au, "μWh/m²", 1000000, "micro")
505
+ pus.add_scaled(au, "mWh/m²", 1000, "milli")
506
+ pus.add_scaled(au, "kWh/m²", 1 / 1000, "kilo")
507
+ pus.add_scaled(au, "MWh/m²", 1 / 1000000, "mega")
508
+ pus.add_scaled(au, "GWh/m²", 1 / 1000000000, "giga")
509
+ pus.add_scaled(au, "TWh/m²", 1 / 1000000000000, "tera")
510
+ pus.add_scaled(au, "PWh/m²", 1 / 1000000000000000, "peta")
511
+ pus.add_scaled(au, "EWh/m²", 1 / 1e+18, "exa")
512
+ pus.add_scaled(au, "ZWh/m²", 1 / 1e+21, "zetta")
513
+ pus.add_scaled(au, "YWh/m²", 1 / 1e+24, "yotta")
514
+
515
+ c20 = PhysicalUnitConversion(False,
516
+ lambda x, t=None: 0.00220462*x,
517
+ lambda x, t=None: 453.59290943564*x
518
+ )
519
+ au = AlternateUnit("lbs", p27, c20)
520
+ pus.add(au)
521
+
522
+ c21 = PhysicalUnitConversion(False,
523
+ lambda x, t=None: 1.0e-6*x,
524
+ lambda x, t=None: 1000000.0*x
525
+ )
526
+ au = AlternateUnit("T", p27, c21)
527
+ pus.add(au)
528
+ pus.add_scaled(au, "kT", 1 / 1000, "kiloton")
529
+ pus.add_scaled(au, "MT", 1 / 1000000, "megaton")
530
+ pus.add_scaled(au, "GT", 1 / 1000000000, "gigaton")
531
+ pus.add_scaled(au, "TT", 1 / 1000000000000, "teraton")
532
+ pus.add_scaled(au, "PT", 1 / 1000000000000000, "petaton")
533
+ au = AlternateUnit("lbs/s", p10, c20)
534
+ pus.add(au)
535
+ au = AlternateUnit("lbs·s", p28, c20)
536
+ pus.add(au)
537
+
538
+ c17 = PhysicalUnitConversion(False,
539
+ lambda x, t=None: 1.09361329833771*x,
540
+ lambda x, t=None: 0.9144*x
541
+ )
542
+ au = AlternateUnit("yd", p12, c17)
543
+ pus.add(au)
544
+
545
+ c18 = PhysicalUnitConversion(False,
546
+ lambda x, t=None: 3.28083989501312*x,
547
+ lambda x, t=None: 0.3048*x
548
+ )
549
+ au = AlternateUnit("ft", p12, c18)
550
+ pus.add(au)
551
+
552
+ c19 = PhysicalUnitConversion(False,
553
+ lambda x, t=None: 0.000621371192237334*x,
554
+ lambda x, t=None: 1609.344*x
555
+ )
556
+ au = AlternateUnit("mi", p12, c19)
557
+ pus.add(au)
558
+
559
+ c15 = PhysicalUnitConversion(False,
560
+ lambda x, t=None: 3600*x,
561
+ lambda x, t=None: (1/3600)*x
562
+ )
563
+ au = AlternateUnit("m/h", p11, c15)
564
+ pus.add(au)
565
+ pus.add_scaled(au, "ym/h", 1e+24, "yocto")
566
+ pus.add_scaled(au, "zm/h", 1e+21, "zepto")
567
+ pus.add_scaled(au, "am/h", 1e+18, "atto")
568
+ pus.add_scaled(au, "fm/h", 1000000000000000, "femto")
569
+ pus.add_scaled(au, "pm/h", 1000000000000, "pico")
570
+ pus.add_scaled(au, "nm/h", 1000000000, "nano")
571
+ pus.add_scaled(au, "μm/h", 1000000, "micro")
572
+ pus.add_scaled(au, "mm/h", 1000, "milli")
573
+ pus.add_scaled(au, "km/h", 1 / 1000, "kilo")
574
+ pus.add_scaled(au, "Mm/h", 1 / 1000000, "mega")
575
+ pus.add_scaled(au, "Gm/h", 1 / 1000000000, "giga")
576
+ pus.add_scaled(au, "Tm/h", 1 / 1000000000000, "tera")
577
+ pus.add_scaled(au, "Pm/h", 1 / 1000000000000000, "peta")
578
+ pus.add_scaled(au, "Em/h", 1 / 1e+18, "exa")
579
+ pus.add_scaled(au, "Zm/h", 1 / 1e+21, "zetta")
580
+ pus.add_scaled(au, "Ym/h", 1 / 1e+24, "yotta")
581
+
582
+ c16 = PhysicalUnitConversion(False,
583
+ lambda x, t=None: 2.2369362920544*x,
584
+ lambda x, t=None: 0.44704*x
585
+ )
586
+ au = AlternateUnit("mph", p11, c16)
587
+ pus.add(au)
588
+
589
+ p36 = PrimaryUnit("m³")
590
+ pus.add(p36)
591
+
592
+ c22 = PhysicalUnitConversion(False,
593
+ lambda x, t=None: 1000.0*x,
594
+ lambda x, t=None: 0.001*x
595
+ )
596
+ au = AlternateUnit("L", p36, c22)
597
+ pus.add(au)
598
+
599
+ c25 = PhysicalUnitConversion(False,
600
+ lambda x, t=None: 264.200792602378*x,
601
+ lambda x, t=None: 0.003785*x
602
+ )
603
+ au = AlternateUnit("gal", p36, c25)
604
+ pus.add(au)
605
+
606
+ c30 = PhysicalUnitConversion(False,
607
+ lambda x, t=None: 35.314667*x,
608
+ lambda x, t=None: 0.0283168463686774*x
609
+ )
610
+ au = AlternateUnit("ft³", p36, c30)
611
+ pus.add(au)
612
+
613
+ c31 = PhysicalUnitConversion(False,
614
+ lambda x, t=None: 0.35314667*x,
615
+ lambda x, t=None: 2.83168463686774*x
616
+ )
617
+ au = AlternateUnit("ccf", p36, c31)
618
+ pus.add(au)
619
+ au = AlternateUnit("L/s", p23, c22)
620
+ pus.add(au)
621
+
622
+ c23 = PhysicalUnitConversion(False,
623
+ lambda x, t=None: 60000.0*x,
624
+ lambda x, t=None: 1.66666666666667e-5*x
625
+ )
626
+ au = AlternateUnit("L/m", p23, c23)
627
+ pus.add(au)
628
+
629
+ c24 = PhysicalUnitConversion(False,
630
+ lambda x, t=None: 3600000.0*x,
631
+ lambda x, t=None: 2.77777777777778e-7*x
632
+ )
633
+ au = AlternateUnit("L/h", p23, c24)
634
+ pus.add(au)
635
+ au = AlternateUnit("gal/s", p23, c25)
636
+ pus.add(au)
637
+
638
+ c26 = PhysicalUnitConversion(False,
639
+ lambda x, t=None: 15852.0475561427*x,
640
+ lambda x, t=None: 6.30833333333334e-5*x
641
+ )
642
+ au = AlternateUnit("gpm", p23, c26)
643
+ pus.add(au)
644
+
645
+ c27 = PhysicalUnitConversion(False,
646
+ lambda x, t=None: 951122.85336856*x,
647
+ lambda x, t=None: 1.05138888888889e-6*x
648
+ )
649
+ au = AlternateUnit("gph", p23, c27)
650
+ pus.add(au)
651
+
652
+ c28 = PhysicalUnitConversion(False,
653
+ lambda x, t=None: 127132.8012*x,
654
+ lambda x, t=None: 7.86579065796593e-6*x
655
+ )
656
+ au = AlternateUnit("ft³/h", p23, c28)
657
+ pus.add(au)
658
+
659
+ c29 = PhysicalUnitConversion(False,
660
+ lambda x, t=None: 1271.328012*x,
661
+ lambda x, t=None: 0.000786579065796593*x
662
+ )
663
+ au = AlternateUnit("ccf/h", p23, c29)
664
+ pus.add(au)
665
+
666
+ p37 = PrimaryUnit("m·s")
667
+ pus.add(p37)
668
+ au = AlternateUnit("ft·s", p37, c18)
669
+ pus.add(au)
670
+
671
+ p38 = PrimaryUnit("var·s")
672
+ pus.add(p38)
673
+ au = AlternateUnit("varh", p38, c3)
674
+ pus.add(au)
675
+ pus.add_scaled(au, "yvarh", 1e+24, "yocto")
676
+ pus.add_scaled(au, "zvarh", 1e+21, "zepto")
677
+ pus.add_scaled(au, "avarh", 1e+18, "atto")
678
+ pus.add_scaled(au, "fvarh", 1000000000000000, "femto")
679
+ pus.add_scaled(au, "pvarh", 1000000000000, "pico")
680
+ pus.add_scaled(au, "nvarh", 1000000000, "nano")
681
+ pus.add_scaled(au, "μvarh", 1000000, "micro")
682
+ pus.add_scaled(au, "mvarh", 1000, "milli")
683
+ pus.add_scaled(au, "kvarh", 1 / 1000, "kilo")
684
+ pus.add_scaled(au, "Mvarh", 1 / 1000000, "mega")
685
+ pus.add_scaled(au, "Gvarh", 1 / 1000000000, "giga")
686
+ pus.add_scaled(au, "Tvarh", 1 / 1000000000000, "tera")
687
+ pus.add_scaled(au, "Pvarh", 1 / 1000000000000000, "peta")
688
+ pus.add_scaled(au, "Evarh", 1 / 1e+18, "exa")
689
+ pus.add_scaled(au, "Zvarh", 1 / 1e+21, "zetta")
690
+ pus.add_scaled(au, "Yvarh", 1 / 1e+24, "yotta")
691
+
692
+ c7 = PhysicalUnitConversion(False,
693
+ lambda x, t=None: (9/5)*x + 32,
694
+ lambda x, t=None: (5/9)*x - 160/9,
695
+ lambda x, t=None: (9/5)*x,
696
+ lambda y, t=None: (5/9)*y
697
+ )
698
+ au = AlternateUnit("°F", p8, c7)
699
+ pus.add(au)
700
+
701
+ c8 = PhysicalUnitConversion(False,
702
+ lambda x, t=None: x + 273.15,
703
+ lambda x, t=None: x - 273.15,
704
+ lambda x, t=None: x,
705
+ lambda y, t=None: y
706
+ )
707
+ au = AlternateUnit("°K", p8, c8)
708
+ pus.add(au)
709
+
710
+ c9 = PhysicalUnitConversion(True,
711
+ lambda x, t=None: 273.15*t + x,
712
+ lambda x, t=None: -273.15*t + x,
713
+ lambda x, t=None: x,
714
+ lambda y, t=None: y
715
+ )
716
+ au = AlternateUnit("°K·s", p9, c9)
717
+ pus.add(au)
718
+ pus.add_scaled(au, "°K·h", 1 / 3600, "Kelvin degree hours")
719
+ pus.add_scaled(au, "°K·d", 1 / 86400, "Kelvin degree days")
720
+
721
+ c10 = PhysicalUnitConversion(True,
722
+ lambda x, t=None: 32*t + (9/5)*x,
723
+ lambda x, t=None: -160/9*t + (5/9)*x,
724
+ lambda x, t=None: (9/5)*x,
725
+ lambda y, t=None: (5/9)*y
726
+ )
727
+ au = AlternateUnit("°F·s", p9, c10)
728
+ pus.add(au)
729
+ pus.add_scaled(au, "°F·h", 1 / 3600, "Fahrenheight degree hours")
730
+ pus.add_scaled(au, "°F·d", 1 / 86400, "Fahrenheit degree days")
731
+
732
+ return pus
733
+
734
+ class UnitTableEntry:
735
+ def __init__(self, fix_scale=None, rate_unit=None,
736
+ cumul_scale=None, cumul_unit=None,
737
+ name=None):
738
+ self.fix_scale = fix_scale
739
+ self.rate_unit = rate_unit
740
+ self.cumul_scale = cumul_scale
741
+ self.cumul_unit = cumul_unit
742
+ self.name = name
743
+
744
+ class ConversionTableEntry:
745
+ def __init__(self, unit=None, time_dependent=False,
746
+ calc=None, inverse=None):
747
+ self.unit = unit
748
+ self.time_dependent = time_dependent
749
+ self.calc = calc
750
+ self.inverse = inverse
751
+
752
+ class Units:
753
+
754
+ # Preferred units for METRIC and IMPERIAL systems:
755
+ preferred = [
756
+ ['kW', 'kWh', 'kVA', 'kVAh', 'kvar', 'kvarh', 'kg', 'kg/s',
757
+ 'kWh/m²', 'km/h', 'hPa', 'Ah', 'Vh', 'L/m', 'L', '°C',
758
+ '°C·d'],
759
+ ['kW', 'kWh', 'kVA', 'kVAh', 'kvar', 'kvarh', 'lbs', 'lbs/s',
760
+ 'kWh/m²', 'mph', 'inHg', 'Ah', 'Vh', 'ft', '°F', '°F·d',
761
+ 'lbs·s', 'inHg·s', 'ft·s', 'gpm', 'gal']
762
+ ]
763
+
764
+ table = {
765
+ 'P': UnitTableEntry(fix_scale=1, rate_unit='W',
766
+ cumul_scale=1 / 3600000, cumul_unit='kWh',
767
+ name='Power'),
768
+ 'S': UnitTableEntry(fix_scale=1, rate_unit='VA',
769
+ cumul_scale=1 / 3600000, cumul_unit='kVAh',
770
+ name='Apparent Power'),
771
+ 'V': UnitTableEntry(fix_scale=1000, rate_unit='V',
772
+ cumul_scale=1 / 3600000, cumul_unit='Vh',
773
+ name='Voltage'),
774
+ 'I': UnitTableEntry(fix_scale=1000, rate_unit='A',
775
+ cumul_scale=1 / 3600000, cumul_unit='Ah',
776
+ name='Current'),
777
+ 'F': UnitTableEntry(fix_scale=1000, rate_unit='Hz',
778
+ cumul_scale=1 / 1000, cumul_unit='Hz·s',
779
+ name='Frequency'),
780
+ 'THD': UnitTableEntry(fix_scale=1000, rate_unit='%',
781
+ cumul_scale=1 / 1000, cumul_unit='%·s',
782
+ name='THD'),
783
+ 'T': UnitTableEntry(fix_scale=1000, rate_unit='°C',
784
+ cumul_scale=1 / 1000, cumul_unit='°C·s',
785
+ name='Temperature'),
786
+ 'Q': UnitTableEntry(fix_scale=1, rate_unit='g/s',
787
+ cumul_scale=1 / 1000, cumul_unit='kg',
788
+ name='Mass flow'),
789
+ 'v': UnitTableEntry(fix_scale=1000, rate_unit='m/s',
790
+ cumul_scale=1 / 1000, cumul_unit='m',
791
+ name='Speed'),
792
+ '#': UnitTableEntry(fix_scale=1, rate_unit='',
793
+ cumul_scale=1, cumul_unit='s',
794
+ name='Whole number'),
795
+ 'R': UnitTableEntry(fix_scale=1, rate_unit='Ω',
796
+ cumul_scale=1, cumul_unit='Ω·s',
797
+ name='Resistance'),
798
+ 'Ee': UnitTableEntry(fix_scale=1, rate_unit='W/m²',
799
+ cumul_scale=1 / 3600000, cumul_unit='kWh/m²',
800
+ name='Irradiance'),
801
+ 'PQ': UnitTableEntry(fix_scale=1, rate_unit='var',
802
+ cumul_scale=1 / 3600000, cumul_unit='kvarh',
803
+ name='Reactive Power'),
804
+ '$': UnitTableEntry(fix_scale=536870912, rate_unit='${currency}/s',
805
+ cumul_scale=1 / 536870912, cumul_unit='${currency}',
806
+ name='Monetary'),
807
+ 'a': UnitTableEntry(fix_scale=1000, rate_unit='°',
808
+ cumul_scale=1 / 1000, cumul_unit='°·s',
809
+ name='Angle'),
810
+ 'h': UnitTableEntry(fix_scale=1000, rate_unit='%',
811
+ cumul_scale=1 / 1000, cumul_unit='%·s',
812
+ name='Humidity'),
813
+ 'Qv': UnitTableEntry(fix_scale=1000000000, rate_unit='m³/s',
814
+ cumul_scale=1 / 1000000, cumul_unit='L',
815
+ name='Volumetric flow'),
816
+ 'Pa': UnitTableEntry(fix_scale=1, rate_unit='Pa',
817
+ cumul_scale=1, cumul_unit='Pa·s',
818
+ name='Pressure'),
819
+ 'Qe': UnitTableEntry(fix_scale=1000, rate_unit='Ah',
820
+ cumul_scale=1 / 1000, cumul_unit='Ah·s',
821
+ name='Charge'),
822
+ 'Vdc': UnitTableEntry(fix_scale=1000, rate_unit='V',
823
+ cumul_scale=1 / 3600000, cumul_unit='Vh',
824
+ name='Voltage (mean)'),
825
+ 'Idc': UnitTableEntry(fix_scale=1000, rate_unit='A',
826
+ cumul_scale=1 / 3600000, cumul_unit='Ah',
827
+ name='Current (mean)'),
828
+ 'm': UnitTableEntry(fix_scale=1000, rate_unit='g',
829
+ cumul_scale=1 / 1000, cumul_unit='g·s',
830
+ name='Mass'),
831
+ '#3': UnitTableEntry(fix_scale=1000, rate_unit='',
832
+ cumul_scale=1 / 1000, cumul_unit='s',
833
+ name='Number with 3 decimals'),
834
+ 'aq': UnitTableEntry(fix_scale=1000, rate_unit='',
835
+ cumul_scale=1 / 1000, cumul_unit='s',
836
+ name='Air Quality Index (0=good, 500=bad)'),
837
+ '%': UnitTableEntry(fix_scale=1000, rate_unit='%',
838
+ cumul_scale=1 / 1000, cumul_unit='%·s',
839
+ name='Percentage'),
840
+ 'ppm': UnitTableEntry(fix_scale=1000, rate_unit='ppm',
841
+ cumul_scale=1 / 1000, cumul_unit='ppm·s',
842
+ name='Parts per million'),
843
+ 'd': UnitTableEntry(fix_scale=1, rate_unit='',
844
+ cumul_scale=1, cumul_unit='',
845
+ name='Discrete number'),
846
+ 'dT': UnitTableEntry(fix_scale=1000, rate_unit='°C',
847
+ cumul_scale=1 / 1000, cumul_unit='°C·s',
848
+ name='Temperature difference'),
849
+ }
850
+
851
+ units = _create_units()