1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use crate::exam::ExamProblemRecipe;
use crate::homonym::HomonymProblemRecipe;
use crate::multi_exam::MultiExamProblemRecipe;
use kurobako_core::epi::problem::ExternalProgramProblemRecipe;
use kurobako_core::problem::{BoxProblem, ProblemRecipe};
use kurobako_core::Result;
use kurobako_problems::{deepobs, fc_net, ffmpeg, lightgbm, nasbench, sigopt, synthetic};
use serde::{Deserialize, Serialize};
use structopt::StructOpt;

#[derive(Debug, Clone, StructOpt, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
#[structopt(rename_all = "kebab-case")]
pub enum KurobakoProblemRecipe {
    Command(ExternalProgramProblemRecipe),
    Sigopt(sigopt::SigoptProblemRecipe),
    Nasbench(nasbench::NasbenchProblemRecipe),
    FcNet(fc_net::FcNetProblemRecipe),
    Ffmpeg(ffmpeg::FfmpegProblemRecipe),
    Lightgbm(lightgbm::LightgbmProblemRecipe),
    Deepobs(deepobs::DeepobsProblemRecipe),
    Synthetic(synthetic::SyntheticProblemRecipe),
    Exam(ExamProblemRecipe),
    MultiExam(MultiExamProblemRecipe),
    Homonym(HomonymProblemRecipe),
}
impl ProblemRecipe for KurobakoProblemRecipe {
    type Problem = BoxProblem;

    fn create_problem(&self) -> Result<Self::Problem> {
        match self {
            KurobakoProblemRecipe::Command(p) => track!(p.create_problem().map(BoxProblem::new)),
            KurobakoProblemRecipe::Sigopt(p) => track!(p.create_problem().map(BoxProblem::new)),
            KurobakoProblemRecipe::Nasbench(p) => track!(p.create_problem().map(BoxProblem::new)),
            KurobakoProblemRecipe::FcNet(p) => track!(p.create_problem().map(BoxProblem::new)),
            KurobakoProblemRecipe::Ffmpeg(p) => track!(p.create_problem().map(BoxProblem::new)),
            KurobakoProblemRecipe::Lightgbm(p) => track!(p.create_problem().map(BoxProblem::new)),
            KurobakoProblemRecipe::Deepobs(p) => track!(p.create_problem().map(BoxProblem::new)),
            KurobakoProblemRecipe::Synthetic(p) => track!(p.create_problem().map(BoxProblem::new)),
            KurobakoProblemRecipe::Exam(p) => track!(p.create_problem().map(BoxProblem::new)),
            KurobakoProblemRecipe::MultiExam(p) => track!(p.create_problem().map(BoxProblem::new)),
            KurobakoProblemRecipe::Homonym(p) => track!(p.create_problem().map(BoxProblem::new)),
        }
    }
}