Skip to content

Commit

Permalink
Updated result classes
Browse files Browse the repository at this point in the history
  • Loading branch information
alvalentini committed Nov 8, 2023
1 parent 2088855 commit c02846e
Show file tree
Hide file tree
Showing 10 changed files with 55 additions and 37 deletions.
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"tamer": ["up-tamer==1.0.0.4.dev1"],
"enhsp": ["up-enhsp==0.0.21"],
"fast-downward": ["up-fast-downward==0.3.1"],
"lpg": ["up-lpg==0.0.7.5"],
"lpg": ["up-lpg==0.0.8"],
"fmap": ["up-fmap==0.0.9"],
"aries": ["up-aries>=0.2.1"],
"symk": ["up-symk>=1.0.1"],
Expand All @@ -37,7 +37,7 @@
"up-tamer==1.0.0.4.dev1",
"up-enhsp==0.0.21",
"up-fast-downward==0.3.1",
"up-lpg==0.0.7.5",
"up-lpg==0.0.8",
"up-fmap==0.0.9",
"up-aries>=0.2.1",
"up-symk>=1.0.1",
Expand Down
1 change: 0 additions & 1 deletion unified_planning/engines/oversubscription_planner.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,6 @@ def _solve(
self.name,
metrics=res.metrics,
log_messages=res.log_messages,
extra_engine_info=res.extra_engine_info,
)
elif res.status == PlanGenerationResultStatus.TIMEOUT:
return PlanGenerationResult(
Expand Down
1 change: 0 additions & 1 deletion unified_planning/engines/pddl_anytime_planner.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,6 @@ def _generate_last_result(
solve_result.engine_name,
solve_result.metrics,
solve_result.log_messages,
solve_result.extra_engine_info,
)
return res

Expand Down
8 changes: 4 additions & 4 deletions unified_planning/engines/pddl_planner.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,15 +239,15 @@ def _solve(
plan = self._plan_from_file(
problem, plan_filename, self._writer.get_item_named
)
extra_engine_info = {}
extra_engine_info["internal_time"] = str(process_end - process_start)
metrics = {}
metrics["engine_internal_time"] = str(process_end - process_start)
if timeout_occurred and retval != 0:
return PlanGenerationResult(
PlanGenerationResultStatus.TIMEOUT,
plan=plan,
engine_name=self.name,
log_messages=logs,
extra_engine_info=extra_engine_info,
metrics=metrics,
)
status: PlanGenerationResultStatus = self._result_status(
problem, plan, retval, logs
Expand All @@ -257,7 +257,7 @@ def _solve(
plan,
engine_name=self.name,
log_messages=logs,
extra_engine_info=extra_engine_info,
metrics=metrics,
)
problem_kind = problem.kind
if problem_kind.has_continuous_time() or problem_kind.has_discrete_time():
Expand Down
8 changes: 2 additions & 6 deletions unified_planning/engines/results.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,6 @@ class PlanGenerationResult(Result):
engine_name: str
metrics: Optional[Dict[str, str]] = field(default=None)
log_messages: Optional[List[LogMessage]] = field(default=None)
extra_engine_info: Optional[Dict[str, str]] = field(default=None)

def __post__init(self):
# Checks that plan and status are consistent
Expand Down Expand Up @@ -236,7 +235,6 @@ def correct_plan_generation_result(
result.engine_name,
result.metrics,
result.log_messages,
result.extra_engine_info,
)
elif problem.epsilon is None or (
engine_epsilon is not None and problem.epsilon < engine_epsilon
Expand All @@ -252,7 +250,6 @@ def correct_plan_generation_result(
result.engine_name,
result.metrics,
result.log_messages,
result.extra_engine_info,
)
elif result.status == PlanGenerationResultStatus.SOLVED_OPTIMALLY:
return PlanGenerationResult(
Expand All @@ -261,7 +258,6 @@ def correct_plan_generation_result(
result.engine_name,
result.metrics,
result.log_messages,
result.extra_engine_info,
)
return result

Expand All @@ -278,7 +274,7 @@ class ValidationResult(Result):
)
reason: Optional[FailedValidationReason] = field(default=None)
inapplicable_action: Optional[up.plans.ActionInstance] = field(default=None)
extra_engine_info: Optional[Dict[str, str]] = field(default=None)
metrics: Optional[Dict[str, str]] = field(default=None)

def __post_init__(self):
assert (
Expand Down Expand Up @@ -318,7 +314,7 @@ class CompilerResult(Result):
]
engine_name: str
log_messages: Optional[List[LogMessage]] = field(default=None)
extra_engine_info: Optional[Dict[str, str]] = field(default=None)
metrics: Optional[Dict[str, str]] = field(default=None)

def _post_init(self):
# Check that compiled problem and map_back_action_instance are consistent with each other
Expand Down
36 changes: 22 additions & 14 deletions unified_planning/grpc/generated/unified_planning_pb2.py

Large diffs are not rendered by default.

14 changes: 11 additions & 3 deletions unified_planning/grpc/proto_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -848,10 +848,10 @@ def _convert_plan_generation_result(
raise UPException(f"Unknown Planner Status: {result.status}")

log_messages = None
metrics = None
engine_metrics = None

if bool(result.metrics):
metrics = dict(result.metrics)
engine_metrics = dict(result.metrics)

if len(result.log_messages) > 0:
log_messages = [self.convert(log) for log in result.log_messages]
Expand All @@ -862,7 +862,7 @@ def _convert_plan_generation_result(
if result.HasField("plan")
else None,
engine_name=result.engine.name,
metrics=metrics,
metrics=engine_metrics,
log_messages=log_messages,
)

Expand Down Expand Up @@ -912,12 +912,16 @@ def _convert_compiler_result(
original_action_instance.action,
original_action_instance.actual_parameters,
)
engine_metrics = None
if bool(result.metrics):
engine_metrics = dict(result.metrics)
return unified_planning.engines.CompilerResult(
problem=problem,
map_back_action_instance=partial(
unified_planning.engines.compilers.utils.lift_action_instance, map=map
),
engine_name=result.engine.name,
metrics=engine_metrics,
log_messages=[self.convert(log) for log in result.log_messages],
)

Expand All @@ -939,8 +943,12 @@ def _convert_validation_result(
r_status = unified_planning.engines.ValidationResultStatus.UNKNOWN
else:
raise UPException(f"Unexpected ValidationResult status: {result.status}")
engine_metrics = None
if bool(result.metrics):
engine_metrics = dict(result.metrics)
return unified_planning.engines.ValidationResult(
status=r_status,
engine_name=result.engine.name,
metrics=engine_metrics,
log_messages=[self.convert(log) for log in result.log_messages],
)
2 changes: 2 additions & 0 deletions unified_planning/grpc/proto_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -980,6 +980,7 @@ def _convert_compiler_result(
return proto.CompilerResult(
problem=self.convert(result.problem),
map_back_plan=map,
metrics=result.metrics,
log_messages=[self.convert(log) for log in log_messages],
engine=proto.Engine(name=result.engine_name),
)
Expand All @@ -990,6 +991,7 @@ def _convert_validation_result(
) -> proto.ValidationResult:
return proto.ValidationResult(
status=self.convert(result.status),
metrics=result.metrics,
log_messages=[self.convert(log) for log in result.log_messages],
engine=proto.Engine(name=result.engine_name),
)
Expand Down
6 changes: 6 additions & 0 deletions unified_planning/grpc/unified_planning.proto
Original file line number Diff line number Diff line change
Expand Up @@ -844,6 +844,9 @@ message ValidationResult {
}
ValidationResultStatus status = 1;

// A set of engine specific values that can be reported
map<string, string> metrics = 4;

// Optional. Information given by the engine to the user.
repeated LogMessage log_messages = 2;

Expand All @@ -861,6 +864,9 @@ message CompilerResult {
// compiled problem to the original ActionInstance.
map<string, ActionInstance> map_back_plan = 2;

// A set of engine specific values that can be reported
map<string, string> metrics = 5;

// Optional. Information given by the engine to the user.
repeated LogMessage log_messages = 3;

Expand Down
12 changes: 6 additions & 6 deletions up_test_cases/report.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,9 +261,9 @@ def report_oneshot(
errors.append((planner_id, name))
total_execution_time = end - start
internal_time_str = None
if result.extra_engine_info is not None:
internal_time_str = result.extra_engine_info.get(
"internal_time", None
if result.metrics is not None:
internal_time_str = result.metrics.get(
"engine_internal_time", None
)
if internal_time_str is not None:
internal_time = float(internal_time_str)
Expand Down Expand Up @@ -395,9 +395,9 @@ def report_anytime(
)
total_execution_time = end - start
internal_time_str = None
if result.extra_engine_info is not None:
internal_time_str = result.extra_engine_info.get(
"internal_time", None
if result.metrics is not None:
internal_time_str = result.metrics.get(
"engine_internal_time", None
)
if internal_time_str is not None:
internal_time = float(internal_time_str)
Expand Down

0 comments on commit c02846e

Please sign in to comment.