WIP: dev #6
|
@ -20,9 +20,7 @@ from joj3_config_generator.models import (
|
|||
)
|
||||
|
||||
|
||||
# FIXME: LLM generated convert function, only for demostration
|
||||
def convert(repo_conf: Repo, task_conf: Task) -> ResultConfig:
|
||||
print(task_conf)
|
||||
# Create the base ResultConf object
|
||||
# FIXME: wrap things in functions
|
||||
result_conf = ResultConfig(
|
||||
|
@ -100,7 +98,6 @@ def convert(repo_conf: Repo, task_conf: Task) -> ResultConfig:
|
|||
conf_stage = fix_result_detail(task_stage, conf_stage)
|
||||
conf_stage = fix_comment(task_stage, conf_stage)
|
||||
conf_stage = fix_keyword(task_stage, conf_stage)
|
||||
# TODO: fix diff parser here
|
||||
conf_stage = fix_diff(task_stage, conf_stage)
|
||||
result_conf.stage.stages.append(conf_stage)
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import rtoml
|
||||
|
||||
from joj3_config_generator.models.result import CmdFile, OptionalCmd
|
||||
from joj3_config_generator.models.result import Stage as ResultStage
|
||||
from joj3_config_generator.models.task import Stage as TaskStage
|
||||
|
||||
|
@ -78,5 +79,73 @@ def fix_comment(task_stage: TaskStage, conf_stage: ResultStage) -> ResultStage:
|
|||
|
||||
|
||||
def fix_diff(task_stage: TaskStage, conf_stage: ResultStage) -> ResultStage:
|
||||
if task_stage.parsers is not None and "diff" in task_stage.parsers:
|
||||
diff_parser = next((p for p in conf_stage.parsers if p.name == "diff"), None)
|
||||
skip = task_stage.skip or []
|
||||
cases = task_stage.cases or {}
|
||||
finalized_cases = [case for case in cases if case not in skip]
|
||||
|
||||
stage_cases = []
|
||||
parser_cases = []
|
||||
|
||||
for case in finalized_cases:
|
||||
case_stage = task_stage.cases.get(case) if task_stage.cases else None
|
||||
if not case_stage:
|
||||
continue
|
||||
|
||||
# Ensure case_stage.limit is defined before accessing .cpu and .mem
|
||||
cpu_limit = (
|
||||
case_stage.limit.cpu * 1_000_000_000
|
||||
if case_stage.limit and case_stage.limit.cpu is not None
|
||||
else 0
|
||||
)
|
||||
clock_limit = (
|
||||
2 * case_stage.limit.cpu * 1_000_000_000
|
||||
if case_stage.limit and case_stage.limit.cpu is not None
|
||||
else 0
|
||||
)
|
||||
memory_limit = (
|
||||
case_stage.limit.mem * 1_024 * 1_024
|
||||
if case_stage.limit and case_stage.limit.mem is not None
|
||||
else 0
|
||||
)
|
||||
|
||||
stage_cases.append(
|
||||
OptionalCmd(
|
||||
stdin=CmdFile(
|
||||
src=f"/home/tt/.config/joj/{conf_stage.name}/{case}.in"
|
||||
),
|
||||
cpu_limit=cpu_limit,
|
||||
clock_limit=clock_limit,
|
||||
memory_limit=memory_limit,
|
||||
proc_limit=50,
|
||||
)
|
||||
)
|
||||
|
||||
# Ensure case_stage.diff and case_stage.diff.output are defined
|
||||
diff_output = (
|
||||
case_stage.diff.output
|
||||
if case_stage.diff and case_stage.diff.output
|
||||
else None
|
||||
)
|
||||
if diff_output:
|
||||
parser_cases.append(
|
||||
{
|
||||
"outputs": [
|
||||
{
|
||||
"score": diff_output.score,
|
||||
"fileName": "stdout",
|
||||
"answerPath": f"/home/tt/.config/joj/{conf_stage.name}/{case}.out",
|
||||
"forceQuitOnDiff": diff_output.forcequit,
|
||||
"alwaysHide": diff_output.hide,
|
||||
"compareSpace": not diff_output.ignorespaces,
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
|
||||
if diff_parser and task_stage.diff is not None:
|
||||
diff_parser.with_.update({"name": "diff", "cases": parser_cases})
|
||||
conf_stage.executor.with_.cases = stage_cases
|
||||
|
||||
return conf_stage
|
||||
|
|
|
@ -50,7 +50,7 @@ class Stage(BaseModel):
|
|||
files: Optional[Files] = None
|
||||
score: Optional[int] = 0
|
||||
parsers: Optional[list[str]] = [] # list of parsers
|
||||
limit: Optional[Limit] = None
|
||||
limit: Optional[Limit] = Limit()
|
||||
dummy: Optional[ParserDummy] = ParserDummy()
|
||||
result_status: Optional[ParserDummy] = Field(ParserDummy(), alias="result-status")
|
||||
keyword: Optional[ParserKeyword] = ParserKeyword()
|
||||
|
|
Loading…
Reference in New Issue
Block a user