Skip to content

Commit 489a0d2

Browse files
committed
Update headers for problem and domain
1 parent fd437fc commit 489a0d2

File tree

1 file changed

+27
-15
lines changed

1 file changed

+27
-15
lines changed

py2pddl/py2pddl.py

+27-15
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,19 @@
77

88
def create_type(name, Base=None) -> type:
99
if Base:
10-
Type = type(name, (Base,), {"section": "types"})
11-
Type.create_objs = classmethod(_create_objs)
10+
Type = type(name, (Base,), {
11+
"section": "types",
12+
"create_objs": classmethod(_create_objs)
13+
})
1214
else:
1315
Type = type(
1416
name,
1517
(UserString,),
1618
{
1719
"section": "types",
1820
"__repr__": lambda self: f"{name}('{self.data}')",
21+
"create_objs": classmethod(_create_objs)
1922
})
20-
Type.create_objs = classmethod(_create_objs)
2123
return Type
2224

2325

@@ -39,7 +41,8 @@ def __init__(self, typ, *args, **kwargs):
3941
def __getitem__(self, key):
4042
if key not in self.data:
4143
raise KeyError(
42-
f"Key '{key}' does not exist for {self.typ}. Did you define the objects correctly?")
44+
f"Key '{key}' does not exist for {self.typ}. "
45+
"Have you defined the objects correctly?")
4346
else:
4447
return self.data[key]
4548

@@ -54,7 +57,7 @@ def goal(self):
5457

5558
def generate_domain_pddl(self, *, filename="domain"):
5659
filename = filename + ".pddl"
57-
hder = Domain._generate_header()
60+
hder = self._generate_header_domain()
5861
reqs = Domain._generate_requirements()
5962
typs = self._generate_types()
6063
prds = self._generate_predicates()
@@ -75,25 +78,33 @@ def generate_problem_pddl(self, *,
7578
goal = {}
7679
filename = filename + ".pddl"
7780

78-
hder = Domain._generate_header_prob()
79-
domain = "\t" + "(:domain somedomain)"
81+
hder = self._generate_header_prob()
8082
objs = self._generate_objects()
8183
inits = "\t" + self.init(**init)
8284
goals = "\t" + self.goal(**goal)
8385

84-
pddl = join([hder, domain, objs, inits, goals, ")\n"],
86+
pddl = join([hder, objs, inits, goals, ")\n"],
8587
"\n", and_marker=False)
8688
with open(filename, "w", encoding="utf-8") as f:
8789
f.write(str(pddl))
8890
print(f"Problem PDDL written to {filename}.")
8991

90-
@staticmethod
91-
def _generate_header(name="somedomain"):
92+
def _generate_header_domain(self):
93+
cls = self.__class__
94+
while cls.__bases__[0] != Domain:
95+
cls = cls.__bases__[0]
96+
name = cls.__name__.lower().replace("domain", "")
9297
return f"(define\n\t(domain {name})"
9398

94-
@staticmethod
95-
def _generate_header_prob(name="someproblem"):
96-
return f"(define\n\t(problem {name})"
99+
def _generate_header_prob(self):
100+
cls = self.__class__
101+
if cls.__bases__[0] == Domain:
102+
raise RuntimeError("Unable to generate the problem header. "
103+
"Call `generate_problem_pddl` from an instance "
104+
"of a subclassed Domain.")
105+
domain_name = cls.__bases__[0].__name__.lower().replace("domain", "")
106+
problem_name = cls.__name__.lower().replace("problem", "")
107+
return f"(define\n\t(problem {problem_name})" + "\n\t" + f"(:domain {domain_name})"
97108

98109
@staticmethod
99110
def _generate_requirements():
@@ -232,6 +243,7 @@ def wrapper(*args, **kwargs):
232243
# Final
233244
actn = [action_name, repre, precond, effect, "\t)"]
234245
actn = join(actn, "\n", False)
246+
actn = actn.replace('_', '-')
235247

236248
return actn
237249

@@ -272,7 +284,7 @@ def wrapper(*args, **kwargs):
272284
repr1 = []
273285
for param, Class in zip(params, Types):
274286
param_name, _ = param
275-
repr1.append(f"?{param_name.replace('_', '-')} - {Class.__name__.lower()}")
287+
repr1.append(f"?{param_name} - {Class.__name__.lower()}")
276288
repr1 = " ".join(repr1)
277289
repr1 = f"({func_name} {repr1})"
278290

@@ -282,7 +294,7 @@ def wrapper(*args, **kwargs):
282294
repr2 = f"({func_name} {repr2})"
283295

284296
# Representation 3 (in :init and :goal)
285-
args = [str(arg) for arg in args]
297+
args = [str(arg).replace('_', '-') for arg in args]
286298
params3 = "(" + " ".join([func_name, *args]) + ")"
287299

288300
return PDDLString(repr1) + " | " + PDDLString(repr2) + " | " + PDDLString(params3)

0 commit comments

Comments
 (0)