20 Constructor |
20 Constructor |
21 ''' |
21 ''' |
22 self.nameIdDict = {} |
22 self.nameIdDict = {} |
23 self.idNameDict = {} |
23 self.idNameDict = {} |
24 self.featureIdDict={} |
24 self.featureIdDict={} |
25 self.maxNameId = 0 |
25 self.maxNameId = 1 |
26 self.maxFeatureId = 0 |
26 self.maxFeatureId = 0 |
27 self.featureDict = {} |
27 self.featureDict = {} |
28 self.dependenciesDict = {} |
28 self.dependenciesDict = {} |
29 self.accessibleDict = {} |
29 self.accessibleDict = {} |
30 self.expandedAccessibles = {} |
30 self.expandedAccessibles = {} |
31 self.accFile = '' |
31 self.accFile = '' |
32 self.changed = True |
32 self.changed = True |
|
33 # Unnamed facts |
|
34 self.nameIdDict[''] = 0 |
|
35 self.idNameDict[0] = 'Unnamed Fact' |
33 |
36 |
34 """ |
37 """ |
35 Init functions. nameIdDict, idNameDict, featureIdDict, articleDict get filled! |
38 Init functions. nameIdDict, idNameDict, featureIdDict, articleDict get filled! |
36 """ |
39 """ |
37 def init_featureDict(self,featureFile): |
40 def init_featureDict(self,featureFile): |
151 # line = name:accessibles;features;dependencies |
154 # line = name:accessibles;features;dependencies |
152 line = line.split(':') |
155 line = line.split(':') |
153 name = line[0].strip() |
156 name = line[0].strip() |
154 nameId = self.get_name_id(name) |
157 nameId = self.get_name_id(name) |
155 line = line[1].split(';') |
158 line = line[1].split(';') |
156 # Accessible Ids |
|
157 #unExpAcc = [self.nameIdDict[a.strip()] for a in line[0].split()] |
|
158 #self.accessibleDict[nameId] = unExpAcc |
|
159 self.accessibleDict[nameId] = self.parse_unExpAcc(line[0]) |
|
160 features = self.get_features(line) |
159 features = self.get_features(line) |
161 self.featureDict[nameId] = features |
160 self.featureDict[nameId] = features |
162 self.dependenciesDict[nameId] = [self.nameIdDict[d.strip()] for d in line[2].split()] |
161 try: |
|
162 self.dependenciesDict[nameId] = [self.nameIdDict[d.strip()] for d in line[2].split()] |
|
163 except: |
|
164 unknownDeps = [] |
|
165 for d in line[2].split(): |
|
166 if not self.nameIdDict.has_key(d): |
|
167 unknownDeps.append(d) |
|
168 raise LookupError('Unknown fact used as dependency: %s. Facts need to be introduced before being used as depedency.' % ','.join(unknownDeps)) |
|
169 self.accessibleDict[nameId] = self.parse_unExpAcc(line[0]) |
|
170 |
163 self.changed = True |
171 self.changed = True |
164 return nameId |
172 return nameId |
165 |
173 |
166 def parse_overwrite(self,line): |
174 def parse_overwrite(self,line): |
167 """ |
175 """ |
171 line = line[2:] |
179 line = line[2:] |
172 |
180 |
173 # line = name:dependencies |
181 # line = name:dependencies |
174 line = line.split(':') |
182 line = line.split(':') |
175 name = line[0].strip() |
183 name = line[0].strip() |
176 nameId = self.get_name_id(name) |
184 try: |
177 |
185 nameId = self.nameIdDict[name] |
178 dependencies = [self.nameIdDict[d.strip()] for d in line[1].split()] |
186 except: |
|
187 raise LookupError('Trying to overwrite dependencies for unknown fact: %s. Facts need to be introduced before overwriting them.' % name) |
|
188 try: |
|
189 dependencies = [self.nameIdDict[d.strip()] for d in line[1].split()] |
|
190 except: |
|
191 unknownDeps = [] |
|
192 for d in line[1].split(): |
|
193 if not self.nameIdDict.has_key(d): |
|
194 unknownDeps.append(d) |
|
195 raise LookupError('Unknown fact used as dependency: %s. Facts need to be introduced before being used as depedency.' % ','.join(unknownDeps)) |
179 self.changed = True |
196 self.changed = True |
180 return nameId,dependencies |
197 return nameId,dependencies |
181 |
198 |
182 def parse_problem(self,line): |
199 def parse_problem(self,line): |
183 """ |
200 """ |