Exemplo n.º 1
0
 def __init__(self, filepath, log):
         self.file_path = filepath
         self.clauses = []
         self.symbols = Literals()
         self.model = {}
         self.log = log
         print "self.log: %s"%self.log
Exemplo n.º 2
0
class DimacsParser(object):
        def __init__(self, filepath, log):
                self.file_path = filepath
                self.clauses = []
                self.symbols = Literals()
                self.model = {}
                self.log = log
                print "self.log: %s"%self.log

        def parse(self):
                
                symbol_list = []
                self.log.debug("******************************************************")
                print "self.file_path: %s"%self.file_path
                print "type: %s"%type(self.file_path)
                print os.path.isfile(str(self.file_path))
                if os.path.isfile(str(self.file_path)):
                        with open(self.file_path) as data:                                
                                data_lines = (line.rstrip("\r\n") for line in data)
                                self.log.debug("data_lines: %s"%data_lines)
                                for line in data_lines:
                                        match_comment = re.match("^p", line)                                        
                                        match_clause = re.match("^[0-9]|^\-", line)
                                        split_lines = line.rsplit(" ")

                                        if match_comment:
                                                print "number of clauses: %s and number of variables: %s" % (split_lines[-1], split_lines[-2])
                                                self.log.debug("number of clauses: %s and number of variables: %s" % (split_lines[-1], split_lines[-2]))
                                        
                                        if match_clause:                                                
                                                clause = [int(split_lines[x]) for x in range(3)]
                                                self.log.debug("adding clause: %s"%clause)
                                                self.clauses.append(clause)
                                                symbol_list.extend(clause)    

                        [self.symbols.add(symbol) for symbol in symbol_list]


        def sentences(self):

                deep_copy = copy.deepcopy(self.clauses)
                self.model = [{'clause':cl, 'original':copy.deepcopy(cl), 'conflict': []} for cl in deep_copy]
                self.log.debug("******************************************************")
                self.log.debug("clauses: %s"%self.clauses)
                self.log.debug("symbols: %s"%self.symbols.literals)
                self.log.debug("model: %s"%self.model)
                self.log.debug("******************************************************")
                
                return (self.clauses, self.symbols, self.model)