fix: default limit
All checks were successful
build / build (push) Successful in 1m42s
build / build (pull_request) Successful in 2m2s

This commit is contained in:
张泊明518370910136 2025-05-22 20:46:01 -04:00
parent dcebf86408
commit c3f2b21732
GPG Key ID: D47306D7062CDA9D
4 changed files with 22 additions and 14 deletions

View File

@ -127,9 +127,14 @@ class Stage(BaseModel):
@classmethod @classmethod
def gather_cases(cls: Type["Stage"], values: Dict[str, Any]) -> Dict[str, Any]: 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")} 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.pop(key)
values["cases"] = {k: v for k, v in cases.items()} values["cases"] = parsed_cases
return values return values

View File

@ -4,9 +4,13 @@ from functools import partial
from pathlib import Path from pathlib import Path
from typing import Any, Callable, Dict, List, Set, Tuple 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.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 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, args=shlex.split(case_stage.command) if case_stage.command else None,
cpu_limit=case_stage.limit.cpu, 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, memory_limit=case_stage.limit.mem,
proc_limit=50, proc_limit=DEFAULT_PROC_LIMIT,
) )
if cmd.args == executor.with_.default.args: if cmd.args == executor.with_.default.args:
cmd.args = None cmd.args = None
# duplicate with the fallback case in executor.with_ if cmd.cpu_limit == executor.with_.default.cpu_limit:
if cmd.cpu_limit == const.DEFAULT_CPU_LIMIT:
cmd.cpu_limit = None cmd.cpu_limit = None
if ( if cmd.clock_limit == executor.with_.default.clock_limit:
cmd.clock_limit
== const.DEFAULT_CLOCK_LIMIT_MULTIPLIER * const.DEFAULT_CPU_LIMIT
):
cmd.clock_limit = None 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 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 cmd.proc_limit = None
stage_cases.append(cmd) stage_cases.append(cmd)
parser_case = result.DiffCasesConfig( parser_case = result.DiffCasesConfig(

View File

@ -71,6 +71,8 @@
"stdin": { "stdin": {
"src": "/home/tt/.config/joj/diff/case0.in" "src": "/home/tt/.config/joj/diff/case0.in"
}, },
"cpuLimit": 1000000000,
"clockLimit": 2000000000,
"memoryLimit": 2097152 "memoryLimit": 2097152
}, },
{ {

View File

@ -33,6 +33,7 @@ case1.diff.output.ignore_spaces = true
case1.command = "./h7/build/ex2" case1.command = "./h7/build/ex2"
case9.diff.output.score = 1232131 case9.diff.output.score = 1232131
case9.limit.mem = "10m"
case11.diff.output.score = 92321 case11.diff.output.score = 92321