aig-upf / tarski

Tarski - An AI Planning Modeling Framework
Apache License 2.0
59 stars 20 forks source link

Possible bug when parsing domain with universally-quantified effects? #52

Closed gfrances closed 5 years ago

gfrances commented 5 years ago

Commit 25b6555dcb3164b01807a5218a702389235d8d38 introduces a new test on a domain with universally quantified effects; the test is failing, I suspect due to some bug with those effects, but I don't have time to check that now. It could also be that by now this has been solved in the dev branch, but I thought that having the test on that simple domain wouldn't hurt either.

miquelramirez commented 5 years ago

Hello @gfrances,

I cherry picked commit 25b6555dcb3164b01807a5218a702389235d8d38 and the test is failing on dev-0.2.0, with the following output:

_________________________________ test_pddl_instances[/home/bowman/Sandboxes/tarski/tests/io/../data/pddl/grid/problem12.pddl-/home/bowman/Sandboxes/tarski/tests/io/../data/pddl/grid/domain.pddl] __________________________________

instance_file = '/home/bowman/Sandboxes/tarski/tests/io/../data/pddl/grid/problem12.pddl', domain_file = '/home/bowman/Sandboxes/tarski/tests/io/../data/pddl/grid/domain.pddl'

    def test_pddl_instances(instance_file, domain_file):
>       _ = reader().read_problem(domain_file, instance_file)

tests/io/test_builtin_domains_parsing.py:46: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
src/tarski/io/fstrips.py:29: in read_problem
    self.parse_domain(domain)
src/tarski/io/fstrips.py:39: in parse_domain
    self.parse_file(filename, 'domain')
src/tarski/io/fstrips.py:36: in parse_file
    self.parser.visit(domain_parse_tree)
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit
    return tree.accept(self)
src/tarski/io/_fstrips/parser/parser.py:790: in accept
    return visitor.visitDomain(self)
src/tarski/io/_fstrips/parser/visitor.py:19: in visitDomain
    return self.visitChildren(ctx)
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:44: in visitChildren
    childResult = c.accept(self)
src/tarski/io/_fstrips/parser/parser.py:2410: in accept
    return visitor.visitStructureDef(self)
src/tarski/io/_fstrips/parser/visitor.py:154: in visitStructureDef
    return self.visitChildren(ctx)
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:44: in visitChildren
    childResult = c.accept(self)
src/tarski/io/_fstrips/parser/parser.py:2492: in accept
    return visitor.visitActionDef(self)
src/tarski/io/_fstrips/reader.py:163: in visitActionDef
    precondition, effect = self.visit(ctx.actionDefBody())
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit
    return tree.accept(self)
src/tarski/io/_fstrips/parser/parser.py:2859: in accept
    return visitor.visitActionDefBody(self)
src/tarski/io/_fstrips/reader.py:169: in visitActionDefBody
    eff = self.visit(ctx.effect())
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit
    return tree.accept(self)
src/tarski/io/_fstrips/parser/parser.py:3934: in accept
    return visitor.visitConjunctiveEffectFormula(self)
src/tarski/io/_fstrips/reader.py:278: in visitConjunctiveEffectFormula
    return [self.visit(sub_ctx) for sub_ctx in ctx.single_effect()]
src/tarski/io/_fstrips/reader.py:278: in <listcomp>
    return [self.visit(sub_ctx) for sub_ctx in ctx.single_effect()]
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit
    return tree.accept(self)
src/tarski/io/_fstrips/parser/parser.py:4092: in accept
    return visitor.visitUniversallyQuantifiedEffect(self)
src/tarski/io/_fstrips/reader.py:293: in visitUniversallyQuantifiedEffect
    return UniversalEffect(self.visit(ctx.possibly_typed_variable_list()), self.visit(ctx.effect()))
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit
    return tree.accept(self)
src/tarski/io/_fstrips/parser/parser.py:3904: in accept
    return visitor.visitSingleEffect(self)
src/tarski/io/_fstrips/reader.py:274: in visitSingleEffect
    effect = self.visit(ctx.single_effect())
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit
    return tree.accept(self)
src/tarski/io/_fstrips/parser/parser.py:4062: in accept
    return visitor.visitMultipleConditionalEffect(self)
src/tarski/io/_fstrips/reader.py:301: in visitMultipleConditionalEffect
    condition = self.visit(ctx.goalDesc())
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit
    return tree.accept(self)
src/tarski/io/_fstrips/parser/parser.py:3057: in accept
    return visitor.visitAndGoalDesc(self)
src/tarski/io/_fstrips/reader.py:226: in visitAndGoalDesc
    conjuncts = [self.visit(sub_ctx) for sub_ctx in ctx.goalDesc()]
src/tarski/io/_fstrips/reader.py:226: in <listcomp>
    conjuncts = [self.visit(sub_ctx) for sub_ctx in ctx.goalDesc()]
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit
    return tree.accept(self)
src/tarski/io/_fstrips/parser/parser.py:3142: in accept
    return visitor.visitTermGoalDesc(self)
src/tarski/io/_fstrips/reader.py:185: in visitTermGoalDesc
    return self.visit(ctx.atomicTermFormula())
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit
    return tree.accept(self)
src/tarski/io/_fstrips/parser/parser.py:3413: in accept
    return visitor.visitAtomicTermFormula(self)
src/tarski/io/_fstrips/reader.py:181: in visitAtomicTermFormula
    subterms = [self.visit(term_ctx) for term_ctx in ctx.term()]
src/tarski/io/_fstrips/reader.py:181: in <listcomp>
    subterms = [self.visit(term_ctx) for term_ctx in ctx.term()]
../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit
    return tree.accept(self)
src/tarski/io/_fstrips/parser/parser.py:3557: in accept
    return visitor.visitTermVariable(self)
src/tarski/io/_fstrips/reader.py:203: in visitTermVariable
    return self._recover_variable_from_context(variable_name)
src/tarski/io/_fstrips/reader.py:199: in _recover_variable_from_context
    return self.current_binding.get(name)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <tarski.syntax.formulas.VariableBinding object at 0x7f0e082a9470>, name = '?pos2'

    def get(self, name):
        var = self.variables.get(name, None)
        if var is None:
>           raise err.UndefinedVariable(name)
E           tarski.errors.UndefinedVariable: Undefined element: ?pos2

Is this the same error you get on lite?

gfrances commented 5 years ago

yes, looks the same.

El lun., 11 feb. 2019 0:56, Miquel Ramírez notifications@github.com escribió:

Hello @gfrances https://github.com/gfrances,

I cherry picked commit 25b6555 https://github.com/aig-upf/tarski/commit/25b6555dcb3164b01807a5218a702389235d8d38 and the test is failing on dev-0.2.0, with the following output:

_____ test_pddl_instances[/home/bowman/Sandboxes/tarski/tests/io/../data/pddl/grid/problem12.pddl-/home/bowman/Sandboxes/tarski/tests/io/../data/pddl/grid/domain.pddl] __

instance_file = '/home/bowman/Sandboxes/tarski/tests/io/../data/pddl/grid/problem12.pddl', domain_file = '/home/bowman/Sandboxes/tarski/tests/io/../data/pddl/grid/domain.pddl'

def test_pddl_instances(instance_file, domain_file):
  _ = reader().read_problem(domain_file, instance_file)

tests/io/test_builtin_domains_parsing.py:46:


src/tarski/io/fstrips.py:29: in read_problem self.parse_domain(domain) src/tarski/io/fstrips.py:39: in parse_domain self.parse_file(filename, 'domain') src/tarski/io/fstrips.py:36: in parse_file self.parser.visit(domain_parse_tree) ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit return tree.accept(self) src/tarski/io/_fstrips/parser/parser.py:790: in accept return visitor.visitDomain(self) src/tarski/io/_fstrips/parser/visitor.py:19: in visitDomain return self.visitChildren(ctx) ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:44: in visitChildren childResult = c.accept(self) src/tarski/io/_fstrips/parser/parser.py:2410: in accept return visitor.visitStructureDef(self) src/tarski/io/_fstrips/parser/visitor.py:154: in visitStructureDef return self.visitChildren(ctx) ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:44: in visitChildren childResult = c.accept(self) src/tarski/io/_fstrips/parser/parser.py:2492: in accept return visitor.visitActionDef(self) src/tarski/io/_fstrips/reader.py:163: in visitActionDef precondition, effect = self.visit(ctx.actionDefBody()) ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit return tree.accept(self) src/tarski/io/_fstrips/parser/parser.py:2859: in accept return visitor.visitActionDefBody(self) src/tarski/io/_fstrips/reader.py:169: in visitActionDefBody eff = self.visit(ctx.effect()) ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit return tree.accept(self) src/tarski/io/_fstrips/parser/parser.py:3934: in accept return visitor.visitConjunctiveEffectFormula(self) src/tarski/io/_fstrips/reader.py:278: in visitConjunctiveEffectFormula return [self.visit(sub_ctx) for sub_ctx in ctx.single_effect()] src/tarski/io/_fstrips/reader.py:278: in return [self.visit(sub_ctx) for sub_ctx in ctx.single_effect()] ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit return tree.accept(self) src/tarski/io/_fstrips/parser/parser.py:4092: in accept return visitor.visitUniversallyQuantifiedEffect(self) src/tarski/io/_fstrips/reader.py:293: in visitUniversallyQuantifiedEffect return UniversalEffect(self.visit(ctx.possibly_typed_variable_list()), self.visit(ctx.effect())) ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit return tree.accept(self) src/tarski/io/_fstrips/parser/parser.py:3904: in accept return visitor.visitSingleEffect(self) src/tarski/io/_fstrips/reader.py:274: in visitSingleEffect effect = self.visit(ctx.single_effect()) ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit return tree.accept(self) src/tarski/io/_fstrips/parser/parser.py:4062: in accept return visitor.visitMultipleConditionalEffect(self) src/tarski/io/_fstrips/reader.py:301: in visitMultipleConditionalEffect condition = self.visit(ctx.goalDesc()) ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit return tree.accept(self) src/tarski/io/_fstrips/parser/parser.py:3057: in accept return visitor.visitAndGoalDesc(self) src/tarski/io/_fstrips/reader.py:226: in visitAndGoalDesc conjuncts = [self.visit(sub_ctx) for sub_ctx in ctx.goalDesc()] src/tarski/io/_fstrips/reader.py:226: in conjuncts = [self.visit(sub_ctx) for sub_ctx in ctx.goalDesc()] ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit return tree.accept(self) src/tarski/io/_fstrips/parser/parser.py:3142: in accept return visitor.visitTermGoalDesc(self) src/tarski/io/_fstrips/reader.py:185: in visitTermGoalDesc return self.visit(ctx.atomicTermFormula()) ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit return tree.accept(self) src/tarski/io/_fstrips/parser/parser.py:3413: in accept return visitor.visitAtomicTermFormula(self) src/tarski/io/_fstrips/reader.py:181: in visitAtomicTermFormula subterms = [self.visit(term_ctx) for term_ctx in ctx.term()] src/tarski/io/_fstrips/reader.py:181: in subterms = [self.visit(term_ctx) for term_ctx in ctx.term()] ../../.local/lib/python3.5/site-packages/antlr4/tree/Tree.py:34: in visit return tree.accept(self) src/tarski/io/_fstrips/parser/parser.py:3557: in accept return visitor.visitTermVariable(self) src/tarski/io/_fstrips/reader.py:203: in visitTermVariable return self._recover_variable_from_context(variable_name) src/tarski/io/_fstrips/reader.py:199: in _recover_variable_from_context return self.current_binding.get(name)


self = <tarski.syntax.formulas.VariableBinding object at 0x7f0e082a9470>, name = '?pos2'

def get(self, name):
    var = self.variables.get(name, None)
    if var is None:
      raise err.UndefinedVariable(name)

E tarski.errors.UndefinedVariable: Undefined element: ?pos2

Is this the same error you get on lite?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/aig-upf/tarski/issues/52#issuecomment-462193764, or mute the thread https://github.com/notifications/unsubscribe-auth/ABD3zseln9XmwHhfjiVqKMflLOFdpvW0ks5vMLGzgaJpZM4awE3W .

gfrances commented 5 years ago

Having a look into this now, just for the record

gfrances commented 5 years ago

This is now fixed by commit 911f076

gfrances commented 5 years ago

BTW, not sure if branch universal-effects was related to this and can perhaps be removed now?