1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from copy import deepcopy
24
25
28 """Class containing the function for model elimination."""
29
30 self.relax = relax
31
32
33 - def eliminate(self, run=None, function=None, args=None):
34 """Function for model elimination."""
35
36
37 self.runs = self.relax.generic.runs.list_of_runs(run)
38
39
40 for self.run in self.runs:
41
42 if not self.run in self.relax.data.run_names:
43 raise RelaxNoRunError, self.run
44
45
46 function_type = self.relax.data.run_types[self.relax.data.run_names.index(self.run)]
47
48
49 eliminate = self.relax.specific_setup.setup('eliminate', function_type)
50 param_names = self.relax.specific_setup.setup('param_names', function_type)
51 param_values = self.relax.specific_setup.setup('param_values', function_type)
52 num_instances = self.relax.specific_setup.setup('num_instances', function_type)
53 unselect = self.relax.specific_setup.setup('unselect', function_type)
54
55
56 for i in xrange(num_instances(self.run)):
57
58 if hasattr(self.relax.data, 'sim_state') and self.relax.data.sim_state.has_key(self.run) and self.relax.data.sim_state[self.run] == 1:
59 sim_state = 1
60 else:
61 sim_state = 0
62
63
64
65
66
67 if sim_state == 0:
68
69 names = param_names(self.run, i)
70 values = param_values(self.run, i)
71
72
73 if names == None or values == None:
74 continue
75
76
77 if len(names) != len(values):
78 raise RelaxError, "The names vector " + `names` + " is of a different length to the values vector " + `values` + "."
79
80
81 flag = 0
82 for j in xrange(len(names)):
83
84 if eliminate(names[j], values[j], self.run, i, args):
85 flag = 1
86
87
88 if flag:
89 unselect(self.run, i)
90
91
92
93
94
95 else:
96
97 for j in xrange(self.relax.data.sim_number[self.run]):
98
99 names = param_names(self.run, i)
100 values = param_values(self.run, i, sim_index=j)
101
102
103 if names == None or values == None:
104 continue
105
106
107 if len(names) != len(values):
108 raise RelaxError, "The names vector " + `names` + " is of a different length to the values vector " + `values` + "."
109
110
111 flag = 0
112 for k in xrange(len(names)):
113
114 if eliminate(names[k], values[k], self.run, i, args):
115 flag = 1
116
117
118 if flag:
119 unselect(self.run, i, sim_index=j)
120