"""
Turn triples back into logical formulas

Currently wraps some prolog code which does the real work

$Id: recognize.py,v 1.7 2002/08/09 19:20:03 sandro Exp $
"""

import os, sys, tempfile
sys.path.extend([".", ".."])
import rdf
import toShortNames

# echo '(rdf(a,b,c) | rdf(d,e,f)).  rdf(g,h,i).' | python encodeOtterFormula.py  | grep -v '^@prefix' | tee t | ntriples-to-prolog | python toShortNames.py | xsb --quietload --nobanner --noprompt -e '[user], [recognizer], writeKB, halt.'

xsbcmd = """/home/sandro/local/src/xsb-2.4/config/i686-pc-linux-gnu/bin/xsb --quietload --nobanner --noprompt -e "['%s'], [recognize], writeKB, halt. halt." 2>&1"""

def recognizeContentsOfKB(rdfkb):
    kbstr = toShortNames.trans(rdf.asProlog(rdfkb))
    filename = tempfile.mktemp('.P')
    f = open(filename, "w")
    # print "kb stored in", filename
    f.write(kbstr)
    f.close()
    x = os.popen(xsbcmd % filename, 'r')
    result = x.readlines()
    x.close()
    try:
        assert(result[0] == "\n")
        assert(result[-2] == "\n")
        assert(result[-1][0:16] == "End XSB (cputime")
    except AssertionError:
        print result
        assert(0)
    res = ""
    for x in result[1:-2]:
        if x[0:2] == "% ": continue
        res = res + x[:-1]
    #print 'XSB Output: "'+res+'"'
    if res=="no": res=None
    os.unlink(filename)
    return res.rstrip()

                         
    
