#!/usr/bin/env python
# encoding: UTF-8
"""\
samovar {option} input.samovar
Driver script for Samovar assertion-retraction engine.
"""
from os.path import realpath, dirname, join
import sys
sys.path.insert(0, join(dirname(realpath(sys.argv[0])), '..', 'src'))
import codecs
from optparse import OptionParser
import random
from samovar.parser import Parser
from samovar.generator import Generator
if __name__ == '__main__':
optparser = OptionParser(__doc__)
optparser.add_option("--debug",
action="store_true",
help="Show state before and after each move")
optparser.add_option("--dump-ast",
action="store_true",
help="Just show the AST and stop")
optparser.add_option("--length",
type=int, default=0,
help="If given, generate this many events for each situation")
optparser.add_option("--line-per-sentence",
action="store_true")
optparser.add_option("--seed",
type=int, default=None,
help="Set random seed (to select moves deterministically)")
optparser.add_option("--words",
type=int, default=0,
help="If given, generate each situation til this many words")
(options, args) = optparser.parse_args(sys.argv[1:])
text = ''
for arg in args:
with codecs.open(arg, 'r', encoding='UTF-8') as f:
text += f.read()
p = Parser(text)
ast = p.world()
if options.dump_ast:
print ast
sys.exit(0)
if options.seed is not None:
random.seed(options.seed)
g = Generator(ast, debug=options.debug)
if options.length > 0:
events = g.generate_events(options.length)
elif options.words > 0:
events = g.generate_words(options.words)
for e in events:
if options.line_per_sentence:
sys.stdout.write("%s\n" % e)
else:
sys.stdout.write("%s " % e)
sys.stdout.write("\n")