1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 """Functions for manipulating NMR-STAR dictionary data."""
24
25
26 from numpy import ndarray
27 from warnings import warn
28
29
31 """Check that there are no None values in the data.
32
33 @param data: The data to check.
34 @type data: anything
35 @param name: The name associated with the data.
36 @type name: str
37 """
38
39
40 missing = False
41
42
43 if isinstance(data, list):
44
45 for i in range(len(data)):
46 if data[i] == None or data[i] == 'None':
47 missing = True
48
49
50 if data == None:
51 missing = True
52
53
54 if missing:
55 raise NameError("Data is missing from the " + name + '.')
56
57
58 -def translate(data, format='str', reverse=False):
59 """Translate all values back-and-forth between Python structures and NMR-STAR strings.
60
61 @param data: The data to translate.
62 @type data: anything
63 @keyword format: The format to convert to. This can be 'str', 'int', or 'float'.
64 @type format: str
65 """
66
67
68 if not reverse:
69
70 if isinstance(data, list) or isinstance(data, ndarray):
71
72 new_data = []
73 for i in range(len(data)):
74 if data[i] == None or data[i] == 'None':
75 new_data.append('?')
76 else:
77 new_data.append(str(data[i]))
78
79
80 elif data == None:
81 new_data = '?'
82
83
84 else:
85 new_data = str(data)
86
87
88 elif data == None:
89 new_data = None
90
91
92 else:
93
94 if format == 'str':
95 convert = str
96 elif format == 'int':
97 convert = int
98 elif format == 'float':
99 convert = float
100
101
102 if isinstance(data, list):
103
104 new_data = []
105 for i in range(len(data)):
106 if data[i] in ['?', '.']:
107 new_data.append(None)
108 else:
109 new_data.append(convert(data[i]))
110
111
112 elif data in ['?', '.']:
113 new_data = None
114
115
116 else:
117 new_data = convert(data)
118
119
120 return new_data
121