# Copyright (c) 2020 Graphcore Ltd. All rights reserved.
# Copyright Johns Hopkins University 2020.
"""Load Covid-19 data extracted from the JHU CSSE COVID-19 Data.

https://github.com/CSSEGISandData/COVID-19

Terms of Use:

    #. This data set is licensed under the Creative Commons Attribution 4.0
       International (CC BY 4.0) by the Johns Hopkins University on behalf of
       its Center for Systems Science in Engineering.
       Copyright Johns Hopkins University 2020.
       https://creativecommons.org/licenses/by/4.0/legalcode

    #. Attribute the data as the 'COVID-19 Data Repository by the Center for
       Systems Science and Engineering (CSSE) at Johns Hopkins University' or
       'JHU CSSE COVID-19 Data' for short, and the url:
       https://github.com/CSSEGISandData/COVID-19.

    #. For publications that use the data, please cite the following
       publication: 'Dong E, Du H, Gardner L. An interactive web-based dashboard
       to track COVID-19 in real time. Lancet Inf Dis. 20(5):533-534.
       doi: 10.1016/S1473-3099(20)30120-1'

Only the data numbers in the COUNTRY_DATA_TRAIN and COUNTRY_DATA_TEST
variables were extracted from the dataset.
Graphcore contributed the respective code.
"""
import tensorflow as tf

COUNTRY_DATA_TRAIN = {}
COUNTRY_DATA_TEST = {}
POPULATION = {}


def get_data(name="Italy"):
    """Interface for Covid data extraction.

    Supported countries: ``Italy``, ``New_Zealand``, ``US``.
    """
    COUNTRY_DATA_TRAIN["Italy"] = tf.constant(
        [
            [
                155,
                229,
                322,
                453,
                655,
                888,
                1128,
                1694,
                2036,
                2502,
                3089,
                3858,
                4636,
                5883,
                7375,
                9172,
                10149,
                12462,
                15113,
                17660,
                21157,
                24747,
                27980,
                31506,
                35713,
                41035,
                47021,
                53578,
                59138,
                63927,
                69176,
                74386,
                80589,
                86498,
                92472,
                97689,
                101739,
                105792,
                110574,
                115242,
                119827,
                124632,
                128948,
                132547,
                135586,
                139422,
                143626,
                147577,
                152271,
            ],
            [
                2,
                1,
                1,
                3,
                45,
                46,
                46,
                83,
                149,
                160,
                276,
                414,
                523,
                589,
                622,
                724,
                724,
                1045,
                1045,
                1439,
                1966,
                2335,
                2749,
                2941,
                4025,
                4440,
                4440,
                6072,
                7024,
                7024,
                8326,
                9362,
                10361,
                10950,
                12384,
                13030,
                14620,
                15729,
                16847,
                18278,
                19758,
                20996,
                21815,
                22837,
                24392,
                26491,
                28470,
                30455,
                32534,
            ],
            [
                3,
                7,
                10,
                12,
                17,
                21,
                29,
                34,
                52,
                79,
                107,
                148,
                197,
                233,
                366,
                463,
                631,
                827,
                1016,
                1266,
                1441,
                1809,
                2158,
                2503,
                2978,
                3405,
                4032,
                4825,
                5476,
                6077,
                6820,
                7503,
                8215,
                9134,
                10023,
                10779,
                11591,
                12428,
                13155,
                13915,
                14681,
                15362,
                15887,
                16523,
                17127,
                17669,
                18279,
                18849,
                19468,
            ],
        ],
        dtype=tf.float32,
    )

    COUNTRY_DATA_TEST["Italy"] = tf.constant(
        [
            [
                155,
                229,
                322,
                453,
                655,
                888,
                1128,
                1694,
                2036,
                2502,
                3089,
                3858,
                4636,
                5883,
                7375,
                9172,
                10149,
                12462,
                15113,
                17660,
                21157,
                24747,
                27980,
                31506,
                35713,
                41035,
                47021,
                53578,
                59138,
                63927,
                69176,
                74386,
                80589,
                86498,
                92472,
                97689,
                101739,
                105792,
                110574,
                115242,
                119827,
                124632,
                128948,
                132547,
                135586,
                139422,
                143626,
                147577,
                152271,
                156363,
                159516,
                162488,
                165155,
                168941,
                172434,
                175925,
                178972,
                181228,
                183957,
                187327,
                189973,
                192994,
                195351,
                197675,
                199414,
                201505,
                203591,
                205463,
                207428,
                209328,
                210717,
                211938,
                213013,
                214457,
                215858,
                217185,
                218268,
                219070,
                219814,
                221216,
                222104,
                223096,
                223885,
                224760,
                225435,
                225886,
                226699,
                227364,
                228006,
                228658,
                229327,
                229858,
                230158,
                230555,
                231139,
                231732,
                232248,
                232664,
                232997,
                233197,
                233515,
                233836,
                234013,
                234531,
                234801,
                234998,
                235278,
                235561,
                235763,
                236142,
                236305,
                236651,
                236989,
                237290,
                237500,
                237828,
                238159,
                238011,
                238275,
                238499,
                238720,
                238833,
                239410,
                239706,
                239961,
                240136,
                240310,
            ],
            [
                2,
                1,
                1,
                3,
                45,
                46,
                46,
                83,
                149,
                160,
                276,
                414,
                523,
                589,
                622,
                724,
                724,
                1045,
                1045,
                1439,
                1966,
                2335,
                2749,
                2941,
                4025,
                4440,
                4440,
                6072,
                7024,
                7024,
                8326,
                9362,
                10361,
                10950,
                12384,
                13030,
                14620,
                15729,
                16847,
                18278,
                19758,
                20996,
                21815,
                22837,
                24392,
                26491,
                28470,
                30455,
                32534,
                34211,
                35435,
                37130,
                38092,
                40164,
                42727,
                44927,
                47055,
                48877,
                51600,
                54543,
                57576,
                60498,
                63120,
                64928,
                66624,
                68941,
                71252,
                75945,
                78249,
                79914,
                81654,
                82879,
                85231,
                93245,
                96276,
                99023,
                103031,
                105186,
                106587,
                109039,
                112541,
                115288,
                120205,
                122810,
                125176,
                127326,
                129401,
                132282,
                134560,
                136720,
                138840,
                140479,
                141981,
                144658,
                147101,
                150604,
                152844,
                155633,
                157507,
                158355,
                160092,
                160938,
                161895,
                163781,
                165078,
                165837,
                166584,
                168646,
                169939,
                171338,
                173085,
                174865,
                176370,
                177010,
                178526,
                179455,
                180544,
                181907,
                182453,
                182893,
                183426,
                184585,
                186111,
                186725,
                187615,
                188584,
                188891,
            ],
            [
                3,
                7,
                10,
                12,
                17,
                21,
                29,
                34,
                52,
                79,
                107,
                148,
                197,
                233,
                366,
                463,
                631,
                827,
                1016,
                1266,
                1441,
                1809,
                2158,
                2503,
                2978,
                3405,
                4032,
                4825,
                5476,
                6077,
                6820,
                7503,
                8215,
                9134,
                10023,
                10779,
                11591,
                12428,
                13155,
                13915,
                14681,
                15362,
                15887,
                16523,
                17127,
                17669,
                18279,
                18849,
                19468,
                19899,
                20465,
                21067,
                21645,
                22170,
                22745,
                23227,
                23660,
                24114,
                24648,
                25085,
                25549,
                25969,
                26384,
                26644,
                26977,
                27359,
                27682,
                27967,
                28236,
                28710,
                28884,
                29079,
                29315,
                29684,
                29958,
                30201,
                30395,
                30560,
                30739,
                30911,
                31106,
                31368,
                31610,
                31763,
                31908,
                32007,
                32169,
                32330,
                32486,
                32616,
                32735,
                32785,
                32877,
                32955,
                33072,
                33142,
                33229,
                33340,
                33415,
                33475,
                33530,
                33601,
                33689,
                33774,
                33846,
                33899,
                33964,
                34043,
                34114,
                34167,
                34223,
                34301,
                34345,
                34371,
                34405,
                34448,
                34514,
                34561,
                34610,
                34634,
                34657,
                34675,
                34644,
                34678,
                34708,
                34716,
                34738,
            ],
        ],
        dtype=tf.float32,
    )

    COUNTRY_DATA_TRAIN["New_Zealand"] = tf.constant(
        [
            [
                102,
                102,
                155,
                205,
                283,
                368,
                451,
                514,
                589,
                647,
                708,
                797,
                868,
                950,
                1039,
                1106,
                1160,
                1210,
                1239,
                1283,
                1312,
                1330,
                1349,
                1366,
                1386,
                1401,
                1409,
                1422,
                1431,
                1440,
                1445,
                1451,
                1456,
                1461,
                1470,
                1469,
                1472,
                1474,
                1476,
                1479,
                1485,
                1487,
                1487,
                1486,
                1488,
                1489,
                1490,
                1492,
                1494,
            ],
            [
                0,
                0,
                12,
                22,
                27,
                37,
                50,
                56,
                63,
                74,
                83,
                92,
                103,
                127,
                156,
                176,
                241,
                282,
                317,
                373,
                422,
                471,
                546,
                628,
                728,
                770,
                816,
                867,
                912,
                974,
                1006,
                1036,
                1095,
                1118,
                1142,
                1180,
                1214,
                1229,
                1241,
                1252,
                1263,
                1266,
                1276,
                1302,
                1316,
                1332,
                1347,
                1368,
                1371,
            ],
            [
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                2,
                4,
                4,
                5,
                9,
                9,
                9,
                11,
                11,
                12,
                12,
                13,
                14,
                17,
                18,
                18,
                19,
                19,
                19,
                19,
                19,
                20,
                20,
                20,
                20,
                21,
                21,
                21,
                21,
                21,
            ],
        ],
        dtype=tf.float32,
    )

    COUNTRY_DATA_TEST["New_Zealand"] = tf.constant(
        [
            [
                102,
                102,
                155,
                205,
                283,
                368,
                451,
                514,
                589,
                647,
                708,
                797,
                868,
                950,
                1039,
                1106,
                1160,
                1210,
                1239,
                1283,
                1312,
                1330,
                1349,
                1366,
                1386,
                1401,
                1409,
                1422,
                1431,
                1440,
                1445,
                1451,
                1456,
                1461,
                1470,
                1469,
                1472,
                1474,
                1476,
                1479,
                1485,
                1487,
                1487,
                1486,
                1488,
                1489,
                1490,
                1492,
                1494,
                1497,
                1497,
                1497,
                1497,
                1498,
                1498,
                1499,
                1499,
                1499,
                1503,
                1503,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1504,
                1506,
                1506,
                1507,
                1507,
                1509,
                1511,
                1513,
                1515,
                1516,
                1519,
                1520,
                1522,
                1526,
                1528,
                1528,
                1528,
                1530,
                1530,
                1530,
                1533,
                1534,
                1536,
                1537,
                1540,
                1542,
                1543,
                1544,
                1544,
                1545,
                1547,
                1548,
                1549,
                1550,
                1553,
                1554,
            ],
            [
                0,
                0,
                12,
                22,
                27,
                37,
                50,
                56,
                63,
                74,
                83,
                92,
                103,
                127,
                156,
                176,
                241,
                282,
                317,
                373,
                422,
                471,
                546,
                628,
                728,
                770,
                816,
                867,
                912,
                974,
                1006,
                1036,
                1095,
                1118,
                1142,
                1180,
                1214,
                1229,
                1241,
                1252,
                1263,
                1266,
                1276,
                1302,
                1316,
                1332,
                1347,
                1368,
                1371,
                1386,
                1398,
                1402,
                1411,
                1421,
                1428,
                1433,
                1433,
                1433,
                1447,
                1452,
                1455,
                1455,
                1456,
                1456,
                1461,
                1462,
                1474,
                1481,
                1481,
                1481,
                1481,
                1481,
                1481,
                1481,
                1481,
                1481,
                1481,
                1482,
                1482,
                1482,
                1482,
                1482,
                1482,
                1482,
                1482,
                1482,
                1482,
                1482,
                1482,
                1482,
                1482,
                1482,
                1483,
                1483,
                1484,
                1484,
                1484,
                1484,
                1484,
                1484,
                1484,
                1490,
                1490,
                1490,
                1490,
                1490,
                1492,
                1492,
                1494,
                1497,
                1497,
                1497,
                1497,
                1498,
                1498,
                1499,
                1506,
                1506,
                1506,
                1506,
            ],
            [
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                1,
                2,
                4,
                4,
                5,
                9,
                9,
                9,
                11,
                11,
                12,
                12,
                13,
                14,
                17,
                18,
                18,
                19,
                19,
                19,
                19,
                19,
                20,
                20,
                20,
                20,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                21,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
                22,
            ],
        ],
        dtype=tf.float32,
    )

    COUNTRY_DATA_TRAIN["US"] = tf.constant(
        [
            [
                107,
                184,
                237,
                403,
                519,
                594,
                782,
                1147,
                1586,
                2219,
                2978,
                3212,
                4679,
                6512,
                9169,
                13663,
                20030,
                26025,
                34832,
                46052,
                56629,
                68663,
                86556,
                105196,
                124793,
                143724,
                165733,
                192101,
                217920,
                248309,
                280306,
                313304,
                341489,
                371675,
                403073,
                435089,
                469738,
                503274,
                532632,
                559591,
                585382,
                613973,
                643981,
                675504,
                708310,
                736161,
                761842,
                790264,
                816302,
            ],
            [
                7,
                7,
                7,
                7,
                7,
                7,
                8,
                8,
                12,
                12,
                12,
                12,
                17,
                17,
                105,
                121,
                147,
                176,
                178,
                178,
                348,
                361,
                681,
                869,
                1072,
                2665,
                5644,
                7024,
                8474,
                9001,
                9707,
                14652,
                17448,
                19581,
                21763,
                23559,
                25410,
                28790,
                31270,
                32988,
                43482,
                47763,
                52096,
                54703,
                58545,
                64840,
                70337,
                72329,
                75204,
            ],
            [
                11,
                12,
                14,
                17,
                21,
                22,
                28,
                33,
                43,
                51,
                58,
                70,
                97,
                132,
                191,
                265,
                364,
                464,
                574,
                763,
                1002,
                1326,
                1734,
                2254,
                2886,
                3472,
                4164,
                5252,
                6422,
                7924,
                9313,
                10843,
                12426,
                14196,
                16767,
                18913,
                21141,
                23359,
                25488,
                27294,
                29240,
                31692,
                34301,
                36477,
                38570,
                40530,
                42461,
                44647,
                47195,
            ],
        ],
        dtype=tf.float32,
    )

    COUNTRY_DATA_TEST["US"] = tf.constant(
        [
            [
                107,
                184,
                237,
                403,
                519,
                594,
                782,
                1147,
                1586,
                2219,
                2978,
                3212,
                4679,
                6512,
                9169,
                13663,
                20030,
                26025,
                34832,
                46052,
                56629,
                68663,
                86556,
                105196,
                124793,
                143724,
                165733,
                192101,
                217920,
                248309,
                280306,
                313304,
                341489,
                371675,
                403073,
                435089,
                469738,
                503274,
                532632,
                559591,
                585382,
                613973,
                643981,
                675504,
                708310,
                736161,
                761842,
                790264,
                816302,
                845599,
                879030,
                912596,
                944397,
                971497,
                994670,
                1019344,
                1047189,
                1076694,
                1110914,
                1138916,
                1163418,
                1186820,
                1211383,
                1236530,
                1264321,
                1291203,
                1316172,
                1335028,
                1354477,
                1377233,
                1398200,
                1425513,
                1450808,
                1474826,
                1492945,
                1514960,
                1535992,
                1559501,
                1585166,
                1608604,
                1629802,
                1649916,
                1668248,
                1687774,
                1706364,
                1729313,
                1753665,
                1777509,
                1796684,
                1814048,
                1835422,
                1855400,
                1877139,
                1902308,
                1924146,
                1941934,
                1959462,
                1977834,
                1998661,
                2021868,
                2046739,
                2072004,
                2091381,
                2111306,
                2135103,
                2161012,
                2189204,
                2220529,
                2252785,
                2278894,
                2309382,
                2345179,
                2379638,
                2420194,
                2465517,
                2507875,
                2547230,
                2587919,
                2634093,
                2685417,
            ],
            [
                7,
                7,
                7,
                7,
                7,
                7,
                8,
                8,
                12,
                12,
                12,
                12,
                17,
                17,
                105,
                121,
                147,
                176,
                178,
                178,
                348,
                361,
                681,
                869,
                1072,
                2665,
                5644,
                7024,
                8474,
                9001,
                9707,
                14652,
                17448,
                19581,
                21763,
                23559,
                25410,
                28790,
                31270,
                32988,
                43482,
                47763,
                52096,
                54703,
                58545,
                64840,
                70337,
                72329,
                75204,
                77366,
                80203,
                99079,
                100372,
                106988,
                111424,
                115936,
                120720,
                153947,
                164015,
                175382,
                180152,
                187180,
                189791,
                189910,
                195036,
                198993,
                212534,
                216169,
                232733,
                230287,
                243430,
                246414,
                250747,
                268376,
                272265,
                283178,
                289392,
                294312,
                298418,
                350135,
                361239,
                366736,
                379157,
                384902,
                391508,
                399991,
                406446,
                416461,
                444758,
                458231,
                463868,
                479258,
                485002,
                491706,
                500849,
                506367,
                518522,
                524855,
                533504,
                540292,
                547386,
                556606,
                561816,
                576334,
                583503,
                592191,
                599115,
                606715,
                617460,
                622133,
                640198,
                647548,
                656161,
                663562,
                670809,
                679308,
                685164,
                705203,
                720631,
                729994,
            ],
            [
                11,
                12,
                14,
                17,
                21,
                22,
                28,
                33,
                43,
                51,
                58,
                70,
                97,
                132,
                191,
                265,
                364,
                464,
                574,
                763,
                1002,
                1326,
                1734,
                2254,
                2886,
                3472,
                4164,
                5252,
                6422,
                7924,
                9313,
                10843,
                12426,
                14196,
                16767,
                18913,
                21141,
                23359,
                25488,
                27294,
                29240,
                31692,
                34301,
                36477,
                38570,
                40530,
                42461,
                44647,
                47195,
                49629,
                52101,
                54255,
                55953,
                57282,
                58748,
                60989,
                63510,
                65930,
                67808,
                69495,
                70591,
                71903,
                74207,
                76556,
                78484,
                80231,
                81781,
                82670,
                83676,
                85289,
                87035,
                88812,
                90482,
                91756,
                92504,
                93669,
                95195,
                96715,
                97922,
                99166,
                100297,
                100908,
                101456,
                102107,
                103625,
                104803,
                105963,
                106926,
                107614,
                108388,
                109444,
                110441,
                111450,
                112348,
                113054,
                113492,
                113984,
                114925,
                115822,
                116682,
                117500,
                118270,
                118578,
                118954,
                119778,
                120511,
                121222,
                121892,
                122510,
                122795,
                123175,
                124019,
                124776,
                125327,
                125944,
                126448,
                126721,
                127098,
                127753,
                128441,
            ],
        ],
        dtype=tf.float32,
    )

    POPULATION["Italy"] = 60.36e6
    POPULATION["New_Zealand"] = 5094780
    POPULATION["US"] = 328239523

    return COUNTRY_DATA_TRAIN[name], POPULATION[name]
