def _decompose(self): self.parser = parseLP.parseLP() self.parser.main(self.proj.getFilenamePrefix() + ".spec") # Remove all references to any obstacle regions at this point for r in self.proj.rfi.regions: if r.isObstacle: # Delete corresponding decomposed regions for sub_r in self.parser.proj.regionMapping[r.name]: del self.parser.proj.rfi.regions[self.parser.proj.rfi.indexOfRegionWithName(sub_r)] # Remove decomposed region from any overlapping mappings for k,v in self.parser.proj.regionMapping.iteritems(): if k == r.name: continue if sub_r in v: v.remove(sub_r) # Remove mapping for the obstacle region del self.parser.proj.regionMapping[r.name] #self.proj.rfi.regions = filter(lambda r: not (r.isObstacle or r.name == "boundary"), self.proj.rfi.regions) # save the regions into new region file filename = self.proj.getFilenamePrefix() + '_decomposed.regions' # FIXME: properly support obstacles in non-decomposed maps? if self.proj.compile_options["decompose"]: self.parser.proj.rfi.recalcAdjacency() self.parser.proj.rfi.writeFile(filename) self.proj.regionMapping = self.parser.proj.regionMapping self.proj.writeSpecFile()
def _decompose(self): self.parser = parseLP.parseLP() self.parser.main(self.proj.getFilenamePrefix() + ".spec") # Remove all references to any obstacle regions at this point for r in self.proj.rfi.regions: if r.isObstacle: # Delete corresponding decomposed regions for sub_r in self.parser.proj.regionMapping[r.name]: del self.parser.proj.rfi.regions[ self.parser.proj.rfi.indexOfRegionWithName(sub_r)] # Remove decomposed region from any overlapping mappings for k, v in self.parser.proj.regionMapping.iteritems(): if k == r.name: continue if sub_r in v: v.remove(sub_r) # Remove mapping for the obstacle region del self.parser.proj.regionMapping[r.name] #self.proj.rfi.regions = filter(lambda r: not (r.isObstacle or r.name == "boundary"), self.proj.rfi.regions) # save the regions into new region file filename = self.proj.getFilenamePrefix() + '_decomposed.regions' # FIXME: properly support obstacles in non-decomposed maps? if self.proj.compile_options["decompose"]: self.parser.proj.rfi.recalcAdjacency() self.parser.proj.rfi.writeFile(filename) self.proj.regionMapping = self.parser.proj.regionMapping self.proj.writeSpecFile()
def _decompose(self): self.parser = parseLP.parseLP() self.parser.main(self.proj.getFilenamePrefix() + ".spec") # Remove all references to any obstacle regions at this point for r in self.proj.rfi.regions: if r.isObstacle: # Delete corresponding decomposed regions for sub_r in self.parser.proj.regionMapping[r.name]: del self.parser.proj.rfi.regions[self.parser.proj.rfi.indexOfRegionWithName(sub_r)] # Remove decomposed region from any overlapping mappings for k,v in self.parser.proj.regionMapping.iteritems(): if k == r.name: continue if sub_r in v: v.remove(sub_r) # Remove mapping for the obstacle region del self.parser.proj.regionMapping[r.name] #self.proj.rfi.regions = filter(lambda r: not (r.isObstacle or r.name == "boundary"), self.proj.rfi.regions) # save the regions into new region file filename = self.proj.getFilenamePrefix() + '_decomposed.regions' self.parser.proj.rfi.recalcAdjacency() self.parser.proj.rfi.writeFile(filename) self.proj.regionMapping = self.parser.proj.regionMapping self.proj.writeSpecFile() # substitute the regions name in specs text = self.proj.specText for m in re.finditer(r'near (?P<rA>\w+)', text): text=re.sub(r'near (?P<rA>\w+)', "("+' or '.join(self.parser.proj.regionMapping['near$'+m.group('rA')+'$'+str(50)])+")", text) for m in re.finditer(r'within (?P<dist>\d+) (from|of) (?P<rA>\w+)', text): text=re.sub(r'within ' + m.group('dist')+' (from|of) '+ m.group('rA'), "("+' or '.join(self.parser.proj.regionMapping['near$'+m.group('rA')+'$'+m.group('dist')])+")", text) for m in re.finditer(r'between (?P<rA>\w+) and (?P<rB>\w+)', text): text=re.sub(r'between ' + m.group('rA')+' and '+ m.group('rB'),"("+' or '.join(self.parser.proj.regionMapping['between$'+m.group('rA')+'$and$'+m.group('rB')+"$"])+")", text) for r in self.proj.rfi.regions: if not (r.isObstacle or r.name.lower() == "boundary"): text=re.sub('\\b' + r.name + '\\b', "("+' or '.join(self.parser.proj.regionMapping[r.name])+")", text) self.decomposedSpecText = text