Coverage for pylib.py: 81%

26 statements  

« 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 

5 

6# ============================================================================== 

7# autoconvert 

8# ============================================================================== 

9ALPHA = set(string.ascii_letters) 

10DIGITS = set(string.digits) 

11NULLSET = set() 

12ESET = set("Ee") 

13 

14 

15def autoconvert_array(fields): 

16 res = [autoconvert(f) for f in fields] 

17 return res 

18 

19 

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) 

33 

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