From c3f2b217327f5978923ab0a77ad898d6bfd250eb Mon Sep 17 00:00:00 2001 From: Boming Zhang Date: Thu, 22 May 2025 20:46:01 -0400 Subject: [PATCH] fix: default limit --- joj3_config_generator/models/task.py | 9 ++++++-- joj3_config_generator/transformers/task.py | 24 +++++++++++----------- tests/convert/diff/task.json | 2 ++ tests/convert/diff/task.toml | 1 + 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/joj3_config_generator/models/task.py b/joj3_config_generator/models/task.py index fd55d89..a946551 100644 --- a/joj3_config_generator/models/task.py +++ b/joj3_config_generator/models/task.py @@ -127,9 +127,14 @@ class Stage(BaseModel): @classmethod def gather_cases(cls: Type["Stage"], values: Dict[str, Any]) -> Dict[str, Any]: cases = {k: v for k, v in values.items() if k.startswith("case")} - for key in cases: + limit = values.get("limit", {}) + parsed_cases = {} + for key, case in cases.items(): + case_with_limit = {**limit, **case.get("limit", {})} + case_for_parsing = {**case, "limit": case_with_limit} + parsed_cases[key] = case_for_parsing values.pop(key) - values["cases"] = {k: v for k, v in cases.items()} + values["cases"] = parsed_cases return values diff --git a/joj3_config_generator/transformers/task.py b/joj3_config_generator/transformers/task.py index e5849d6..249ff2e 100644 --- a/joj3_config_generator/transformers/task.py +++ b/joj3_config_generator/transformers/task.py @@ -4,9 +4,13 @@ from functools import partial from pathlib import Path from typing import Any, Callable, Dict, List, Set, Tuple -from joj3_config_generator.models import const, result, task +from joj3_config_generator.models import result, task from joj3_config_generator.models.common import Memory, Time -from joj3_config_generator.models.const import JOJ3_CONFIG_ROOT +from joj3_config_generator.models.const import ( + DEFAULT_CLOCK_LIMIT_MULTIPLIER, + DEFAULT_PROC_LIMIT, + JOJ3_CONFIG_ROOT, +) from joj3_config_generator.models.task import Parser as ParserEnum @@ -194,23 +198,19 @@ def fix_diff( ), args=shlex.split(case_stage.command) if case_stage.command else None, cpu_limit=case_stage.limit.cpu, - clock_limit=2 * case_stage.limit.cpu, + clock_limit=DEFAULT_CLOCK_LIMIT_MULTIPLIER * case_stage.limit.cpu, memory_limit=case_stage.limit.mem, - proc_limit=50, + proc_limit=DEFAULT_PROC_LIMIT, ) if cmd.args == executor.with_.default.args: cmd.args = None - # duplicate with the fallback case in executor.with_ - if cmd.cpu_limit == const.DEFAULT_CPU_LIMIT: + if cmd.cpu_limit == executor.with_.default.cpu_limit: cmd.cpu_limit = None - if ( - cmd.clock_limit - == const.DEFAULT_CLOCK_LIMIT_MULTIPLIER * const.DEFAULT_CPU_LIMIT - ): + if cmd.clock_limit == executor.with_.default.clock_limit: cmd.clock_limit = None - if cmd.memory_limit == const.DEFAULT_MEMORY_LIMIT: + if cmd.memory_limit == executor.with_.default.memory_limit: cmd.memory_limit = None - if cmd.proc_limit == const.DEFAULT_PROC_LIMIT: + if cmd.proc_limit == executor.with_.default.proc_limit: cmd.proc_limit = None stage_cases.append(cmd) parser_case = result.DiffCasesConfig( diff --git a/tests/convert/diff/task.json b/tests/convert/diff/task.json index 3c9c6d6..399f9bf 100644 --- a/tests/convert/diff/task.json +++ b/tests/convert/diff/task.json @@ -71,6 +71,8 @@ "stdin": { "src": "/home/tt/.config/joj/diff/case0.in" }, + "cpuLimit": 1000000000, + "clockLimit": 2000000000, "memoryLimit": 2097152 }, { diff --git a/tests/convert/diff/task.toml b/tests/convert/diff/task.toml index fc28cd7..2f50c35 100644 --- a/tests/convert/diff/task.toml +++ b/tests/convert/diff/task.toml @@ -33,6 +33,7 @@ case1.diff.output.ignore_spaces = true case1.command = "./h7/build/ex2" case9.diff.output.score = 1232131 +case9.limit.mem = "10m" case11.diff.output.score = 92321