Coverage for pylib.py: 81%
26 statements
« prev ^ index » next coverage.py v7.7.0, created at 2025-03-20 20:51 +0100
« prev ^ index » next coverage.py v7.7.0, created at 2025-03-20 20:51 +0100
1"""
2Python fallbacks when clib.pyx not compiled
3"""
4import string
6# ==============================================================================
7# autoconvert
8# ==============================================================================
9ALPHA = set(string.ascii_letters)
10DIGITS = set(string.digits)
11NULLSET = set()
12ESET = set("Ee")
15def autoconvert_array(fields):
16 res = [autoconvert(f) for f in fields]
17 return res
20def autoconvert(field):
21 field = field.strip()
22 if not field:
23 # ------------------------------------------------------
24 # Empty
25 return None
26 # ------------------------------------------------------------------------
27 # simple continuation lines
28 if field == "+":
29 return "+"
30 s = set(field)
31 if "." not in s and s & ALPHA == NULLSET:
32 return int(field)
34 if "." in s and ((s - ESET) & ALPHA == NULLSET):
35 # ------------------------------------------------------
36 # Real
37 # special NASTRAN format +/-XXX+/-YYY = +/-XXXE+/-YYY
38 i = field.rfind("+")
39 if i > 0 and field[i - 1] != "E":
40 return float(field[:i] + "E" + field[i:])
41 i = field.rfind("-")
42 if i > 0 and field[i - 1] != "E":
43 return float(field[:i] + "E" + field[i:])
44 # regular float
45 return float(field)
46 else:
47 # ------------------------------------------------------
48 # string
49 return field