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 names = param_names(self.run, i)
59 values = param_values(self.run, i)
60
61
62 if names == None or values == None:
63 continue
64
65
66 if len(names) != len(values):
67 raise RelaxError, "The names vector " + `names` + " is of a different length to the values vector " + `values` + "."
68
69
70 flag = 0
71 for j in xrange(len(names)):
72
73 if eliminate(names[j], values[j], self.run, i, args):
74 flag = 1
75
76
77 if flag:
78 unselect(self.run, i)
79