convert.py revision 1519
110994Sandreas.sandberg@arm.com# metric prefixes
210994Sandreas.sandberg@arm.comexa  = 1.0e18
310994Sandreas.sandberg@arm.competa = 1.0e15
410994Sandreas.sandberg@arm.comtera = 1.0e12
510994Sandreas.sandberg@arm.comgiga = 1.0e9
610994Sandreas.sandberg@arm.commega = 1.0e6
710994Sandreas.sandberg@arm.comkilo = 1.0e3
810994Sandreas.sandberg@arm.com
910994Sandreas.sandberg@arm.commilli = 1.0e-3
1010994Sandreas.sandberg@arm.commicro = 1.0e-6
1110994Sandreas.sandberg@arm.comnano  = 1.0e-9
1210994Sandreas.sandberg@arm.compico  = 1.0e-12
1310994Sandreas.sandberg@arm.comfemto = 1.0e-15
1410994Sandreas.sandberg@arm.comatto  = 1.0e-18
1510994Sandreas.sandberg@arm.com
1610994Sandreas.sandberg@arm.com# power of 2 prefixes
1710994Sandreas.sandberg@arm.comkibi = 1024
1810994Sandreas.sandberg@arm.commebi = kibi * 1024
1910994Sandreas.sandberg@arm.comgibi = mebi * 1024
2010994Sandreas.sandberg@arm.comtebi = gibi * 1024
2110994Sandreas.sandberg@arm.compebi = tebi * 1024
2210994Sandreas.sandberg@arm.comexbi = pebi * 1024
2310994Sandreas.sandberg@arm.com
2410994Sandreas.sandberg@arm.com# memory size configuration stuff
2510994Sandreas.sandberg@arm.comdef to_integer(value):
2610994Sandreas.sandberg@arm.com    if not isinstance(value, str):
2710994Sandreas.sandberg@arm.com        result = int(value)
2810994Sandreas.sandberg@arm.com    elif value.endswith('Ei'):
2910994Sandreas.sandberg@arm.com        result = int(value[:-2]) * exbi
3010994Sandreas.sandberg@arm.com    elif value.endswith('Pi'):
3110994Sandreas.sandberg@arm.com        result = int(value[:-2]) * pebi
3210994Sandreas.sandberg@arm.com    elif value.endswith('Ti'):
3310994Sandreas.sandberg@arm.com        result = int(value[:-2]) * tebi
3410994Sandreas.sandberg@arm.com    elif value.endswith('Gi'):
3510994Sandreas.sandberg@arm.com        result = int(value[:-2]) * gibi
3610994Sandreas.sandberg@arm.com    elif value.endswith('Mi'):
3710994Sandreas.sandberg@arm.com        result = int(value[:-2]) * mebi
3810994Sandreas.sandberg@arm.com    elif value.endswith('ki'):
3910994Sandreas.sandberg@arm.com        result = int(value[:-2]) * kibi
4010994Sandreas.sandberg@arm.com    elif value.endswith('E'):
4110994Sandreas.sandberg@arm.com        result = int(value[:-1]) * exa
4210994Sandreas.sandberg@arm.com    elif value.endswith('P'):
4310994Sandreas.sandberg@arm.com        result = int(value[:-1]) * peta
4410994Sandreas.sandberg@arm.com    elif value.endswith('T'):
4510994Sandreas.sandberg@arm.com        result = int(value[:-1]) * tera
4610994Sandreas.sandberg@arm.com    elif value.endswith('G'):
4710994Sandreas.sandberg@arm.com        result = int(value[:-1]) * giga
4810994Sandreas.sandberg@arm.com    elif value.endswith('M'):
4910994Sandreas.sandberg@arm.com        result = int(value[:-1]) * mega
50    elif value.endswith('k'):
51        result = int(value[:-1]) * kilo
52    elif value.endswith('m'):
53        result = int(value[:-1]) * milli
54    elif value.endswith('u'):
55        result = int(value[:-1]) * micro
56    elif value.endswith('n'):
57        result = int(value[:-1]) * nano
58    elif value.endswith('p'):
59        result = int(value[:-1]) * pico
60    elif value.endswith('f'):
61        result = int(value[:-1]) * femto
62    else:
63        result = int(value)
64
65    return result
66
67def to_bool(val):
68    t = type(val)
69    if t == bool:
70        return val
71
72    if t == None:
73        return False
74
75    if t == int or t == long:
76        return bool(val)
77
78    if t == str:
79        val = val.lower()
80        if val == "true" or val == "t" or val == "yes" or val == "y":
81            return True
82        elif val == "false" or val == "f" or val == "no" or val == "n":
83            return False
84
85    return to_integer(val) != 0
86
87def to_frequency(value):
88    if not isinstance(value, str):
89        result = float(value)
90    elif value.endswith('THz'):
91        result = float(value[:-3]) * tera
92    elif value.endswith('GHz'):
93        result = float(value[:-3]) * giga
94    elif value.endswith('MHz'):
95        result = float(value[:-3]) * mega
96    elif value.endswith('kHz'):
97        result = float(value[:-3]) * kilo
98    elif value.endswith('Hz'):
99        result = float(value[:-2])
100    else:
101        result = float(value)
102
103    return result
104
105def to_latency(value):
106    if not isinstance(value, str):
107        result = float(value)
108    elif value.endswith('c'):
109        result = float(value[:-1])
110    elif value.endswith('ps'):
111        result = float(value[:-2]) * pico
112    elif value.endswith('ns'):
113        result = float(value[:-2]) * nano
114    elif value.endswith('us'):
115        result = float(value[:-2]) * micro
116    elif value.endswith('ms'):
117        result = float(value[:-2]) * milli
118    elif value.endswith('s'):
119        result = float(value[:-1])
120    else:
121        result = float(value)
122
123    return result;
124
125def to_network_bandwidth(value):
126    if not isinstance(value, str):
127        result = float(value)
128    elif value.endswith('Tbps'):
129        result = float(value[:-3]) * tera
130    elif value.endswith('Gbps'):
131        result = float(value[:-3]) * giga
132    elif value.endswith('Mbps'):
133        result = float(value[:-3]) * mega
134    elif value.endswith('kbps'):
135        result = float(value[:-3]) * kilo
136    elif value.endswith('bps'):
137        result = float(value[:-2])
138    else:
139        result = float(value)
140
141    return result
142
143def to_memory_bandwidth(value):
144    if not isinstance(value, str):
145        result = int(value)
146    elif value.endswith('PB/s'):
147        result = int(value[:-4]) * pebi
148    elif value.endswith('TB/s'):
149        result = int(value[:-4]) * tebi
150    elif value.endswith('GB/s'):
151        result = int(value[:-4]) * gibi
152    elif value.endswith('MB/s'):
153        result = int(value[:-4]) * mebi
154    elif value.endswith('kB/s'):
155        result = int(value[:-4]) * kibi
156    elif value.endswith('B/s'):
157        result = int(value[:-3])
158    else:
159        result = int(value)
160
161    return result
162
163def to_memory_size(value):
164    if not isinstance(value, str):
165        result = int(value)
166    elif value.endswith('PB'):
167        result = int(value[:-2]) * pebi
168    elif value.endswith('TB'):
169        result = int(value[:-2]) * tebi
170    elif value.endswith('GB'):
171        result = int(value[:-2]) * gibi
172    elif value.endswith('MB'):
173        result = int(value[:-2]) * mebi
174    elif value.endswith('kB'):
175        result = int(value[:-2]) * kibi
176    elif value.endswith('B'):
177        result = int(value[:-1])
178    else:
179        result = int(value)
180
181    return result
182