def test_parse_problem_replanner_balls_colored():
    domain_fname = "pond-benchmarks/cp2fsc-and-replanner-benchmarks/replanner/balls/colored/domain.pddl"
    problem_fname = "pond-benchmarks/cp2fsc-and-replanner-benchmarks/replanner/balls/colored/n3-b1-c2.pddl"
    assert os.path.exists(problem_fname)
    problem = parser.Problem(domain_file=domain_fname,
                             problem_file=problem_fname)
    problem.dump()
    assert problem is not None
def export_problem(folder: str, domain_name: str, silent: bool = True):
    """Parse problem, then export problem to temporary location."""

    p_fnames, d_fname = get_files(folder)
    p_fnames = [os.path.join(folder, n) for n in p_fnames]
    d_fname = os.path.join(folder, d_fname)

    if p_fnames is None or len(p_fnames) == 0:
        return False

    for i, p_fname in enumerate(p_fnames):
        prob = parser.Problem(d_fname, p_fname)
        fakes = _export_problem(prob)

        if not silent:
            print("* Contents of domain file *")
            fp = open(fakes["domain"], "r")
            for line in fp:
                print(line.rstrip())
            fp.close()
            if fakes["problem"] is not None:
                print("* Contents of problem file *")
                fp = open(fakes["problem"], "r")
                for line in fp:
                    print(line.rstrip())
                fp.close()

        # now read back the domain file
        fake_problem = parser.Problem(fakes["domain"], fakes["problem"])

        if fake_problem.is_equal(prob):
            if not silent:
                print("Domains are equivalent")
            result = True
        else:
            if not silent:
                print("Domains are not equivalent")
            result = False

        # remove temporary file
        os.remove(fakes["domain"])
        if fakes["problem"] is not None:
            os.remove(fakes["problem"])

        return result
def parse_problem(folder: str, domain_name: str, silent: bool = False,
                  index: Optional[int] = None):
    """ Fully create the problem from the given folder"""

    p_fnames, d_fname = get_files(folder)
    p_fnames = [os.path.join(folder, f) for f in p_fnames]
    d_fname = os.path.join(folder, d_fname)
    probs = []

    if len(p_fnames) == 0 or d_fname is None:
        if not silent:
            print("Failed to find domain and problem file in folder %s" % folder)
        return probs

    if not silent:
        print("Parsing domain %s" % folder)
    if index is None:
        for p_fname in p_fnames:
            # print this so have full file path in console

            prob = parser.Problem(d_fname, p_fname)
            probs.append(prob)

            if not silent:
                prob.dump()

        if len(probs) > 1 and not silent:
            print("parsed %d problems in domain %s" % (len(probs), domain_name))

        return probs
    else:
        p_fname = p_fnames[index]
        # print this so have full file path in console

        prob = parser.Problem(d_fname, p_fname)
        probs.append(prob)

        if not silent:
            prob.dump()

    if len(probs) > 1 and not silent:
        print("parsed %d problems in domain %s" % (len(probs), domain_name))

        return probs
def test_parse_problems_fsc():
    parent_dir = "pond-benchmarks/cp2fsc-and-replanner-benchmarks/fsc"
    n = 0
    for problem_file, domain_file in find_files_matching_prefix(
            parent_dir, ""):
        assert os.path.exists(problem_file)
        assert os.path.exists(domain_file)
        prob = parser.Problem(domain_file=domain_file,
                              problem_file=problem_file)
        assert prob is not None
        n += 1
    assert n == 52
def test_parse_problems_contff():
    parent_dir = "pond-benchmarks/contff-tests"
    n = 0
    for problem_file, domain_file in find_files_matching_prefix(
            parent_dir, ""):
        assert os.path.exists(problem_file)
        assert os.path.exists(domain_file)
        prob = parser.Problem(domain_file=domain_file,
                              problem_file=problem_file)
        assert prob is not None
        n += 1
    assert n == 69
             assert False, "No such domain found: %s" % args.folder
     print("Parent is %s" % parent_name)
     path = os.path.join(parents[parent_name], folder)
     parse_problem(path, folder, silent=False, index=args.number)
 elif "normalize" == args.subparser:
     parent_name = find_parent(args.folder, parents)
     if parent_name is None:
         assert False, "No such domain found: %s" % args.folder
     else:
         path = os.path.join(parents[parent_name], args.folder)
         normalize_problem(path, args.folder)
 elif "parse-problem" == args.subparser:
     # note that the full path must be given here
     p = args.problem
     if os.path.exists(p) and os.path.isfile(p):
         prob = parser.Problem(p, None)
         prob.dump()
     else:
         assert False, "No such file found: %s" % p
 elif "batch-parse" == args.subparser:
     batch_run(batch_parse, parents, args.parent)
 elif "batch-normalize" == args.subparser:
     batch_run(batch_normalize, parents, args.parent)
 elif "batch-ground" == args.subparser:
     batch_run(batch_ground, parents, args.parent)
 elif "batch-export" == args.subparser:
     batch_run(batch_export, parents, args.parent)
 elif "batch-export-ground" == args.subparser:
     f = lambda a, b: batch_export(a, b, True)
     batch_run(f, parents, args.parent)
 elif "export-ground" == args.subparser: