Example #1
0
class Logen:
    """
    Maintains the calls to Logen and starts the Prolog session
    """
    
    preferences = None
    def __init__(self):        
        self.prolog = Prolog()
        self.timeout = False
        self.Spec_Time = -1
        

    def start(self,splash=None):
        """
        Starts Prolog and gets prefs
        """        
        self.prolog.startProlog(splash=splash)
        self.get_preferences()
        
        
    def get_syntax(self, filename):
        self.prolog.call("parse_file_syntax('" + filename + "', Syntax)")
        syntax = self.prolog.prologvariables["Syntax"]
        return syntax.split()

    def get_annotations(self, filename, annfile=None):
        if not os.path.exists(filename + ".ann"):
            print "Annotation file '" + filename + ".ann' does not exist"
            return ([], [], "", [])
        if annfile is None:
            annfile = filename + ".ann"

            
        if not self.prolog.call("request_ann('" + filename + "','"+annfile+"', Format, Syntax, Filter, FilSyntax)"):
            print "Request Annotations Failed please check ann file and prolog log"
            raise Exception("Request Ann Failed")
        format = self.prolog.prologvariables["Format"].split()
        syntax = self.prolog.prologvariables["Syntax"].split()
        filter = self.prolog.prologvariables["Filter"]
        filsyntax = self.prolog.prologvariables["FilSyntax"].split()

        #print format
        
        return (format, syntax, filter, filsyntax)

        
    def save_annotations(self, filename, annotations, filters):
        filters = filters.replace("'","\\\'")
        
        self.prolog.call("save_ann('"+filename+"', '"+annotations+"', '"+filters+"')")

    def get_preferences(self):
        if self.preferences == None:
            self.preferences = Preferences(self.prolog)
        return self.preferences
        
    def runcogen(self,filename):
        return self.prolog.call("moduledriver:run_cogen_from_file('%s')" % filename)

    def specialise(self,goal,file,timeout=-1):
        self.timeout = False #reset timeout flag
        if goal.strip().endswith("."):
            goal = goal.strip()[:-1]
        print "Specialise the file %s for goal %s" % (file,goal)
        if self.prolog.call( "atom_ok_to_specialise((%s))" % goal ):
            print "Specialising %s for %s" % (file, goal)
            self.prolog.call("run_cogen_if_necessary('%s')" % file)
            #self.prolog.call("run_cogen_on_plfile('%s')" % file)
            self.prolog.call("specialise_plfile('%s', (%s),rebuild_memo,_,LOGEN_SPEC_TIME,%d,LOGEN_TIMEOUT_RESULT)" % (file, goal,timeout))
            Spec_Time = self.prolog.prologvariables["LOGEN_SPEC_TIME"]
            Timeout_result = self.prolog.prologvariables["LOGEN_TIMEOUT_RESULT"]
            
            if Timeout_result == "time_out":
                print "Specialisation timed out"
                self.timout = True
                raise PrologException("Specialisation Error", "Specialisation Timed out\nCheck annotations or increase the timeout.\nCurrent time out is %dms" % (timeout))
                
            print "Finished specialising plfile in", Spec_Time,"ms"
            self.Spec_Time = Spec_Time
            #self.prolog.call( "moduledriver:rebuild_everything")
            #self.prolog.call("moduledriver:request_pattern('%s', %s)" % (file,goal))
            #self.prolog.call("moduledriver:specialize")
            self.prolog.call("set_preference(last_spec_query,(%s))" % (goal))
            
            return True
            #self.view_spec()
            #self.enable_after_spec()                 
        else:            
            print "GOAL NOT OKAY TO SPECIALISE %s" %goal
            return False

    def specialisecogen3(self, goal, file):
	os.chdir('../../cogen3/')
	print "Specialising using cogen3!"
	os.chdir('../cogen2/logen_source/')

    def quit(self):
        self.prolog.quit()
        
    def restart(self,unused=None):
        self.prolog.quit()
        self.prolog = Prolog()
        self.prolog.startProlog()
        self.preferences = Preferences(self.prolog)

    def rebuild(self):
        os.remove('logen_main.sav')
        self.restart()
        
    def viewStdOut(self):
        self.prolog.viewStdOut()
    def viewStdErr(self):
        self.prolog.viewStdErr()

    def filter_prop(self,filename):
        annfile = filename +".ann"
        #auto_bta_dir = '/home/sjc02r/cvs_root/Asap/Systems/bta/'        
        auto_bta_dir = self.preferences["auto_bta_dir"].strip()
        print auto_bta_dir

        if auto_bta_dir == "None":
            
            print "Please set autobta dir"
            return None
        else:
            logen_bta = auto_bta_dir + '/logen/logenbta.pl'
            auto_bta = auto_bta_dir + '/auto_bta'
            outfile = 'filter.tmp'
            os.system('%s %s %s %s' % (auto_bta,annfile,logen_bta,outfile))
            return outfile
        
    def annotate_file(self, file,mode="safe"):
        print "Annotate File::",file        
        return self.prolog.call("annotateFile('"+file+"','"+file+".ann',%s)" % mode)
        
    def check_string_syntax(self, string):
        self.prolog.call("parse_string_syntax('"+escape_str(string)+"', Syn)")
        syn = self.prolog.prologvariables["Syn"].split()
        #print syn
        return not (len(syn) == 2 and syn[0] == "error")

    def parse_file(self,filename):
        self.prolog.call("parse_file('"+filename+"')")
Example #2
0
 def restart(self,unused=None):
     self.prolog.quit()
     self.prolog = Prolog()
     self.prolog.startProlog()
     self.preferences = Preferences(self.prolog)
Example #3
0
 def __init__(self):        
     self.prolog = Prolog()
     self.timeout = False
     self.Spec_Time = -1
Example #4
0
class Logen:
    """
    Maintains the calls to Logen and starts the Prolog session
    """

    preferences = None

    def __init__(self):
        self.prolog = Prolog()
        self.timeout = False
        self.Spec_Time = -1

    def start(self, splash=None):
        """
        Starts Prolog and gets prefs
        """
        self.prolog.startProlog(splash=splash)
        self.get_preferences()

    def get_syntax(self, filename):
        self.prolog.call("parse_file_syntax('" + filename + "', Syntax)")
        syntax = self.prolog.prologvariables["Syntax"]
        return syntax.split()

    def get_annotations(self, filename, annfile=None):
        if not os.path.exists(filename + ".ann"):
            print "Annotation file '" + filename + ".ann' does not exist"
            return ([], [], "", [])
        if annfile is None:
            annfile = filename + ".ann"

        if not self.prolog.call("request_ann('" + filename + "','" + annfile +
                                "', Format, Syntax, Filter, FilSyntax)"):
            print "Request Annotations Failed please check ann file and prolog log"
            raise Exception("Request Ann Failed")
        format = self.prolog.prologvariables["Format"].split()
        syntax = self.prolog.prologvariables["Syntax"].split()
        filter = self.prolog.prologvariables["Filter"]
        filsyntax = self.prolog.prologvariables["FilSyntax"].split()

        #print format

        return (format, syntax, filter, filsyntax)

    def save_annotations(self, filename, annotations, filters):
        filters = filters.replace("'", "\\\'")

        self.prolog.call("save_ann('" + filename + "', '" + annotations +
                         "', '" + filters + "')")

    def get_preferences(self):
        if self.preferences == None:
            self.preferences = Preferences(self.prolog)
        return self.preferences

    def runcogen(self, filename):
        return self.prolog.call("moduledriver:run_cogen_from_file('%s')" %
                                filename)

    def specialise(self, goal, file, timeout=-1):
        self.timeout = False  #reset timeout flag
        if goal.strip().endswith("."):
            goal = goal.strip()[:-1]
        print "Specialise the file %s for goal %s" % (file, goal)
        if self.prolog.call("atom_ok_to_specialise((%s))" % goal):
            print "Specialising %s for %s" % (file, goal)
            self.prolog.call("run_cogen_if_necessary('%s')" % file)
            #self.prolog.call("run_cogen_on_plfile('%s')" % file)
            self.prolog.call(
                "specialise_plfile('%s', (%s),rebuild_memo,_,LOGEN_SPEC_TIME,%d,LOGEN_TIMEOUT_RESULT)"
                % (file, goal, timeout))
            Spec_Time = self.prolog.prologvariables["LOGEN_SPEC_TIME"]
            Timeout_result = self.prolog.prologvariables[
                "LOGEN_TIMEOUT_RESULT"]

            if Timeout_result == "time_out":
                print "Specialisation timed out"
                self.timout = True
                raise PrologException(
                    "Specialisation Error",
                    "Specialisation Timed out\nCheck annotations or increase the timeout.\nCurrent time out is %dms"
                    % (timeout))

            print "Finished specialising plfile in", Spec_Time, "ms"
            self.Spec_Time = Spec_Time
            #self.prolog.call( "moduledriver:rebuild_everything")
            #self.prolog.call("moduledriver:request_pattern('%s', %s)" % (file,goal))
            #self.prolog.call("moduledriver:specialize")
            self.prolog.call("set_preference(last_spec_query,(%s))" % (goal))

            return True
            #self.view_spec()
            #self.enable_after_spec()
        else:
            print "GOAL NOT OKAY TO SPECIALISE %s" % goal
            return False

    def specialisecogen3(self, goal, file):
        os.chdir('../../cogen3/')
        print "Specialising using cogen3!"
        os.chdir('../cogen2/logen_source/')

    def quit(self):
        self.prolog.quit()

    def restart(self, unused=None):
        self.prolog.quit()
        self.prolog = Prolog()
        self.prolog.startProlog()
        self.preferences = Preferences(self.prolog)

    def rebuild(self):
        os.remove('logen_main.sav')
        self.restart()

    def viewStdOut(self):
        self.prolog.viewStdOut()

    def viewStdErr(self):
        self.prolog.viewStdErr()

    def filter_prop(self, filename):
        annfile = filename + ".ann"
        #auto_bta_dir = '/home/sjc02r/cvs_root/Asap/Systems/bta/'
        auto_bta_dir = self.preferences["auto_bta_dir"].strip()
        print auto_bta_dir

        if auto_bta_dir == "None":

            print "Please set autobta dir"
            return None
        else:
            logen_bta = auto_bta_dir + '/logen/logenbta.pl'
            auto_bta = auto_bta_dir + '/auto_bta'
            outfile = 'filter.tmp'
            os.system('%s %s %s %s' % (auto_bta, annfile, logen_bta, outfile))
            return outfile

    def annotate_file(self, file, mode="safe"):
        print "Annotate File::", file
        return self.prolog.call("annotateFile('" + file + "','" + file +
                                ".ann',%s)" % mode)

    def check_string_syntax(self, string):
        self.prolog.call("parse_string_syntax('" + escape_str(string) +
                         "', Syn)")
        syn = self.prolog.prologvariables["Syn"].split()
        #print syn
        return not (len(syn) == 2 and syn[0] == "error")

    def parse_file(self, filename):
        self.prolog.call("parse_file('" + filename + "')")
Example #5
0
 def __init__(self):
     self.prolog = Prolog()
     self.timeout = False
     self.Spec_Time = -1
Example #6
0
 def restart(self, unused=None):
     self.prolog.quit()
     self.prolog = Prolog()
     self.prolog.startProlog()
     self.preferences = Preferences(self.prolog)