'''
Created on 09.06.2017

@author: Gregor Hendel
'''

TESTSET_MIPLIB2010 = "MIPLIB2010"
TESTSET_MIPLIB2003 = "MIPLIB2003"
TESTSET_MIPLIB3 = "MIPLIB3"
TESTSET_CORAL = "COR@L"
TESTSET_MMM = "MMM"

_testsetdict = {TESTSET_MIPLIB2010 : [\
    "30n20b8",
    "acc-tight5",
    "aflow40b",
    "air04",
    "app1-2",
    "ash608gpia-3col",
    "bab5",
    "beasleyC3",
    "biella1",
    "bienst2",
    "binkar10_1",
    "bley_xl1",
    "bnatt350",
    "core2536-691",
    "cov1075",
    "csched010",
    "danoint",
    "dfn-gwin-UUM",
    "eil33-2",
    "eilB101",
    "enlight13",
    "enlight14",
    "ex9",
    "glass4",
    "gmu-35-40",
    "iis-100-0-cov",
    "iis-bupa-cov",
    "iis-pima-cov",
    "lectsched-4-obj",
    "m100n500k4r1",
    "macrophage",
    "map18",
    "map20",
    "mcsched",
    "mik-250-1-100-1",
    "mine-166-5",
    "mine-90-10",
    "msc98-ip",
    "mspp16",
    "mzzv11",
    "n3div36",
    "n3seq24",
    "n4-3",
    "neos-1109824",
    "neos-1337307",
    "neos-1396125",
    "neos13",
    "neos-1601936",
    "neos18",
    "neos-476283",
    "neos-686190",
    "neos-849702",
    "neos-916792",
    "neos-934278",
    "net12",
    "netdiversion",
    "newdano",
    "noswot",
    "ns1208400",
    "ns1688347",
    "ns1758913",
    "ns1766074",
    "ns1830653",
    "opm2-z7-s2",
    "pg5_34",
    "pigeon-10",
    "pw-myciel4",
    "qiu",
    "rail507",
    "ran16x16",
    "reblock67",
    "rmatr100-p10",
    "rmatr100-p5",
    "rmine6",
    "rocII-4-11",
    "rococoC10-001000",
    "roll3000",
    "satellites1-25",
    "sp98ic",
    "sp98ir",
    "tanglegram1",
    "tanglegram2",
    "timtab1",
    "triptim1",
    "unitcal_7",
    "vpphard",
    "zib54-UUE",
    ],
TESTSET_MIPLIB2003 : [
    "10teams",
    "a1c1s1",
    "aflow30a",
    "aflow40b",
    "air04",
    "air05",
    "arki001",
    "atlanta-ip",
    "cap6000",
    "dano3mip",
    "danoint",
    "disctom",
    "ds",
    "fast0507",
    "fiber",
    "fixnet6",
    "gesa2-o",
    "gesa2",
    "glass4",
    "harp2",
    "liu",
    "manna81",
    "markshare1",
    "markshare2",
    "mas74",
    "mas76",
    "misc07",
    "mkc",
    "mod011",
    "modglob",
    "momentum1",
    "momentum2",
    "momentum3",
    "msc98-ip",
    "mzzv11",
    "mzzv42z",
    "net12",
    "noswot",
    "nsrand-ipx",
    "nw04",
    "opt1217",
    "p2756",
    "pk1",
    "pp08a",
    "pp08aCUTS",
    "protfold",
    "qiu",
    "rd-rplusc-21",
    "roll3000",
    "rout",
    "set1ch",
    "seymour",
    "sp97ar",
    "stp3d",
    "swath",
    "t1717",
    "timtab1",
    "timtab2",
    "tr12-30",
    "vpm2"
    ],
TESTSET_MIPLIB3 : [
    "10teams",
    "air03",
    "air04",
    "air05",
    "arki001",
    "bell3a",
    "bell5",
    "blend2",
    "cap6000",
    "dano3mip",
    "danoint",
    "dcmulti",
    "dsbmip",
    "egout",
    "enigma",
    "fast0507",
    "fiber",
    "fixnet6",
    "flugpl",
    "gen",
    "gesa2",
    "gesa2_o",
    "gesa3",
    "gesa3_o",
    "gt2",
    "harp2",
    "khb05250",
    "l152lav",
    "lseu",
    "markshare1",
    "markshare2",
    "misc03",
    "misc06",
    "misc07",
    "mitre",
    "mas74",
    "mas76",
    "mod008",
    "mod010",
    "mod011",
    "modglob",
    "noswot",
    "nw04",
    "p0033",
    "p0201",
    "p0282",
    "p0548",
    "p2756",
    "pk1",
    "pp08a",
    "pp08aCUTS",
    "qiu",
    "qnet1",
    "qnet1_o",
    "rentacar",
    "rgn",
    "rout",
    "set1ch",
    "seymour",
    "stein27",
    "stein45",
    "swath",
    "vpm1",
    "vpm2",
],
TESTSET_CORAL : [
    "22433",
    "23588",
    "aligninq",
    "bc1",
    "bc",
    "bienst1",
    "bienst2",
    "binkar10_1",
    "d10200",
    "d20200",
    "dano3_3",
    "dano3_4",
    "dano3_5",
    "fiball",
    "germanrr",
    "haprp",
    "leo1",
    "leo2",
    "lrn",
    "mcf2",
    "mcsched",
    "mkc1",
    "nag",
    "neos-1053234",
    "neos-1053591",
    "neos-1056905",
    "neos-1058477",
    "neos-1061020",
    "neos-1062641",
    "neos-1067731",
    "neos-1096528",
    "neos-1109824",
    "neos-1112782",
    "neos-1112787",
    "neos-1120495",
    "neos-1121679",
    "neos-1122047",
    "neos-1126860",
    "neos-1140050",
    "neos-1151496",
    "neos-1171448",
    "neos-1171692",
    "neos-1171737",
    "neos-1173026",
    "neos-1200887",
    "neos-1208069",
    "neos-1208135",
    "neos-1211578",
    "neos-1215259",
    "neos-1215891",
    "neos-1223462",
    "neos-1224597",
    "neos-1225589",
    "neos-1228986",
    "neos-1281048",
    "neos-1311124",
    "neos-1324574",
    "neos-1330346",
    "neos-1330635",
    "neos-1337307",
    "neos-1337489",
    "neos-1346382",
    "neos-1354092",
    "neos-1367061",
    "neos-1396125",
    "neos-1407044",
    "neos-1413153",
    "neos-1415183",
    "neos-1417043",
    "neos-1420205",
    "neos-1420546",
    "neos-1420790",
    "neos-1423785",
    "neos-1425699",
    "neos-1426635",
    "neos-1426662",
    "neos-1427181",
    "neos-1427261",
    "neos-1429185",
    "neos-1429212",
    "neos-1429461",
    "neos-1430701",
    "neos-1430811",
    "neos-1436709",
    "neos-1436713",
    "neos-1437164",
    "neos-1439395",
    "neos-1440225",
    "neos-1440447",
    "neos-1440457",
    "neos-1440460",
    "neos-1441553",
    "neos-1442119",
    "neos-1442657",
    "neos-1445532",
    "neos-1445738",
    "neos-1445743",
    "neos-1445755",
    "neos-1445765",
    "neos-1451294",
    "neos-1456979",
    "neos-1460246",
    "neos-1460265",
    "neos-1460543",
    "neos-1460641",
    "neos-1461051",
    "neos-1464762",
    "neos-1467067",
    "neos-1467371",
    "neos-1467467",
    "neos-1480121",
    "neos-1489999",
    "neos-1516309",
    "neos-1582420",
    "neos-1593097",
    "neos-1595230",
    "neos-1597104",
    "neos-1599274",
    "neos-1601936",
    "neos-1603512",
    "neos-1603518",
    "neos-1603965",
    "neos-1605061",
    "neos-1605075",
    "neos-1616732",
    "neos-1620770",
    "neos-1620807",
    "neos-1622252",
    "neos-430149",
    "neos-476283",
    "neos-480878",
    "neos-494568",
    "neos-495307",
    "neos-498623",
    "neos-501453",
    "neos-501474",
    "neos-503737",
    "neos-504674",
    "neos-504815",
    "neos-506422",
    "neos-506428",
    "neos-512201",
    "neos-520729",
    "neos-522351",
    "neos-525149",
    "neos-530627",
    "neos-538867",
    "neos-538916",
    "neos-544324",
    "neos-547911",
    "neos-548047",
    "neos-548251",
    "neos-551991",
    "neos-555001",
    "neos-555298",
    "neos-555343",
    "neos-555424",
    "neos-555694",
    "neos-555771",
    "neos-555884",
    "neos-555927",
    "neos-565672",
    "neos-565815",
    "neos-570431",
    "neos-574665",
    "neos-578379",
    "neos-582605",
    "neos-583731",
    "neos-584146",
    "neos-584851",
    "neos-584866",
    "neos-585192",
    "neos-585467",
    "neos-593853",
    "neos-595904",
    "neos-595905",
    "neos-595925",
    "neos-598183",
    "neos-603073",
    "neos-611135",
    "neos-611838",
    "neos-612125",
    "neos-612143",
    "neos-612162",
    "neos-619167",
    "neos-631164",
    "neos-631517",
    "neos-631694",
    "neos-631709",
    "neos-631710",
    "neos-631784",
    "neos-632335",
    "neos-633273",
    "neos-641591",
    "neos-655508",
    "neos-662469",
    "neos-686190",
    "neos-691058",
    "neos-691073",
    "neos-693347",
    "neos-702280",
    "neos-709469",
    "neos-717614",
    "neos-738098",
    "neos-775946",
    "neos-780889",
    "neos-785899",
    "neos-785912",
    "neos-785914",
    "neos-787933",
    "neos-791021",
    "neos-796608",
    "neos-799838",
    "neos-801834",
    "neos-803219",
    "neos-803220",
    "neos-806323",
    "neos-807454",
    "neos-807639",
    "neos-807705",
    "neos-808072",
    "neos-808214",
    "neos-810286",
    "neos-810326",
    "neos-820146",
    "neos-820157",
    "neos-820879",
    "neos-824661",
    "neos-824695",
    "neos-825075",
    "neos-826224",
    "neos-826250",
    "neos-826650",
    "neos-826694",
    "neos-826812",
    "neos-826841",
    "neos-827015",
    "neos-827175",
    "neos-829552",
    "neos-830439",
    "neos-831188",
    "neos-839838",
    "neos-839859",
    "neos-839894",
    "neos-841664",
    "neos-847051",
    "neos-847302",
    "neos-848150",
    "neos-848198",
    "neos-848589",
    "neos-848845",
    "neos-849702",
    "neos-850681",
    "neos-856059",
    "neos-859770",
    "neos-860244",
    "neos-860300",
    "neos-862348",
    "neos-863472",
    "neos-872648",
    "neos-873061",
    "neos-876808",
    "neos-880324",
    "neos-881765",
    "neos-885086",
    "neos-885524",
    "neos-886822",
    "neos-892255",
    "neos-905856",
    "neos-906865",
    "neos-911880",
    "neos-911970",
    "neos-912015",
    "neos-912023",
    "neos-913984",
    "neos-914441",
    "neos-916173",
    "neos-916792",
    "neos-930752",
    "neos-931517",
    "neos-931538",
    "neos-932721",
    "neos-932816",
    "neos-933364",
    "neos-933550",
    "neos-933562",
    "neos-933638",
    "neos-933815",
    "neos-933966",
    "neos-934184",
    "neos-934278",
    "neos-934441",
    "neos-934531",
    "neos-935234",
    "neos-935348",
    "neos-935496",
    "neos-935627",
    "neos-935674",
    "neos-935769",
    "neos-936660",
    "neos-937446",
    "neos-937511",
    "neos-937815",
    "neos-941262",
    "neos-941313",
    "neos-941698",
    "neos-941717",
    "neos-941782",
    "neos-942323",
    "neos-942830",
    "neos-942886",
    "neos-948126",
    "neos-948268",
    "neos-948346",
    "neos-950242",
    "neos-952987",
    "neos-953928",
    "neos-954925",
    "neos-955215",
    "neos-955800",
    "neos-956971",
    "neos-957143",
    "neos-957270",
    "neos-957323",
    "neos-957389",
    "neos-960392",
    "neos-983171",
    "neos-984165",
    "newdano",
    "npmv07",
    "nsa",
    "nug08",
    "p6b",
    "pg5_34",
    "pg",
    "prod1",
    "prod2",
    "qap10",
    "ramos3",
    "ran14x18_1",
    "ran14x18.disj-8",
    "rlp1",
    "roy",
    "seymour.disj-10",
    "sp97ic",
    "sp98ar",
    "sp98ic",
    "sp98ir",
    "Test3",
    ]
}

_testsetdict[TESTSET_MMM] = list(set(_testsetdict[TESTSET_MIPLIB3] +
                                     _testsetdict[TESTSET_MIPLIB2003] +
                                     _testsetdict[TESTSET_MIPLIB2010]))

def getTestSetByName(testset : str = TESTSET_MIPLIB2010) -> list:
    """Return all problem names that belong to the specified test set as list
    """
    try:
        return _testsetdict[testset]
    except IndexError:
        raise IndexError("Unknown test set specifier {}".format(testset))
    
def getTestSets():
    """return all valid test set identifiers
    """
    return list(_testsetdict.keys())

