diff --git a/build/build.sh b/build/build.sh index a0d3eda..bb270e8 100755 --- a/build/build.sh +++ b/build/build.sh @@ -1,3 +1,3 @@ SCRIPT_REL_DIR=$(dirname "${BASH_SOURCE[0]}") -$SCRIPT_REL_DIR/build_.sh debug raspi arm64 +$SCRIPT_REL_DIR/build_.sh debug osx arm64 # $SCRIPT_REL_DIR/build_.sh debug wasm intel \ No newline at end of file diff --git a/run_tree/data/incenter_test_data.c b/run_tree/data/incenter_test_data.c new file mode 100644 index 0000000..6139e23 --- /dev/null +++ b/run_tree/data/incenter_test_data.c @@ -0,0 +1,599 @@ +typedef struct { + Incenter_City_Id city; + u32 year; + Incenter_Month_Id month; + r32 value_0; + r32 value_1; + r32 value_2; +} Incenter_Test_Data_Row; +static Incenter_Test_Data_Row test_data[] = { +[0] = { city_kiev, 2019, MONTH_Mar, 0.820890464489415f, 0, 0 }, +[1] = { city_kiev, 2019, MONTH_May, 0.56073407325174f, 0, 0 }, +[2] = { city_kiev, 2019, MONTH_Oct, 0.637426751346005f, 0, 0 }, +[3] = { city_kiev, 2019, MONTH_Dec, 0.80862890640556f, 0, 0 }, +[4] = { city_kiev, 2020, MONTH_Apr, 0.593076391792340f, 0, 0 }, +[5] = { city_kiev, 2020, MONTH_Jul, 0.858014975913935f, 0, 0 }, +[6] = { city_kiev, 2020, MONTH_Sep, 0.179765571537987f, 0, 0 }, +[7] = { city_kiev, 2021, MONTH_Jan, 0.263253469386432f, 0, 0 }, +[8] = { city_kiev, 2021, MONTH_Mar, 0.841496999918748f, 0, 0 }, +[9] = { city_kiev, 2021, MONTH_May, 0.537492416903434f, 0, 0 }, +[10] = { city_kiev, 2021, MONTH_Oct, 0.406981562075466f, 0, 0 }, +[11] = { city_kiev, 2021, MONTH_Dec, 0.76792105984555f, 0, 0 }, +[12] = { city_buenos_aires, 2019, MONTH_Mar, 0.877459116126247f, 0, 0 }, +[13] = { city_buenos_aires, 2019, MONTH_May, 0.2062446538997374f, 0, 0 }, +[14] = { city_buenos_aires, 2019, MONTH_Oct, 0.984797647735092f, 0, 0 }, +[15] = { city_buenos_aires, 2019, MONTH_Dec, 0.0672954058701716f, 0, 0 }, +[16] = { city_buenos_aires, 2020, MONTH_Apr, 0.898576581082917f, 0, 0 }, +[17] = { city_buenos_aires, 2020, MONTH_Jul, 0.814741645034557f, 0, 0 }, +[18] = { city_buenos_aires, 2020, MONTH_Sep, 0.3941931609289429f, 0, 0 }, +[19] = { city_buenos_aires, 2021, MONTH_Jan, 0.284481574114039f, 0, 0 }, +[20] = { city_buenos_aires, 2021, MONTH_Mar, 0.992958746256462f, 0, 0 }, +[21] = { city_buenos_aires, 2021, MONTH_May, 0.155064917250535f, 0, 0 }, +[22] = { city_buenos_aires, 2021, MONTH_Oct, 0.652209624619602f, 0, 0 }, +[23] = { city_buenos_aires, 2021, MONTH_Dec, 0.740860591751484f, 0, 0 }, +[24] = { city_canberra, 2019, MONTH_May, 0.1338689937499514f, 0, 0 }, +[25] = { city_canberra, 2019, MONTH_Aug, 0.0125184520464056f, 0, 0 }, +[26] = { city_canberra, 2019, MONTH_Nov, 0.3106947788493822f, 0, 0 }, +[27] = { city_canberra, 2019, MONTH_Dec, 0.614443279576778f, 0, 0 }, +[28] = { city_canberra, 2020, MONTH_Apr, 0.3821505232456925f, 0, 0 }, +[29] = { city_canberra, 2020, MONTH_Jul, 0.4925866761524977f, 0, 0 }, +[30] = { city_canberra, 2020, MONTH_Sep, 0.01402457594644135f, 0, 0 }, +[31] = { city_canberra, 2021, MONTH_Jan, 0.630246902453805f, 0, 0 }, +[32] = { city_canberra, 2021, MONTH_Mar, 0.665741155823732f, 0, 0 }, +[33] = { city_canberra, 2021, MONTH_May, 0.637515374364962f, 0, 0 }, +[34] = { city_canberra, 2021, MONTH_Oct, 0.435508034652498f, 0, 0 }, +[35] = { city_canberra, 2021, MONTH_Dec, 0.784267101708750f, 0, 0 }, +[36] = { city_yerevan, 2019, MONTH_Feb, 0.222480434220212f, 0, 0 }, +[37] = { city_yerevan, 2019, MONTH_Apr, 0.4029543563896680f, 0, 0 }, +[38] = { city_yerevan, 2019, MONTH_Jun, 0.0084130412911773f, 0, 0 }, +[39] = { city_yerevan, 2019, MONTH_Oct, 0.4935333893524508f, 0, 0 }, +[40] = { city_yerevan, 2020, MONTH_Mar, 0.795608809243028f, 0, 0 }, +[41] = { city_yerevan, 2020, MONTH_May, 0.871852281333013f, 0, 0 }, +[42] = { city_yerevan, 2020, MONTH_Oct, 0.757850269654449f, 0, 0 }, +[43] = { city_yerevan, 2020, MONTH_Dec, 0.305973943715009f, 0, 0 }, +[44] = { city_yerevan, 2021, MONTH_Mar, 0.575105708333009f, 0, 0 }, +[45] = { city_yerevan, 2021, MONTH_May, 0.3241565018180455f, 0, 0 }, +[46] = { city_yerevan, 2021, MONTH_Oct, 0.1391937656411673f, 0, 0 }, +[47] = { city_yerevan, 2021, MONTH_Dec, 0.408290129008908f, 0, 0 }, +[48] = { city_bishkek, 2019, MONTH_Feb, 0.854538964489814f, 0, 0 }, +[49] = { city_bishkek, 2019, MONTH_Apr, 0.867971473415691f, 0, 0 }, +[50] = { city_bishkek, 2019, MONTH_Jun, 0.979390156498233f, 0, 0 }, +[51] = { city_bishkek, 2019, MONTH_Oct, 0.828979030987664f, 0, 0 }, +[52] = { city_bishkek, 2020, MONTH_Apr, 0.145895128700512f, 0, 0 }, +[53] = { city_bishkek, 2020, MONTH_Jul, 0.803446711367975f, 0, 0 }, +[54] = { city_bishkek, 2020, MONTH_Sep, 0.3478959543445272f, 0, 0 }, +[55] = { city_bishkek, 2021, MONTH_Jan, 0.0718423039611171f, 0, 0 }, +[56] = { city_bishkek, 2021, MONTH_Mar, 0.783607349668768f, 0, 0 }, +[57] = { city_bishkek, 2021, MONTH_May, 0.721750083937874f, 0, 0 }, +[58] = { city_bishkek, 2021, MONTH_Oct, 0.2831310963771227f, 0, 0 }, +[59] = { city_bishkek, 2021, MONTH_Dec, 0.107136773774764f, 0, 0 }, +[60] = { city_dhaka, 2019, MONTH_Mar, 0.696487045082252f, 0, 0 }, +[61] = { city_dhaka, 2019, MONTH_May, 0.926874194615664f, 0, 0 }, +[62] = { city_dhaka, 2019, MONTH_Oct, 0.065784704818257f, 0, 0 }, +[63] = { city_dhaka, 2019, MONTH_Dec, 0.267978732515615f, 0, 0 }, +[64] = { city_dhaka, 2020, MONTH_Feb, 0.741594899662727f, 0, 0 }, +[65] = { city_dhaka, 2020, MONTH_Apr, 0.888792879778451f, 0, 0 }, +[66] = { city_dhaka, 2020, MONTH_Jun, 0.952616025778708f, 0, 0 }, +[67] = { city_dhaka, 2020, MONTH_Oct, 0.539424539962102f, 0, 0 }, +[68] = { city_dhaka, 2021, MONTH_Feb, 0.783291871057349f, 0, 0 }, +[69] = { city_dhaka, 2021, MONTH_Apr, 0.1670300347942025f, 0, 0 }, +[70] = { city_dhaka, 2021, MONTH_Jun, 0.916080035896739f, 0, 0 }, +[71] = { city_dhaka, 2021, MONTH_Oct, 0.04557651966926190f, 0, 0 }, +[72] = { city_sucre, 2019, MONTH_Feb, 0.905795384338579f, 0, 0 }, +[73] = { city_sucre, 2019, MONTH_Apr, 0.04894925227303792f, 0, 0 }, +[74] = { city_sucre, 2019, MONTH_Jun, 0.3974826752695833f, 0, 0 }, +[75] = { city_sucre, 2019, MONTH_Oct, 0.3240253361391306f, 0, 0 }, +[76] = { city_sucre, 2020, MONTH_Feb, 0.255506118683492f, 0, 0 }, +[77] = { city_sucre, 2020, MONTH_Apr, 0.683469845394748f, 0, 0 }, +[78] = { city_sucre, 2020, MONTH_Jun, 0.0860787488725892f, 0, 0 }, +[79] = { city_sucre, 2020, MONTH_Oct, 0.480200082551104f, 0, 0 }, +[80] = { city_sucre, 2021, MONTH_Apr, 0.933388110124702f, 0, 0 }, +[81] = { city_sucre, 2021, MONTH_Jul, 0.826055726458284f, 0, 0 }, +[82] = { city_sucre, 2021, MONTH_Sep, 0.655861858686346f, 0, 0 }, +[83] = { city_sucre, 2022, MONTH_Jan, 0.995135577230638f, 0, 0 }, +[84] = { city_brasilia, 2019, MONTH_Apr, 0.934349752963540f, 0, 0 }, +[85] = { city_brasilia, 2019, MONTH_Jul, 0.557085223032821f, 0, 0 }, +[86] = { city_brasilia, 2019, MONTH_Sep, 0.224253014743045f, 0, 0 }, +[87] = { city_brasilia, 2020, MONTH_Jan, 0.3792768359577919f, 0, 0 }, +[88] = { city_brasilia, 2020, MONTH_Feb, 0.134570768681787f, 0, 0 }, +[89] = { city_brasilia, 2020, MONTH_Apr, 0.2982662489386165f, 0, 0 }, +[90] = { city_brasilia, 2020, MONTH_Jun, 0.847116114015527f, 0, 0 }, +[91] = { city_brasilia, 2020, MONTH_Oct, 0.710668345133466f, 0, 0 }, +[92] = { city_brasilia, 2021, MONTH_Apr, 0.882130538520757f, 0, 0 }, +[93] = { city_brasilia, 2021, MONTH_Jul, 0.634126485396549f, 0, 0 }, +[94] = { city_brasilia, 2021, MONTH_Sep, 0.879304288498351f, 0, 0 }, +[95] = { city_brasilia, 2022, MONTH_Jan, 0.367836889045680f, 0, 0 }, +[96] = { city_ottawa, 2019, MONTH_Feb, 0.4644661026237456f, 0, 0 }, +[97] = { city_ottawa, 2019, MONTH_Apr, 0.27044176317875f, 0, 0 }, +[98] = { city_ottawa, 2019, MONTH_Jun, 0.78502064470336f, 0, 0 }, +[99] = { city_ottawa, 2019, MONTH_Oct, 0.439787889686537f, 0, 0 }, +[100] = { city_ottawa, 2020, MONTH_Mar, 0.625070053347673f, 0, 0 }, +[101] = { city_ottawa, 2020, MONTH_May, 0.854391809397701f, 0, 0 }, +[102] = { city_ottawa, 2020, MONTH_Oct, 0.1092476526609484f, 0, 0 }, +[103] = { city_ottawa, 2020, MONTH_Dec, 0.0698930895777035f, 0, 0 }, +[104] = { city_ottawa, 2021, MONTH_May, 0.0219222869517711f, 0, 0 }, +[105] = { city_ottawa, 2021, MONTH_Aug, 0.3118047013029038f, 0, 0 }, +[106] = { city_ottawa, 2021, MONTH_Nov, 0.800964131022624f, 0, 0 }, +[107] = { city_ottawa, 2021, MONTH_Dec, 0.893928203453701f, 0, 0 }, +[108] = { city_santiago, 2019, MONTH_Feb, 0.260406662278948f, 0, 0 }, +[109] = { city_santiago, 2019, MONTH_Apr, 0.0440821965051458f, 0, 0 }, +[110] = { city_santiago, 2019, MONTH_Jun, 0.03370085386772181f, 0, 0 }, +[111] = { city_santiago, 2019, MONTH_Oct, 0.0702001450638586f, 0, 0 }, +[112] = { city_santiago, 2020, MONTH_Mar, 0.66916706280028f, 0, 0 }, +[113] = { city_santiago, 2020, MONTH_May, 0.394667241732750f, 0, 0 }, +[114] = { city_santiago, 2020, MONTH_Oct, 0.9696170778040f, 0, 0 }, +[115] = { city_santiago, 2020, MONTH_Dec, 0.692669953953974f, 0, 0 }, +[116] = { city_santiago, 2021, MONTH_Feb, 0.885578817071499f, 0, 0 }, +[117] = { city_santiago, 2021, MONTH_Apr, 0.02248585274337977f, 0, 0 }, +[118] = { city_santiago, 2021, MONTH_Jun, 0.01661168283700642f, 0, 0 }, +[119] = { city_santiago, 2021, MONTH_Oct, 0.738806466943267f, 0, 0 }, +[120] = { city_beijing, 2019, MONTH_Mar, 0.398464980892838f, 0, 0 }, +[121] = { city_beijing, 2019, MONTH_May, 0.551648164638685f, 0, 0 }, +[122] = { city_beijing, 2019, MONTH_Oct, 0.021236210735964f, 0, 0 }, +[123] = { city_beijing, 2019, MONTH_Dec, 0.2339279354599085f, 0, 0 }, +[124] = { city_beijing, 2020, MONTH_Mar, 0.897658054227696f, 0, 0 }, +[125] = { city_beijing, 2020, MONTH_May, 0.512517872887249f, 0, 0 }, +[126] = { city_beijing, 2020, MONTH_Oct, 0.0988590392525249f, 0, 0 }, +[127] = { city_beijing, 2020, MONTH_Dec, 0.99615807233472f, 0, 0 }, +[128] = { city_beijing, 2021, MONTH_May, 0.391024451068782f, 0, 0 }, +[129] = { city_beijing, 2021, MONTH_Aug, 0.591905762173565f, 0, 0 }, +[130] = { city_beijing, 2021, MONTH_Nov, 0.2283096306364279f, 0, 0 }, +[131] = { city_beijing, 2021, MONTH_Dec, 0.821811925597835f, 0, 0 }, +[132] = { city_bogota, 2019, MONTH_Feb, 0.04055961855563494f, 0, 0 }, +[133] = { city_bogota, 2019, MONTH_Apr, 0.669754494655513f, 0, 0 }, +[134] = { city_bogota, 2019, MONTH_Jun, 0.701264834768624f, 0, 0 }, +[135] = { city_bogota, 2019, MONTH_Oct, 0.926643006799590f, 0, 0 }, +[136] = { city_bogota, 2020, MONTH_May, 0.926535096485845f, 0, 0 }, +[137] = { city_bogota, 2020, MONTH_Aug, 0.562271964832498f, 0, 0 }, +[138] = { city_bogota, 2020, MONTH_Nov, 0.1850507621318452f, 0, 0 }, +[139] = { city_bogota, 2020, MONTH_Dec, 0.1320097943504098f, 0, 0 }, +[140] = { city_bogota, 2021, MONTH_Apr, 0.2549272436870123f, 0, 0 }, +[141] = { city_bogota, 2021, MONTH_Jul, 0.655188137041105f, 0, 0 }, +[142] = { city_bogota, 2021, MONTH_Sep, 0.330150715675793f, 0, 0 }, +[143] = { city_bogota, 2022, MONTH_Jan, 0.931982538146994f, 0, 0 }, +[144] = { city_nicosia, 2019, MONTH_Feb, 0.811253678048109f, 0, 0 }, +[145] = { city_nicosia, 2019, MONTH_Apr, 0.712224222819743f, 0, 0 }, +[146] = { city_nicosia, 2019, MONTH_Jun, 0.399273172446563f, 0, 0 }, +[147] = { city_nicosia, 2019, MONTH_Oct, 0.056092503429609f, 0, 0 }, +[148] = { city_nicosia, 2020, MONTH_Mar, 0.60563587382731f, 0, 0 }, +[149] = { city_nicosia, 2020, MONTH_May, 0.815528514704807f, 0, 0 }, +[150] = { city_nicosia, 2020, MONTH_Oct, 0.728314034392938f, 0, 0 }, +[151] = { city_nicosia, 2020, MONTH_Dec, 0.159377338887028f, 0, 0 }, +[152] = { city_nicosia, 2021, MONTH_May, 0.533098572342027f, 0, 0 }, +[153] = { city_nicosia, 2021, MONTH_Aug, 0.4664341277469371f, 0, 0 }, +[154] = { city_nicosia, 2021, MONTH_Nov, 0.730237961803562f, 0, 0 }, +[155] = { city_nicosia, 2021, MONTH_Dec, 0.597177425986761f, 0, 0 }, +[156] = { city_quito, 2019, MONTH_May, 0.3900500941853586f, 0, 0 }, +[157] = { city_quito, 2019, MONTH_Aug, 0.902510252650640f, 0, 0 }, +[158] = { city_quito, 2019, MONTH_Nov, 0.50747923203348f, 0, 0 }, +[159] = { city_quito, 2019, MONTH_Dec, 0.504675362331222f, 0, 0 }, +[160] = { city_quito, 2020, MONTH_Mar, 0.893239434326622f, 0, 0 }, +[161] = { city_quito, 2020, MONTH_May, 0.1972236787064364f, 0, 0 }, +[162] = { city_quito, 2020, MONTH_Oct, 0.461624391667064f, 0, 0 }, +[163] = { city_quito, 2020, MONTH_Dec, 0.2292995261096597f, 0, 0 }, +[164] = { city_quito, 2021, MONTH_Apr, 0.67583955263968f, 0, 0 }, +[165] = { city_quito, 2021, MONTH_Jul, 0.752273762232872f, 0, 0 }, +[166] = { city_quito, 2021, MONTH_Sep, 0.754769476238442f, 0, 0 }, +[167] = { city_quito, 2022, MONTH_Jan, 0.522476871813856f, 0, 0 }, +[168] = { city_cairo, 2019, MONTH_Apr, 0.1225197816901859f, 0, 0 }, +[169] = { city_cairo, 2019, MONTH_Jul, 0.64021444184204f, 0, 0 }, +[170] = { city_cairo, 2019, MONTH_Sep, 0.1129228329032401f, 0, 0 }, +[171] = { city_cairo, 2020, MONTH_Jan, 0.44379330991469f, 0, 0 }, +[172] = { city_cairo, 2020, MONTH_May, 0.369533191151981f, 0, 0 }, +[173] = { city_cairo, 2020, MONTH_Aug, 0.087571921991018f, 0, 0 }, +[174] = { city_cairo, 2020, MONTH_Nov, 0.130023762282846f, 0, 0 }, +[175] = { city_cairo, 2020, MONTH_Dec, 0.619080240994548f, 0, 0 }, +[176] = { city_cairo, 2021, MONTH_May, 0.265431673532736f, 0, 0 }, +[177] = { city_cairo, 2021, MONTH_Aug, 0.0838086831407579f, 0, 0 }, +[178] = { city_cairo, 2021, MONTH_Nov, 0.002175360042457663f, 0, 0 }, +[179] = { city_cairo, 2021, MONTH_Dec, 0.342714385178964f, 0, 0 }, +[180] = { city_addis_ababa, 2019, MONTH_Feb, 0.527483000268353f, 0, 0 }, +[181] = { city_addis_ababa, 2019, MONTH_Apr, 0.02860178841412208f, 0, 0 }, +[182] = { city_addis_ababa, 2019, MONTH_Jun, 0.2240604563219019f, 0, 0 }, +[183] = { city_addis_ababa, 2019, MONTH_Oct, 0.157084009337969f, 0, 0 }, +[184] = { city_addis_ababa, 2020, MONTH_Apr, 0.469697598033293f, 0, 0 }, +[185] = { city_addis_ababa, 2020, MONTH_Jul, 0.701891216846054f, 0, 0 }, +[186] = { city_addis_ababa, 2020, MONTH_Sep, 0.670718895080620f, 0, 0 }, +[187] = { city_addis_ababa, 2021, MONTH_Jan, 0.2222353125566932f, 0, 0 }, +[188] = { city_addis_ababa, 2021, MONTH_Mar, 0.739784695704446f, 0, 0 }, +[189] = { city_addis_ababa, 2021, MONTH_May, 0.296333188085118f, 0, 0 }, +[190] = { city_addis_ababa, 2021, MONTH_Oct, 0.2272026794508933f, 0, 0 }, +[191] = { city_addis_ababa, 2021, MONTH_Dec, 0.97410047246957f, 0, 0 }, +[192] = { city_berlin, 2019, MONTH_May, 0.966330648602629f, 0, 0 }, +[193] = { city_berlin, 2019, MONTH_Aug, 0.0176205852695634f, 0, 0 }, +[194] = { city_berlin, 2019, MONTH_Nov, 0.584547668032789f, 0, 0 }, +[195] = { city_berlin, 2019, MONTH_Dec, 0.0526735938814365f, 0, 0 }, +[196] = { city_berlin, 2020, MONTH_Feb, 0.00291208011562660f, 0, 0 }, +[197] = { city_berlin, 2020, MONTH_Apr, 0.46161889811961f, 0, 0 }, +[198] = { city_berlin, 2020, MONTH_Jun, 0.918717731989696f, 0, 0 }, +[199] = { city_berlin, 2020, MONTH_Oct, 0.526922668293464f, 0, 0 }, +[200] = { city_berlin, 2021, MONTH_Feb, 0.407533147535702f, 0, 0 }, +[201] = { city_berlin, 2021, MONTH_Apr, 0.260631254569428f, 0, 0 }, +[202] = { city_berlin, 2021, MONTH_Jun, 0.850691099863162f, 0, 0 }, +[203] = { city_berlin, 2021, MONTH_Oct, 0.447745362619697f, 0, 0 }, +[204] = { city_athens, 2019, MONTH_Apr, 0.475810196278598f, 0, 0 }, +[205] = { city_athens, 2019, MONTH_Jul, 0.727351163708599f, 0, 0 }, +[206] = { city_athens, 2019, MONTH_Sep, 0.1173467409143746f, 0, 0 }, +[207] = { city_athens, 2020, MONTH_Jan, 0.701133914670033f, 0, 0 }, +[208] = { city_athens, 2020, MONTH_May, 0.502187471083579f, 0, 0 }, +[209] = { city_athens, 2020, MONTH_Aug, 0.722469653059002f, 0, 0 }, +[210] = { city_athens, 2020, MONTH_Nov, 0.0705704436871592f, 0, 0 }, +[211] = { city_athens, 2020, MONTH_Dec, 0.412202187265480f, 0, 0 }, +[212] = { city_athens, 2021, MONTH_Apr, 0.789529374678307f, 0, 0 }, +[213] = { city_athens, 2021, MONTH_Jul, 0.4263051767962031f, 0, 0 }, +[214] = { city_athens, 2021, MONTH_Sep, 0.422014815723197f, 0, 0 }, +[215] = { city_athens, 2022, MONTH_Jan, 0.0793089415950993f, 0, 0 }, +[216] = { city_guatemala_city, 2019, MONTH_Feb, 0.560605380854630f, 0, 0 }, +[217] = { city_guatemala_city, 2019, MONTH_Apr, 0.3382526681121018f, 0, 0 }, +[218] = { city_guatemala_city, 2019, MONTH_Jun, 0.395812130966940f, 0, 0 }, +[219] = { city_guatemala_city, 2019, MONTH_Oct, 0.812327694885220f, 0, 0 }, +[220] = { city_guatemala_city, 2020, MONTH_May, 0.654610646195839f, 0, 0 }, +[221] = { city_guatemala_city, 2020, MONTH_Aug, 0.365603885209179f, 0, 0 }, +[222] = { city_guatemala_city, 2020, MONTH_Nov, 0.299155503687062f, 0, 0 }, +[223] = { city_guatemala_city, 2020, MONTH_Dec, 0.184138836513171f, 0, 0 }, +[224] = { city_guatemala_city, 2021, MONTH_Mar, 0.704976319975955f, 0, 0 }, +[225] = { city_guatemala_city, 2021, MONTH_May, 0.0361929491443968f, 0, 0 }, +[226] = { city_guatemala_city, 2021, MONTH_Oct, 0.64197021948932f, 0, 0 }, +[227] = { city_guatemala_city, 2021, MONTH_Dec, 0.729014435225115f, 0, 0 }, +[228] = { city_jakarta, 2019, MONTH_May, 0.4873064888015896f, 0, 0 }, +[229] = { city_jakarta, 2019, MONTH_Aug, 0.1332481199937597f, 0, 0 }, +[230] = { city_jakarta, 2019, MONTH_Nov, 0.745745949826538f, 0, 0 }, +[231] = { city_jakarta, 2019, MONTH_Dec, 0.677061592008742f, 0, 0 }, +[232] = { city_jakarta, 2020, MONTH_Feb, 0.097222170637766f, 0, 0 }, +[233] = { city_jakarta, 2020, MONTH_Apr, 0.454813364724139f, 0, 0 }, +[234] = { city_jakarta, 2020, MONTH_Jun, 0.599030699042925f, 0, 0 }, +[235] = { city_jakarta, 2020, MONTH_Oct, 0.4625443588285278f, 0, 0 }, +[236] = { city_jakarta, 2021, MONTH_Feb, 0.487754108957089f, 0, 0 }, +[237] = { city_jakarta, 2021, MONTH_Apr, 0.317627211073128f, 0, 0 }, +[238] = { city_jakarta, 2021, MONTH_Jun, 0.4601649895962731f, 0, 0 }, +[239] = { city_jakarta, 2021, MONTH_Oct, 0.819518311504193f, 0, 0 }, +[240] = { city_tehran, 2019, MONTH_Apr, 0.301861333672369f, 0, 0 }, +[241] = { city_tehran, 2019, MONTH_Jul, 0.690444209645852f, 0, 0 }, +[242] = { city_tehran, 2019, MONTH_Sep, 0.4404145375380147f, 0, 0 }, +[243] = { city_tehran, 2020, MONTH_Jan, 0.512216673447640f, 0, 0 }, +[244] = { city_tehran, 2020, MONTH_Mar, 0.404877102071919f, 0, 0 }, +[245] = { city_tehran, 2020, MONTH_May, 0.0425131526773253f, 0, 0 }, +[246] = { city_tehran, 2020, MONTH_Oct, 0.2593536969506149f, 0, 0 }, +[247] = { city_tehran, 2020, MONTH_Dec, 0.783890028761998f, 0, 0 }, +[248] = { city_tehran, 2021, MONTH_Mar, 0.94926354604200f, 0, 0 }, +[249] = { city_tehran, 2021, MONTH_May, 0.0569072784620124f, 0, 0 }, +[250] = { city_tehran, 2021, MONTH_Oct, 0.577568094487137f, 0, 0 }, +[251] = { city_tehran, 2021, MONTH_Dec, 0.618906187850862f, 0, 0 }, +[252] = { city_baghdad, 2019, MONTH_Mar, 0.2041098782632676f, 0, 0 }, +[253] = { city_baghdad, 2019, MONTH_May, 0.418410741640879f, 0, 0 }, +[254] = { city_baghdad, 2019, MONTH_Oct, 0.4045113808247624f, 0, 0 }, +[255] = { city_baghdad, 2019, MONTH_Dec, 0.0935036317264107f, 0, 0 }, +[256] = { city_baghdad, 2020, MONTH_May, 0.881388063687282f, 0, 0 }, +[257] = { city_baghdad, 2020, MONTH_Aug, 0.542844838193968f, 0, 0 }, +[258] = { city_baghdad, 2020, MONTH_Nov, 0.919644994222689f, 0, 0 }, +[259] = { city_baghdad, 2020, MONTH_Dec, 0.4012535241874899f, 0, 0 }, +[260] = { city_baghdad, 2021, MONTH_Feb, 0.3336959972932559f, 0, 0 }, +[261] = { city_baghdad, 2021, MONTH_Apr, 0.1796197721242466f, 0, 0 }, +[262] = { city_baghdad, 2021, MONTH_Jun, 0.828742767016648f, 0, 0 }, +[263] = { city_baghdad, 2021, MONTH_Oct, 0.1843548012255065f, 0, 0 }, +[264] = { city_tokyo, 2019, MONTH_May, 0.155891108992637f, 0, 0 }, +[265] = { city_tokyo, 2019, MONTH_Aug, 0.710329744155827f, 0, 0 }, +[266] = { city_tokyo, 2019, MONTH_Nov, 0.767037295899860f, 0, 0 }, +[267] = { city_tokyo, 2019, MONTH_Dec, 0.3455214091470476f, 0, 0 }, +[268] = { city_tokyo, 2020, MONTH_Feb, 0.3474433981102914f, 0, 0 }, +[269] = { city_tokyo, 2020, MONTH_Apr, 0.945631216030701f, 0, 0 }, +[270] = { city_tokyo, 2020, MONTH_Jun, 0.696669631520124f, 0, 0 }, +[271] = { city_tokyo, 2020, MONTH_Oct, 0.722151370281128f, 0, 0 }, +[272] = { city_tokyo, 2021, MONTH_Apr, 0.124744692100837f, 0, 0 }, +[273] = { city_tokyo, 2021, MONTH_Jul, 0.780248733655871f, 0, 0 }, +[274] = { city_tokyo, 2021, MONTH_Sep, 0.802652502830138f, 0, 0 }, +[275] = { city_tokyo, 2022, MONTH_Jan, 0.1950030931830898f, 0, 0 }, +[276] = { city_amman, 2019, MONTH_Apr, 0.913564776301748f, 0, 0 }, +[277] = { city_amman, 2019, MONTH_Jul, 0.51995965182440f, 0, 0 }, +[278] = { city_amman, 2019, MONTH_Sep, 0.0734962371079785f, 0, 0 }, +[279] = { city_amman, 2020, MONTH_Jan, 0.820928052342723f, 0, 0 }, +[280] = { city_amman, 2020, MONTH_Feb, 0.858049473312560f, 0, 0 }, +[281] = { city_amman, 2020, MONTH_Apr, 0.472228820975274f, 0, 0 }, +[282] = { city_amman, 2020, MONTH_Jun, 0.859450329852867f, 0, 0 }, +[283] = { city_amman, 2020, MONTH_Oct, 0.734397157087221f, 0, 0 }, +[284] = { city_amman, 2021, MONTH_Feb, 0.471531691187588f, 0, 0 }, +[285] = { city_amman, 2021, MONTH_Apr, 0.74666411798262f, 0, 0 }, +[286] = { city_amman, 2021, MONTH_Jun, 0.0449755300464772f, 0, 0 }, +[287] = { city_amman, 2021, MONTH_Oct, 0.989728098238887f, 0, 0 }, +[288] = { city_nairobi, 2019, MONTH_May, 0.353258469908758f, 0, 0 }, +[289] = { city_nairobi, 2019, MONTH_Aug, 0.637265803224577f, 0, 0 }, +[290] = { city_nairobi, 2019, MONTH_Nov, 0.652963298166620f, 0, 0 }, +[291] = { city_nairobi, 2019, MONTH_Dec, 0.980136667400578f, 0, 0 }, +[292] = { city_nairobi, 2020, MONTH_May, 0.1123254499523785f, 0, 0 }, +[293] = { city_nairobi, 2020, MONTH_Aug, 0.636340674934326f, 0, 0 }, +[294] = { city_nairobi, 2020, MONTH_Nov, 0.457205051760276f, 0, 0 }, +[295] = { city_nairobi, 2020, MONTH_Dec, 0.501683805374266f, 0, 0 }, +[296] = { city_nairobi, 2021, MONTH_May, 0.287133545101559f, 0, 0 }, +[297] = { city_nairobi, 2021, MONTH_Aug, 0.613486374545206f, 0, 0 }, +[298] = { city_nairobi, 2021, MONTH_Nov, 0.664668792823215f, 0, 0 }, +[299] = { city_nairobi, 2021, MONTH_Dec, 0.460460310851094f, 0, 0 }, +[300] = { city_beirut, 2019, MONTH_May, 0.2065707928015757f, 0, 0 }, +[301] = { city_beirut, 2019, MONTH_Aug, 0.0806051251653264f, 0, 0 }, +[302] = { city_beirut, 2019, MONTH_Nov, 0.312175807704065f, 0, 0 }, +[303] = { city_beirut, 2019, MONTH_Dec, 0.570445032963265f, 0, 0 }, +[304] = { city_beirut, 2020, MONTH_May, 0.4971129813508322f, 0, 0 }, +[305] = { city_beirut, 2020, MONTH_Aug, 0.265179951577338f, 0, 0 }, +[306] = { city_beirut, 2020, MONTH_Nov, 0.3758296973795538f, 0, 0 }, +[307] = { city_beirut, 2020, MONTH_Dec, 0.2321419145383638f, 0, 0 }, +[308] = { city_beirut, 2021, MONTH_Feb, 0.976920552803965f, 0, 0 }, +[309] = { city_beirut, 2021, MONTH_Apr, 0.571447163905541f, 0, 0 }, +[310] = { city_beirut, 2021, MONTH_Jun, 0.786651053940900f, 0, 0 }, +[311] = { city_beirut, 2021, MONTH_Oct, 0.1096868650743059f, 0, 0 }, +[312] = { city_tripoli, 2019, MONTH_Apr, 0.345925686602871f, 0, 0 }, +[313] = { city_tripoli, 2019, MONTH_Jul, 0.876290377343576f, 0, 0 }, +[314] = { city_tripoli, 2019, MONTH_Sep, 0.790275244077456f, 0, 0 }, +[315] = { city_tripoli, 2020, MONTH_Jan, 0.3965589139790378f, 0, 0 }, +[316] = { city_tripoli, 2020, MONTH_Mar, 0.285348770715926f, 0, 0 }, +[317] = { city_tripoli, 2020, MONTH_May, 0.496333626012515f, 0, 0 }, +[318] = { city_tripoli, 2020, MONTH_Oct, 0.01792744471676621f, 0, 0 }, +[319] = { city_tripoli, 2020, MONTH_Dec, 0.4947927621449260f, 0, 0 }, +[320] = { city_tripoli, 2021, MONTH_May, 0.1308448333921825f, 0, 0 }, +[321] = { city_tripoli, 2021, MONTH_Aug, 0.397296712656376f, 0, 0 }, +[322] = { city_tripoli, 2021, MONTH_Nov, 0.4494511222856165f, 0, 0 }, +[323] = { city_tripoli, 2021, MONTH_Dec, 0.918909285370890f, 0, 0 }, +[324] = { city_kuala_lumpur, 2019, MONTH_Feb, 0.1675625833439882f, 0, 0 }, +[325] = { city_kuala_lumpur, 2019, MONTH_Apr, 0.729200169873379f, 0, 0 }, +[326] = { city_kuala_lumpur, 2019, MONTH_Jun, 0.515728121325297f, 0, 0 }, +[327] = { city_kuala_lumpur, 2019, MONTH_Oct, 0.801495874749624f, 0, 0 }, +[328] = { city_kuala_lumpur, 2020, MONTH_May, 0.860285410440025f, 0, 0 }, +[329] = { city_kuala_lumpur, 2020, MONTH_Aug, 0.4333367319964f, 0, 0 }, +[330] = { city_kuala_lumpur, 2020, MONTH_Nov, 0.373641801398257f, 0, 0 }, +[331] = { city_kuala_lumpur, 2020, MONTH_Dec, 0.993321214324000f, 0, 0 }, +[332] = { city_kuala_lumpur, 2021, MONTH_May, 0.955896960620464f, 0, 0 }, +[333] = { city_kuala_lumpur, 2021, MONTH_Aug, 0.847466374787605f, 0, 0 }, +[334] = { city_kuala_lumpur, 2021, MONTH_Nov, 0.725930991736956f, 0, 0 }, +[335] = { city_kuala_lumpur, 2021, MONTH_Dec, 0.0771676585796252f, 0, 0 }, +[336] = { city_male, 2019, MONTH_May, 0.1185919416224812f, 0, 0 }, +[337] = { city_male, 2019, MONTH_Aug, 0.1093303633227156f, 0, 0 }, +[338] = { city_male, 2019, MONTH_Nov, 0.351298531207944f, 0, 0 }, +[339] = { city_male, 2019, MONTH_Dec, 0.939014019805290f, 0, 0 }, +[340] = { city_male, 2020, MONTH_May, 0.905825718197400f, 0, 0 }, +[341] = { city_male, 2020, MONTH_Aug, 0.4774451158431509f, 0, 0 }, +[342] = { city_male, 2020, MONTH_Nov, 0.865861494206516f, 0, 0 }, +[343] = { city_male, 2020, MONTH_Dec, 0.3879887276689698f, 0, 0 }, +[344] = { city_male, 2021, MONTH_Feb, 0.762094702658892f, 0, 0 }, +[345] = { city_male, 2021, MONTH_Apr, 0.930703136536702f, 0, 0 }, +[346] = { city_male, 2021, MONTH_Jun, 0.413267471538170f, 0, 0 }, +[347] = { city_male, 2021, MONTH_Oct, 0.0715077259848261f, 0, 0 }, +[348] = { city_mexico_city, 2019, MONTH_Mar, 0.282689271758157f, 0, 0 }, +[349] = { city_mexico_city, 2019, MONTH_May, 0.692801392386349f, 0, 0 }, +[350] = { city_mexico_city, 2019, MONTH_Oct, 0.856300831164312f, 0, 0 }, +[351] = { city_mexico_city, 2019, MONTH_Dec, 0.62752648352262f, 0, 0 }, +[352] = { city_mexico_city, 2020, MONTH_Apr, 0.992877682455008f, 0, 0 }, +[353] = { city_mexico_city, 2020, MONTH_Jul, 0.3288944801257265f, 0, 0 }, +[354] = { city_mexico_city, 2020, MONTH_Sep, 0.567301662762395f, 0, 0 }, +[355] = { city_mexico_city, 2021, MONTH_Jan, 0.653652403202057f, 0, 0 }, +[356] = { city_mexico_city, 2021, MONTH_Feb, 0.3617368415256383f, 0, 0 }, +[357] = { city_mexico_city, 2021, MONTH_Apr, 0.1999051783032370f, 0, 0 }, +[358] = { city_mexico_city, 2021, MONTH_Jun, 0.2234520522974474f, 0, 0 }, +[359] = { city_mexico_city, 2021, MONTH_Oct, 0.2249265703960294f, 0, 0 }, +[360] = { city_ulan_bator, 2019, MONTH_Feb, 0.0973111569162685f, 0, 0 }, +[361] = { city_ulan_bator, 2019, MONTH_Apr, 0.717625035182259f, 0, 0 }, +[362] = { city_ulan_bator, 2019, MONTH_Jun, 0.68888115436561f, 0, 0 }, +[363] = { city_ulan_bator, 2019, MONTH_Oct, 0.317598068282712f, 0, 0 }, +[364] = { city_ulan_bator, 2020, MONTH_Mar, 0.532042281420785f, 0, 0 }, +[365] = { city_ulan_bator, 2020, MONTH_May, 0.937731820508145f, 0, 0 }, +[366] = { city_ulan_bator, 2020, MONTH_Oct, 0.1507514606104898f, 0, 0 }, +[367] = { city_ulan_bator, 2020, MONTH_Dec, 0.0210516496711773f, 0, 0 }, +[368] = { city_ulan_bator, 2021, MONTH_Feb, 0.695258364407790f, 0, 0 }, +[369] = { city_ulan_bator, 2021, MONTH_Apr, 0.2133368779237394f, 0, 0 }, +[370] = { city_ulan_bator, 2021, MONTH_Jun, 0.4350453296437505f, 0, 0 }, +[371] = { city_ulan_bator, 2021, MONTH_Oct, 0.887232414698376f, 0, 0 }, +[372] = { city_rabat, 2019, MONTH_Apr, 0.4848684557100414f, 0, 0 }, +[373] = { city_rabat, 2019, MONTH_Jul, 0.830378389707985f, 0, 0 }, +[374] = { city_rabat, 2019, MONTH_Sep, 0.267946912678618f, 0, 0 }, +[375] = { city_rabat, 2020, MONTH_Jan, 0.21686208646062f, 0, 0 }, +[376] = { city_rabat, 2020, MONTH_Feb, 0.639484185249096f, 0, 0 }, +[377] = { city_rabat, 2020, MONTH_Apr, 0.795734886425641f, 0, 0 }, +[378] = { city_rabat, 2020, MONTH_Jun, 0.3544991360983855f, 0, 0 }, +[379] = { city_rabat, 2020, MONTH_Oct, 0.88478654358351f, 0, 0 }, +[380] = { city_rabat, 2021, MONTH_Feb, 0.754599832364994f, 0, 0 }, +[381] = { city_rabat, 2021, MONTH_Apr, 0.4417992899161763f, 0, 0 }, +[382] = { city_rabat, 2021, MONTH_Jun, 0.607116720946833f, 0, 0 }, +[383] = { city_rabat, 2021, MONTH_Oct, 0.358623776327881f, 0, 0 }, +[384] = { city_amsterdam, 2019, MONTH_Feb, 0.731625264443053f, 0, 0 }, +[385] = { city_amsterdam, 2019, MONTH_Apr, 0.566868738166083f, 0, 0 }, +[386] = { city_amsterdam, 2019, MONTH_Jun, 0.557667088829960f, 0, 0 }, +[387] = { city_amsterdam, 2019, MONTH_Oct, 0.4165140225359793f, 0, 0 }, +[388] = { city_amsterdam, 2020, MONTH_Mar, 0.1369118545708988f, 0, 0 }, +[389] = { city_amsterdam, 2020, MONTH_May, 0.996381145058562f, 0, 0 }, +[390] = { city_amsterdam, 2020, MONTH_Oct, 0.567884655995259f, 0, 0 }, +[391] = { city_amsterdam, 2020, MONTH_Dec, 0.3599824946665225f, 0, 0 }, +[392] = { city_amsterdam, 2021, MONTH_May, 0.3617612455991281f, 0, 0 }, +[393] = { city_amsterdam, 2021, MONTH_Aug, 0.145208263117762f, 0, 0 }, +[394] = { city_amsterdam, 2021, MONTH_Nov, 0.405925018466976f, 0, 0 }, +[395] = { city_amsterdam, 2021, MONTH_Dec, 0.466865583671862f, 0, 0 }, +[396] = { city_wellington, 2019, MONTH_Mar, 0.2399790368405242f, 0, 0 }, +[397] = { city_wellington, 2019, MONTH_May, 0.0513312639497346f, 0, 0 }, +[398] = { city_wellington, 2019, MONTH_Oct, 0.154820278468702f, 0, 0 }, +[399] = { city_wellington, 2019, MONTH_Dec, 0.342480035947826f, 0, 0 }, +[400] = { city_wellington, 2020, MONTH_Feb, 0.02270196410158653f, 0, 0 }, +[401] = { city_wellington, 2020, MONTH_Apr, 0.549977096428455f, 0, 0 }, +[402] = { city_wellington, 2020, MONTH_Jun, 0.825352479423318f, 0, 0 }, +[403] = { city_wellington, 2020, MONTH_Oct, 0.00533147733597216f, 0, 0 }, +[404] = { city_wellington, 2021, MONTH_May, 0.92165713944193f, 0, 0 }, +[405] = { city_wellington, 2021, MONTH_Aug, 0.1030939587069419f, 0, 0 }, +[406] = { city_wellington, 2021, MONTH_Nov, 0.626356522706967f, 0, 0 }, +[407] = { city_wellington, 2021, MONTH_Dec, 0.202081862772906f, 0, 0 }, +[408] = { city_managua, 2019, MONTH_Apr, 0.0558278728762413f, 0, 0 }, +[409] = { city_managua, 2019, MONTH_Jul, 0.4838275959297315f, 0, 0 }, +[410] = { city_managua, 2019, MONTH_Sep, 0.982787118880607f, 0, 0 }, +[411] = { city_managua, 2020, MONTH_Jan, 0.0001771442144287149f, 0, 0 }, +[412] = { city_managua, 2020, MONTH_Feb, 0.924958034469370f, 0, 0 }, +[413] = { city_managua, 2020, MONTH_Apr, 0.804497555444690f, 0, 0 }, +[414] = { city_managua, 2020, MONTH_Jun, 0.562726395776656f, 0, 0 }, +[415] = { city_managua, 2020, MONTH_Oct, 0.323725027619491f, 0, 0 }, +[416] = { city_managua, 2021, MONTH_Mar, 0.02044880108483926f, 0, 0 }, +[417] = { city_managua, 2021, MONTH_May, 0.890130453740734f, 0, 0 }, +[418] = { city_managua, 2021, MONTH_Oct, 0.731841044395474f, 0, 0 }, +[419] = { city_managua, 2021, MONTH_Dec, 0.884381400825929f, 0, 0 }, +[420] = { city_abuja, 2019, MONTH_May, 0.66478819034649f, 0, 0 }, +[421] = { city_abuja, 2019, MONTH_Aug, 0.3457386667673525f, 0, 0 }, +[422] = { city_abuja, 2019, MONTH_Nov, 0.092988823835393f, 0, 0 }, +[423] = { city_abuja, 2019, MONTH_Dec, 0.824262528959534f, 0, 0 }, +[424] = { city_abuja, 2020, MONTH_Apr, 0.61049766413043f, 0, 0 }, +[425] = { city_abuja, 2020, MONTH_Jul, 0.1304592836307013f, 0, 0 }, +[426] = { city_abuja, 2020, MONTH_Sep, 0.593187180006649f, 0, 0 }, +[427] = { city_abuja, 2021, MONTH_Jan, 0.876199072732621f, 0, 0 }, +[428] = { city_abuja, 2021, MONTH_Mar, 0.0329722159321588f, 0, 0 }, +[429] = { city_abuja, 2021, MONTH_May, 0.266368310626165f, 0, 0 }, +[430] = { city_abuja, 2021, MONTH_Oct, 0.475247255909794f, 0, 0 }, +[431] = { city_abuja, 2021, MONTH_Dec, 0.2181789145549840f, 0, 0 }, +[432] = { city_islamabad, 2019, MONTH_Feb, 0.689456535686944f, 0, 0 }, +[433] = { city_islamabad, 2019, MONTH_Apr, 0.0447373363978489f, 0, 0 }, +[434] = { city_islamabad, 2019, MONTH_Jun, 0.822514095879552f, 0, 0 }, +[435] = { city_islamabad, 2019, MONTH_Oct, 0.916703876449938f, 0, 0 }, +[436] = { city_islamabad, 2020, MONTH_Mar, 0.1893115617875816f, 0, 0 }, +[437] = { city_islamabad, 2020, MONTH_May, 0.86726306770825f, 0, 0 }, +[438] = { city_islamabad, 2020, MONTH_Oct, 0.905215849243983f, 0, 0 }, +[439] = { city_islamabad, 2020, MONTH_Dec, 0.254940376897477f, 0, 0 }, +[440] = { city_islamabad, 2021, MONTH_Mar, 0.281039684229208f, 0, 0 }, +[441] = { city_islamabad, 2021, MONTH_May, 0.887339106739559f, 0, 0 }, +[442] = { city_islamabad, 2021, MONTH_Oct, 0.933048865779014f, 0, 0 }, +[443] = { city_islamabad, 2021, MONTH_Dec, 0.0340736858267484f, 0, 0 }, +[444] = { city_lima, 2019, MONTH_Feb, 0.328346577769536f, 0, 0 }, +[445] = { city_lima, 2019, MONTH_Apr, 0.2756724157263651f, 0, 0 }, +[446] = { city_lima, 2019, MONTH_Jun, 0.609815087863952f, 0, 0 }, +[447] = { city_lima, 2019, MONTH_Oct, 0.782731155908874f, 0, 0 }, +[448] = { city_lima, 2020, MONTH_May, 0.000478011020313862f, 0, 0 }, +[449] = { city_lima, 2020, MONTH_Aug, 0.3235917681085961f, 0, 0 }, +[450] = { city_lima, 2020, MONTH_Nov, 0.792016455238391f, 0, 0 }, +[451] = { city_lima, 2020, MONTH_Dec, 0.0868050405329673f, 0, 0 }, +[452] = { city_lima, 2021, MONTH_Feb, 0.281555206177401f, 0, 0 }, +[453] = { city_lima, 2021, MONTH_Apr, 0.794656766555093f, 0, 0 }, +[454] = { city_lima, 2021, MONTH_Jun, 0.934873911408016f, 0, 0 }, +[455] = { city_lima, 2021, MONTH_Oct, 0.966444893770645f, 0, 0 }, +[456] = { city_bucharest, 2019, MONTH_Apr, 0.275421524025559f, 0, 0 }, +[457] = { city_bucharest, 2019, MONTH_Jul, 0.934257554721354f, 0, 0 }, +[458] = { city_bucharest, 2019, MONTH_Sep, 0.456175571716915f, 0, 0 }, +[459] = { city_bucharest, 2020, MONTH_Jan, 0.581535351702321f, 0, 0 }, +[460] = { city_bucharest, 2020, MONTH_Feb, 0.0955369623031351f, 0, 0 }, +[461] = { city_bucharest, 2020, MONTH_Apr, 0.797724127406068f, 0, 0 }, +[462] = { city_bucharest, 2020, MONTH_Jun, 0.1158114218862972f, 0, 0 }, +[463] = { city_bucharest, 2020, MONTH_Oct, 0.60936646395483f, 0, 0 }, +[464] = { city_bucharest, 2021, MONTH_May, 0.778649374817847f, 0, 0 }, +[465] = { city_bucharest, 2021, MONTH_Aug, 0.370947549484814f, 0, 0 }, +[466] = { city_bucharest, 2021, MONTH_Nov, 0.0640963197950903f, 0, 0 }, +[467] = { city_bucharest, 2021, MONTH_Dec, 0.643541163489257f, 0, 0 }, +[468] = { city_moscow, 2019, MONTH_Mar, 0.301010635427779f, 0, 0 }, +[469] = { city_moscow, 2019, MONTH_May, 0.456078321317001f, 0, 0 }, +[470] = { city_moscow, 2019, MONTH_Oct, 0.0538331203062519f, 0, 0 }, +[471] = { city_moscow, 2019, MONTH_Dec, 0.75192484013845f, 0, 0 }, +[472] = { city_moscow, 2020, MONTH_May, 0.872306088053229f, 0, 0 }, +[473] = { city_moscow, 2020, MONTH_Aug, 0.1239402065770388f, 0, 0 }, +[474] = { city_moscow, 2020, MONTH_Nov, 0.2020263441001254f, 0, 0 }, +[475] = { city_moscow, 2020, MONTH_Dec, 0.278274013412570f, 0, 0 }, +[476] = { city_moscow, 2021, MONTH_May, 0.2488571531010973f, 0, 0 }, +[477] = { city_moscow, 2021, MONTH_Aug, 0.0489617026735895f, 0, 0 }, +[478] = { city_moscow, 2021, MONTH_Nov, 0.868455790657478f, 0, 0 }, +[479] = { city_moscow, 2021, MONTH_Dec, 0.54311463810805f, 0, 0 }, +[480] = { city_belgrade, 2019, MONTH_May, 0.552246653164450f, 0, 0 }, +[481] = { city_belgrade, 2019, MONTH_Aug, 0.608445734269070f, 0, 0 }, +[482] = { city_belgrade, 2019, MONTH_Nov, 0.904417407475315f, 0, 0 }, +[483] = { city_belgrade, 2019, MONTH_Dec, 0.0706690624583042f, 0, 0 }, +[484] = { city_belgrade, 2020, MONTH_May, 0.000863732217009305f, 0, 0 }, +[485] = { city_belgrade, 2020, MONTH_Aug, 0.328824489783167f, 0, 0 }, +[486] = { city_belgrade, 2020, MONTH_Nov, 0.36976843567074f, 0, 0 }, +[487] = { city_belgrade, 2020, MONTH_Dec, 0.961964263330105f, 0, 0 }, +[488] = { city_belgrade, 2021, MONTH_Mar, 0.3057188881540604f, 0, 0 }, +[489] = { city_belgrade, 2021, MONTH_May, 0.449818470067468f, 0, 0 }, +[490] = { city_belgrade, 2021, MONTH_Oct, 0.71154904735186f, 0, 0 }, +[491] = { city_belgrade, 2021, MONTH_Dec, 0.1308593962428957f, 0, 0 }, +[492] = { city_singapore, 2019, MONTH_Feb, 0.193694292780376f, 0, 0 }, +[493] = { city_singapore, 2019, MONTH_Apr, 0.318702929890905f, 0, 0 }, +[494] = { city_singapore, 2019, MONTH_Jun, 0.645215799082995f, 0, 0 }, +[495] = { city_singapore, 2019, MONTH_Oct, 0.591187969918129f, 0, 0 }, +[496] = { city_singapore, 2020, MONTH_May, 0.699396534256987f, 0, 0 }, +[497] = { city_singapore, 2020, MONTH_Aug, 0.2780977621387803f, 0, 0 }, +[498] = { city_singapore, 2020, MONTH_Nov, 0.455489668769613f, 0, 0 }, +[499] = { city_singapore, 2020, MONTH_Dec, 0.724372367679592f, 0, 0 }, +[500] = { city_singapore, 2021, MONTH_Apr, 0.0229979967292621f, 0, 0 }, +[501] = { city_singapore, 2021, MONTH_Jul, 0.0249669479037042f, 0, 0 }, +[502] = { city_singapore, 2021, MONTH_Sep, 0.879108640287500f, 0, 0 }, +[503] = { city_singapore, 2022, MONTH_Jan, 0.612089991020752f, 0, 0 }, +[504] = { city_seoul, 2019, MONTH_May, 0.277150821785431f, 0, 0 }, +[505] = { city_seoul, 2019, MONTH_Aug, 0.3348478329043680f, 0, 0 }, +[506] = { city_seoul, 2019, MONTH_Nov, 0.4503487807607835f, 0, 0 }, +[507] = { city_seoul, 2019, MONTH_Dec, 0.2103442020665882f, 0, 0 }, +[508] = { city_seoul, 2020, MONTH_May, 0.3640140905380354f, 0, 0 }, +[509] = { city_seoul, 2020, MONTH_Aug, 0.706729161499808f, 0, 0 }, +[510] = { city_seoul, 2020, MONTH_Nov, 0.885612236808133f, 0, 0 }, +[511] = { city_seoul, 2020, MONTH_Dec, 0.519775809368071f, 0, 0 }, +[512] = { city_seoul, 2021, MONTH_Apr, 0.732835881732319f, 0, 0 }, +[513] = { city_seoul, 2021, MONTH_Jul, 0.903712712868978f, 0, 0 }, +[514] = { city_seoul, 2021, MONTH_Sep, 0.579911957881779f, 0, 0 }, +[515] = { city_seoul, 2022, MONTH_Jan, 0.523793425841401f, 0, 0 }, +[516] = { city_tunis, 2019, MONTH_Mar, 0.0982735360423472f, 0, 0 }, +[517] = { city_tunis, 2019, MONTH_May, 0.2783517128913841f, 0, 0 }, +[518] = { city_tunis, 2019, MONTH_Oct, 0.0179865221608522f, 0, 0 }, +[519] = { city_tunis, 2019, MONTH_Dec, 0.594911360748928f, 0, 0 }, +[520] = { city_tunis, 2020, MONTH_Mar, 0.4492429946395797f, 0, 0 }, +[521] = { city_tunis, 2020, MONTH_May, 0.285860802759041f, 0, 0 }, +[522] = { city_tunis, 2020, MONTH_Oct, 0.532021890496857f, 0, 0 }, +[523] = { city_tunis, 2020, MONTH_Dec, 0.664899909160940f, 0, 0 }, +[524] = { city_tunis, 2021, MONTH_Apr, 0.373665071634036f, 0, 0 }, +[525] = { city_tunis, 2021, MONTH_Jul, 0.965776337366f, 0, 0 }, +[526] = { city_tunis, 2021, MONTH_Sep, 0.659560620156704f, 0, 0 }, +[527] = { city_tunis, 2022, MONTH_Jan, 0.624321203896919f, 0, 0 }, +[528] = { city_bangkok, 2019, MONTH_Feb, 0.257845660876937f, 0, 0 }, +[529] = { city_bangkok, 2019, MONTH_Apr, 0.224888541670249f, 0, 0 }, +[530] = { city_bangkok, 2019, MONTH_Jun, 0.619847391242953f, 0, 0 }, +[531] = { city_bangkok, 2019, MONTH_Oct, 0.850551515098475f, 0, 0 }, +[532] = { city_bangkok, 2020, MONTH_Feb, 0.911861784979914f, 0, 0 }, +[533] = { city_bangkok, 2020, MONTH_Apr, 0.854345367132697f, 0, 0 }, +[534] = { city_bangkok, 2020, MONTH_Jun, 0.976580885030065f, 0, 0 }, +[535] = { city_bangkok, 2020, MONTH_Oct, 0.515880023341469f, 0, 0 }, +[536] = { city_bangkok, 2021, MONTH_Apr, 0.05074702972151967f, 0, 0 }, +[537] = { city_bangkok, 2021, MONTH_Jul, 0.4253267917878572f, 0, 0 }, +[538] = { city_bangkok, 2021, MONTH_Sep, 0.915287731012829f, 0, 0 }, +[539] = { city_bangkok, 2022, MONTH_Jan, 0.258306431399695f, 0, 0 }, +[540] = { city_washington_dc, 2019, MONTH_May, 0.643359616915746f, 0, 0 }, +[541] = { city_washington_dc, 2019, MONTH_Aug, 0.370206005261732f, 0, 0 }, +[542] = { city_washington_dc, 2019, MONTH_Nov, 0.0623440040458129f, 0, 0 }, +[543] = { city_washington_dc, 2019, MONTH_Dec, 0.816457481734427f, 0, 0 }, +[544] = { city_washington_dc, 2020, MONTH_May, 0.538708625763008f, 0, 0 }, +[545] = { city_washington_dc, 2020, MONTH_Aug, 0.650384533924187f, 0, 0 }, +[546] = { city_washington_dc, 2020, MONTH_Nov, 0.116951545075829f, 0, 0 }, +[547] = { city_washington_dc, 2020, MONTH_Dec, 0.148219641272978f, 0, 0 }, +[548] = { city_washington_dc, 2021, MONTH_Apr, 0.02100655560513664f, 0, 0 }, +[549] = { city_washington_dc, 2021, MONTH_Jul, 0.871980590290593f, 0, 0 }, +[550] = { city_washington_dc, 2021, MONTH_Sep, 0.282318232339043f, 0, 0 }, +[551] = { city_washington_dc, 2022, MONTH_Jan, 0.805829276934675f, 0, 0 }, +[552] = { city_hanoi, 2019, MONTH_May, 0.41659113260472f, 0, 0 }, +[553] = { city_hanoi, 2019, MONTH_Aug, 0.1152641995827389f, 0, 0 }, +[554] = { city_hanoi, 2019, MONTH_Nov, 0.360035965294691f, 0, 0 }, +[555] = { city_hanoi, 2019, MONTH_Dec, 0.784196077332438f, 0, 0 }, +[556] = { city_hanoi, 2020, MONTH_May, 0.761414062564656f, 0, 0 }, +[557] = { city_hanoi, 2020, MONTH_Aug, 0.972249586627066f, 0, 0 }, +[558] = { city_hanoi, 2020, MONTH_Nov, 0.477242926987743f, 0, 0 }, +[559] = { city_hanoi, 2020, MONTH_Dec, 0.548426649668160f, 0, 0 }, +[560] = { city_hanoi, 2021, MONTH_May, 0.548248192976479f, 0, 0 }, +[561] = { city_hanoi, 2021, MONTH_Aug, 0.591016543120125f, 0, 0 }, +[562] = { city_hanoi, 2021, MONTH_Nov, 0.788317457936361f, 0, 0 }, +[563] = { city_hanoi, 2021, MONTH_Dec, 0.800132571339982f, 0, 0 }, +[564] = { city_harare, 2019, MONTH_Mar, 0.729786759502753f, 0, 0 }, +[565] = { city_harare, 2019, MONTH_May, 0.907286585478762f, 0, 0 }, +[566] = { city_harare, 2019, MONTH_Oct, 0.750261430981712f, 0, 0 }, +[567] = { city_harare, 2019, MONTH_Dec, 0.493438071814215f, 0, 0 }, +[568] = { city_harare, 2020, MONTH_Feb, 0.65132695252707f, 0, 0 }, +[569] = { city_harare, 2020, MONTH_Apr, 0.674409513858446f, 0, 0 }, +[570] = { city_harare, 2020, MONTH_Jun, 0.613534154048466f, 0, 0 }, +[571] = { city_harare, 2020, MONTH_Oct, 0.332698486042969f, 0, 0 }, +[572] = { city_harare, 2021, MONTH_Apr, 0.326843377521804f, 0, 0 }, +[573] = { city_harare, 2021, MONTH_Jul, 0.95259836088787f, 0, 0 }, +[574] = { city_harare, 2021, MONTH_Sep, 0.634598307047354f, 0, 0 }, +[575] = { city_harare, 2022, MONTH_Jan, 0.970130180099394f, 0, 0 }, +[576] = { city_ankara, 2019, MONTH_Feb, 0.1067739057302146f, 0, 0 }, +[577] = { city_ankara, 2019, MONTH_Apr, 0.636578294822275f, 0, 0 }, +[578] = { city_ankara, 2019, MONTH_Jun, 0.1065001987771908f, 0, 0 }, +[579] = { city_ankara, 2019, MONTH_Oct, 0.395046230673565f, 0, 0 }, +[580] = { city_ankara, 2020, MONTH_May, 0.516626872063971f, 0, 0 }, +[581] = { city_ankara, 2020, MONTH_Aug, 0.707711604441861f, 0, 0 }, +[582] = { city_ankara, 2020, MONTH_Nov, 0.492978525577345f, 0, 0 }, +[583] = { city_ankara, 2020, MONTH_Dec, 0.417615483179953f, 0, 0 }, +[584] = { city_ankara, 2021, MONTH_Mar, 0.3916401752130632f, 0, 0 }, +[585] = { city_ankara, 2021, MONTH_May, 0.642573767822410f, 0, 0 }, +[586] = { city_ankara, 2021, MONTH_Oct, 0.2332685344442790f, 0, 0 }, +[587] = { city_ankara, 2021, MONTH_Dec, 0.348302140835808f, 0, 0 }, +}; +global u32 test_data_len = sizeof(test_data) / sizeof(test_data[0]); \ No newline at end of file diff --git a/run_tree/data/incenter_test_data_clean.csv b/run_tree/data/incenter_test_data_clean.csv new file mode 100644 index 0000000..5a6f382 --- /dev/null +++ b/run_tree/data/incenter_test_data_clean.csv @@ -0,0 +1,588 @@ +0,city_kiev,2019,MONTH_Mar,0.8208904644894152 +1,city_kiev,2019,MONTH_May,0.560734073251748 +2,city_kiev,2019,MONTH_Oct,0.6374267513460055 +3,city_kiev,2019,MONTH_Dec,0.808628906405562 +4,city_kiev,2020,MONTH_Apr,0.5930763917923403 +5,city_kiev,2020,MONTH_Jul,0.8580149759139355 +6,city_kiev,2020,MONTH_Sep,0.1797655715379879 +7,city_kiev,2021,MONTH_Jan,0.2632534693864327 +8,city_kiev,2021,MONTH_Mar,0.8414969999187483 +9,city_kiev,2021,MONTH_May,0.5374924169034345 +10,city_kiev,2021,MONTH_Oct,0.4069815620754663 +11,city_kiev,2021,MONTH_Dec,0.767921059845557 +12,city_buenos_aires,2019,MONTH_Mar,0.8774591161262479 +13,city_buenos_aires,2019,MONTH_May,0.20624465389973745 +14,city_buenos_aires,2019,MONTH_Oct,0.9847976477350923 +15,city_buenos_aires,2019,MONTH_Dec,0.06729540587017169 +16,city_buenos_aires,2020,MONTH_Apr,0.8985765810829179 +17,city_buenos_aires,2020,MONTH_Jul,0.8147416450345571 +18,city_buenos_aires,2020,MONTH_Sep,0.39419316092894296 +19,city_buenos_aires,2021,MONTH_Jan,0.2844815741140395 +20,city_buenos_aires,2021,MONTH_Mar,0.9929587462564623 +21,city_buenos_aires,2021,MONTH_May,0.1550649172505355 +22,city_buenos_aires,2021,MONTH_Oct,0.6522096246196023 +23,city_buenos_aires,2021,MONTH_Dec,0.7408605917514841 +24,city_canberra,2019,MONTH_May,0.13386899374995143 +25,city_canberra,2019,MONTH_Aug,0.01251845204640567 +26,city_canberra,2019,MONTH_Nov,0.31069477884938224 +27,city_canberra,2019,MONTH_Dec,0.6144432795767782 +28,city_canberra,2020,MONTH_Apr,0.38215052324569254 +29,city_canberra,2020,MONTH_Jul,0.49258667615249774 +30,city_canberra,2020,MONTH_Sep,0.014024575946441353 +31,city_canberra,2021,MONTH_Jan,0.6302469024538054 +32,city_canberra,2021,MONTH_Mar,0.6657411558237325 +33,city_canberra,2021,MONTH_May,0.6375153743649629 +34,city_canberra,2021,MONTH_Oct,0.4355080346524989 +35,city_canberra,2021,MONTH_Dec,0.7842671017087504 +36,city_yerevan,2019,MONTH_Feb,0.2224804342202128 +37,city_yerevan,2019,MONTH_Apr,0.40295435638966803 +38,city_yerevan,2019,MONTH_Jun,0.00841304129117737 +39,city_yerevan,2019,MONTH_Oct,0.49353338935245084 +40,city_yerevan,2020,MONTH_Mar,0.7956088092430287 +41,city_yerevan,2020,MONTH_May,0.8718522813330138 +42,city_yerevan,2020,MONTH_Oct,0.7578502696544491 +43,city_yerevan,2020,MONTH_Dec,0.3059739437150092 +44,city_yerevan,2021,MONTH_Mar,0.5751057083330098 +45,city_yerevan,2021,MONTH_May,0.32415650181804556 +46,city_yerevan,2021,MONTH_Oct,0.13919376564116737 +47,city_yerevan,2021,MONTH_Dec,0.4082901290089086 +48,city_bishkek,2019,MONTH_Feb,0.8545389644898143 +49,city_bishkek,2019,MONTH_Apr,0.8679714734156914 +50,city_bishkek,2019,MONTH_Jun,0.9793901564982332 +51,city_bishkek,2019,MONTH_Oct,0.8289790309876645 +52,city_bishkek,2020,MONTH_Apr,0.1458951287005129 +53,city_bishkek,2020,MONTH_Jul,0.8034467113679751 +54,city_bishkek,2020,MONTH_Sep,0.34789595434452725 +55,city_bishkek,2021,MONTH_Jan,0.07184230396111713 +56,city_bishkek,2021,MONTH_Mar,0.7836073496687682 +57,city_bishkek,2021,MONTH_May,0.7217500839378747 +58,city_bishkek,2021,MONTH_Oct,0.28313109637712275 +59,city_bishkek,2021,MONTH_Dec,0.1071367737747645 +60,city_dhaka,2019,MONTH_Mar,0.6964870450822525 +61,city_dhaka,2019,MONTH_May,0.9268741946156642 +62,city_dhaka,2019,MONTH_Oct,0.0657847048182576 +63,city_dhaka,2019,MONTH_Dec,0.2679787325156153 +64,city_dhaka,2020,MONTH_Feb,0.7415948996627278 +65,city_dhaka,2020,MONTH_Apr,0.8887928797784511 +66,city_dhaka,2020,MONTH_Jun,0.9526160257787081 +67,city_dhaka,2020,MONTH_Oct,0.5394245399621023 +68,city_dhaka,2021,MONTH_Feb,0.7832918710573495 +69,city_dhaka,2021,MONTH_Apr,0.16703003479420253 +70,city_dhaka,2021,MONTH_Jun,0.9160800358967391 +71,city_dhaka,2021,MONTH_Oct,0.045576519669261906 +72,city_sucre,2019,MONTH_Feb,0.9057953843385798 +73,city_sucre,2019,MONTH_Apr,0.048949252273037924 +74,city_sucre,2019,MONTH_Jun,0.39748267526958336 +75,city_sucre,2019,MONTH_Oct,0.32402533613913065 +76,city_sucre,2020,MONTH_Feb,0.2555061186834925 +77,city_sucre,2020,MONTH_Apr,0.6834698453947482 +78,city_sucre,2020,MONTH_Jun,0.08607874887258926 +79,city_sucre,2020,MONTH_Oct,0.4802000825511048 +80,city_sucre,2021,MONTH_Apr,0.9333881101247026 +81,city_sucre,2021,MONTH_Jul,0.8260557264582842 +82,city_sucre,2021,MONTH_Sep,0.6558618586863463 +83,city_sucre,2022,MONTH_Jan,0.9951355772306388 +84,city_brasilia,2019,MONTH_Apr,0.9343497529635403 +85,city_brasilia,2019,MONTH_Jul,0.5570852230328219 +86,city_brasilia,2019,MONTH_Sep,0.2242530147430456 +87,city_brasilia,2020,MONTH_Jan,0.37927683595779194 +88,city_brasilia,2020,MONTH_Feb,0.1345707686817872 +89,city_brasilia,2020,MONTH_Apr,0.29826624893861653 +90,city_brasilia,2020,MONTH_Jun,0.8471161140155271 +91,city_brasilia,2020,MONTH_Oct,0.7106683451334669 +92,city_brasilia,2021,MONTH_Apr,0.8821305385207572 +93,city_brasilia,2021,MONTH_Jul,0.6341264853965499 +94,city_brasilia,2021,MONTH_Sep,0.8793042884983516 +95,city_brasilia,2022,MONTH_Jan,0.3678368890456808 +96,city_ottawa,2019,MONTH_Feb,0.46446610262374566 +97,city_ottawa,2019,MONTH_Apr,0.270441763178759 +98,city_ottawa,2019,MONTH_Jun,0.785020644703367 +99,city_ottawa,2019,MONTH_Oct,0.4397878896865377 +100,city_ottawa,2020,MONTH_Mar,0.6250700533476734 +101,city_ottawa,2020,MONTH_May,0.8543918093977015 +102,city_ottawa,2020,MONTH_Oct,0.10924765266094849 +103,city_ottawa,2020,MONTH_Dec,0.06989308957770357 +104,city_ottawa,2021,MONTH_May,0.02192228695177112 +105,city_ottawa,2021,MONTH_Aug,0.31180470130290383 +106,city_ottawa,2021,MONTH_Nov,0.8009641310226249 +107,city_ottawa,2021,MONTH_Dec,0.8939282034537013 +108,city_santiago,2019,MONTH_Feb,0.2604066622789484 +109,city_santiago,2019,MONTH_Apr,0.04408219650514589 +110,city_santiago,2019,MONTH_Jun,0.033700853867721814 +111,city_santiago,2019,MONTH_Oct,0.07020014506385863 +112,city_santiago,2020,MONTH_Mar,0.669167062800284 +113,city_santiago,2020,MONTH_May,0.3946672417327506 +114,city_santiago,2020,MONTH_Oct,0.96961707780403 +115,city_santiago,2020,MONTH_Dec,0.6926699539539745 +116,city_santiago,2021,MONTH_Feb,0.8855788170714998 +117,city_santiago,2021,MONTH_Apr,0.022485852743379775 +118,city_santiago,2021,MONTH_Jun,0.016611682837006425 +119,city_santiago,2021,MONTH_Oct,0.7388064669432675 +120,city_beijing,2019,MONTH_Mar,0.3984649808928382 +121,city_beijing,2019,MONTH_May,0.5516481646386852 +122,city_beijing,2019,MONTH_Oct,0.0212362107359646 +123,city_beijing,2019,MONTH_Dec,0.23392793545990853 +124,city_beijing,2020,MONTH_Mar,0.8976580542276967 +125,city_beijing,2020,MONTH_May,0.5125178728872494 +126,city_beijing,2020,MONTH_Oct,0.09885903925252493 +127,city_beijing,2020,MONTH_Dec,0.996158072334728 +128,city_beijing,2021,MONTH_May,0.3910244510687829 +129,city_beijing,2021,MONTH_Aug,0.5919057621735655 +130,city_beijing,2021,MONTH_Nov,0.22830963063642795 +131,city_beijing,2021,MONTH_Dec,0.8218119255978358 +132,city_bogota,2019,MONTH_Feb,0.040559618555634946 +133,city_bogota,2019,MONTH_Apr,0.6697544946555136 +134,city_bogota,2019,MONTH_Jun,0.7012648347686247 +135,city_bogota,2019,MONTH_Oct,0.9266430067995907 +136,city_bogota,2020,MONTH_May,0.9265350964858453 +137,city_bogota,2020,MONTH_Aug,0.5622719648324987 +138,city_bogota,2020,MONTH_Nov,0.18505076213184524 +139,city_bogota,2020,MONTH_Dec,0.13200979435040983 +140,city_bogota,2021,MONTH_Apr,0.25492724368701236 +141,city_bogota,2021,MONTH_Jul,0.6551881370411056 +142,city_bogota,2021,MONTH_Sep,0.3301507156757937 +143,city_bogota,2022,MONTH_Jan,0.9319825381469947 +144,city_nicosia,2019,MONTH_Feb,0.8112536780481092 +145,city_nicosia,2019,MONTH_Apr,0.7122242228197432 +146,city_nicosia,2019,MONTH_Jun,0.3992731724465637 +147,city_nicosia,2019,MONTH_Oct,0.0560925034296097 +148,city_nicosia,2020,MONTH_Mar,0.605635873827316 +149,city_nicosia,2020,MONTH_May,0.8155285147048078 +150,city_nicosia,2020,MONTH_Oct,0.7283140343929381 +151,city_nicosia,2020,MONTH_Dec,0.1593773388870281 +152,city_nicosia,2021,MONTH_May,0.5330985723420278 +153,city_nicosia,2021,MONTH_Aug,0.46643412774693715 +154,city_nicosia,2021,MONTH_Nov,0.7302379618035622 +155,city_nicosia,2021,MONTH_Dec,0.5971774259867612 +156,city_quito,2019,MONTH_May,0.39005009418535863 +157,city_quito,2019,MONTH_Aug,0.9025102526506403 +158,city_quito,2019,MONTH_Nov,0.507479232033487 +159,city_quito,2019,MONTH_Dec,0.5046753623312223 +160,city_quito,2020,MONTH_Mar,0.8932394343266225 +161,city_quito,2020,MONTH_May,0.19722367870643642 +162,city_quito,2020,MONTH_Oct,0.4616243916670646 +163,city_quito,2020,MONTH_Dec,0.22929952610965976 +164,city_quito,2021,MONTH_Apr,0.675839552639689 +165,city_quito,2021,MONTH_Jul,0.7522737622328722 +166,city_quito,2021,MONTH_Sep,0.7547694762384426 +167,city_quito,2022,MONTH_Jan,0.5224768718138563 +168,city_cairo,2019,MONTH_Apr,0.12251978169018596 +169,city_cairo,2019,MONTH_Jul,0.640214441842041 +170,city_cairo,2019,MONTH_Sep,0.11292283290324012 +171,city_cairo,2020,MONTH_Jan,0.443793309914693 +172,city_cairo,2020,MONTH_May,0.3695331911519818 +173,city_cairo,2020,MONTH_Aug,0.0875719219910186 +174,city_cairo,2020,MONTH_Nov,0.1300237622828465 +175,city_cairo,2020,MONTH_Dec,0.6190802409945482 +176,city_cairo,2021,MONTH_May,0.2654316735327361 +177,city_cairo,2021,MONTH_Aug,0.08380868314075796 +178,city_cairo,2021,MONTH_Nov,0.0021753600424576636 +179,city_cairo,2021,MONTH_Dec,0.3427143851789648 +180,city_addis_ababa,2019,MONTH_Feb,0.5274830002683538 +181,city_addis_ababa,2019,MONTH_Apr,0.028601788414122087 +182,city_addis_ababa,2019,MONTH_Jun,0.22406045632190197 +183,city_addis_ababa,2019,MONTH_Oct,0.1570840093379693 +184,city_addis_ababa,2020,MONTH_Apr,0.4696975980332939 +185,city_addis_ababa,2020,MONTH_Jul,0.7018912168460542 +186,city_addis_ababa,2020,MONTH_Sep,0.6707188950806201 +187,city_addis_ababa,2021,MONTH_Jan,0.22223531255669327 +188,city_addis_ababa,2021,MONTH_Mar,0.7397846957044468 +189,city_addis_ababa,2021,MONTH_May,0.2963331880851181 +190,city_addis_ababa,2021,MONTH_Oct,0.22720267945089334 +191,city_addis_ababa,2021,MONTH_Dec,0.974100472469575 +192,city_berlin,2019,MONTH_May,0.9663306486026292 +193,city_berlin,2019,MONTH_Aug,0.01762058526956345 +194,city_berlin,2019,MONTH_Nov,0.5845476680327896 +195,city_berlin,2019,MONTH_Dec,0.05267359388143655 +196,city_berlin,2020,MONTH_Feb,0.002912080115626603 +197,city_berlin,2020,MONTH_Apr,0.461618898119614 +198,city_berlin,2020,MONTH_Jun,0.9187177319896965 +199,city_berlin,2020,MONTH_Oct,0.5269226682934646 +200,city_berlin,2021,MONTH_Feb,0.4075331475357029 +201,city_berlin,2021,MONTH_Apr,0.2606312545694286 +202,city_berlin,2021,MONTH_Jun,0.8506910998631624 +203,city_berlin,2021,MONTH_Oct,0.4477453626196978 +204,city_athens,2019,MONTH_Apr,0.4758101962785981 +205,city_athens,2019,MONTH_Jul,0.7273511637085998 +206,city_athens,2019,MONTH_Sep,0.11734674091437469 +207,city_athens,2020,MONTH_Jan,0.7011339146700339 +208,city_athens,2020,MONTH_May,0.5021874710835791 +209,city_athens,2020,MONTH_Aug,0.7224696530590028 +210,city_athens,2020,MONTH_Nov,0.07057044368715926 +211,city_athens,2020,MONTH_Dec,0.4122021872654802 +212,city_athens,2021,MONTH_Apr,0.7895293746783079 +213,city_athens,2021,MONTH_Jul,0.42630517679620317 +214,city_athens,2021,MONTH_Sep,0.4220148157231979 +215,city_athens,2022,MONTH_Jan,0.07930894159509938 +216,city_guatemala_city,2019,MONTH_Feb,0.5606053808546305 +217,city_guatemala_city,2019,MONTH_Apr,0.33825266811210186 +218,city_guatemala_city,2019,MONTH_Jun,0.3958121309669401 +219,city_guatemala_city,2019,MONTH_Oct,0.8123276948852205 +220,city_guatemala_city,2020,MONTH_May,0.6546106461958394 +221,city_guatemala_city,2020,MONTH_Aug,0.3656038852091794 +222,city_guatemala_city,2020,MONTH_Nov,0.2991555036870628 +223,city_guatemala_city,2020,MONTH_Dec,0.1841388365131713 +224,city_guatemala_city,2021,MONTH_Mar,0.7049763199759551 +225,city_guatemala_city,2021,MONTH_May,0.03619294914439686 +226,city_guatemala_city,2021,MONTH_Oct,0.641970219489322 +227,city_guatemala_city,2021,MONTH_Dec,0.7290144352251158 +228,city_jakarta,2019,MONTH_May,0.48730648880158967 +229,city_jakarta,2019,MONTH_Aug,0.13324811999375974 +230,city_jakarta,2019,MONTH_Nov,0.7457459498265384 +231,city_jakarta,2019,MONTH_Dec,0.6770615920087426 +232,city_jakarta,2020,MONTH_Feb,0.0972221706377665 +233,city_jakarta,2020,MONTH_Apr,0.4548133647241398 +234,city_jakarta,2020,MONTH_Jun,0.5990306990429254 +235,city_jakarta,2020,MONTH_Oct,0.46254435882852785 +236,city_jakarta,2021,MONTH_Feb,0.4877541089570895 +237,city_jakarta,2021,MONTH_Apr,0.3176272110731281 +238,city_jakarta,2021,MONTH_Jun,0.46016498959627317 +239,city_jakarta,2021,MONTH_Oct,0.8195183115041934 +240,city_tehran,2019,MONTH_Apr,0.3018613336723692 +241,city_tehran,2019,MONTH_Jul,0.6904442096458521 +242,city_tehran,2019,MONTH_Sep,0.44041453753801474 +243,city_tehran,2020,MONTH_Jan,0.5122166734476404 +244,city_tehran,2020,MONTH_Mar,0.4048771020719195 +245,city_tehran,2020,MONTH_May,0.04251315267732536 +246,city_tehran,2020,MONTH_Oct,0.25935369695061494 +247,city_tehran,2020,MONTH_Dec,0.7838900287619984 +248,city_tehran,2021,MONTH_Mar,0.949263546042006 +249,city_tehran,2021,MONTH_May,0.05690727846201249 +250,city_tehran,2021,MONTH_Oct,0.5775680944871373 +251,city_tehran,2021,MONTH_Dec,0.6189061878508625 +252,city_baghdad,2019,MONTH_Mar,0.20410987826326765 +253,city_baghdad,2019,MONTH_May,0.4184107416408793 +254,city_baghdad,2019,MONTH_Oct,0.40451138082476246 +255,city_baghdad,2019,MONTH_Dec,0.09350363172641074 +256,city_baghdad,2020,MONTH_May,0.8813880636872825 +257,city_baghdad,2020,MONTH_Aug,0.5428448381939682 +258,city_baghdad,2020,MONTH_Nov,0.9196449942226893 +259,city_baghdad,2020,MONTH_Dec,0.40125352418748994 +260,city_baghdad,2021,MONTH_Feb,0.33369599729325594 +261,city_baghdad,2021,MONTH_Apr,0.17961977212424662 +262,city_baghdad,2021,MONTH_Jun,0.8287427670166482 +263,city_baghdad,2021,MONTH_Oct,0.18435480122550651 +264,city_tokyo,2019,MONTH_May,0.1558911089926377 +265,city_tokyo,2019,MONTH_Aug,0.7103297441558276 +266,city_tokyo,2019,MONTH_Nov,0.7670372958998607 +267,city_tokyo,2019,MONTH_Dec,0.34552140914704765 +268,city_tokyo,2020,MONTH_Feb,0.34744339811029146 +269,city_tokyo,2020,MONTH_Apr,0.9456312160307011 +270,city_tokyo,2020,MONTH_Jun,0.6966696315201248 +271,city_tokyo,2020,MONTH_Oct,0.7221513702811281 +272,city_tokyo,2021,MONTH_Apr,0.1247446921008375 +273,city_tokyo,2021,MONTH_Jul,0.7802487336558712 +274,city_tokyo,2021,MONTH_Sep,0.8026525028301382 +275,city_tokyo,2022,MONTH_Jan,0.19500309318308984 +276,city_amman,2019,MONTH_Apr,0.9135647763017481 +277,city_amman,2019,MONTH_Jul,0.519959651824404 +278,city_amman,2019,MONTH_Sep,0.07349623710797859 +279,city_amman,2020,MONTH_Jan,0.8209280523427239 +280,city_amman,2020,MONTH_Feb,0.8580494733125601 +281,city_amman,2020,MONTH_Apr,0.4722288209752745 +282,city_amman,2020,MONTH_Jun,0.8594503298528673 +283,city_amman,2020,MONTH_Oct,0.7343971570872213 +284,city_amman,2021,MONTH_Feb,0.4715316911875882 +285,city_amman,2021,MONTH_Apr,0.746664117982623 +286,city_amman,2021,MONTH_Jun,0.04497553004647725 +287,city_amman,2021,MONTH_Oct,0.9897280982388877 +288,city_nairobi,2019,MONTH_May,0.3532584699087581 +289,city_nairobi,2019,MONTH_Aug,0.6372658032245778 +290,city_nairobi,2019,MONTH_Nov,0.6529632981666209 +291,city_nairobi,2019,MONTH_Dec,0.9801366674005787 +292,city_nairobi,2020,MONTH_May,0.11232544995237859 +293,city_nairobi,2020,MONTH_Aug,0.6363406749343267 +294,city_nairobi,2020,MONTH_Nov,0.4572050517602766 +295,city_nairobi,2020,MONTH_Dec,0.5016838053742663 +296,city_nairobi,2021,MONTH_May,0.2871335451015594 +297,city_nairobi,2021,MONTH_Aug,0.6134863745452062 +298,city_nairobi,2021,MONTH_Nov,0.6646687928232157 +299,city_nairobi,2021,MONTH_Dec,0.4604603108510942 +300,city_beirut,2019,MONTH_May,0.20657079280157575 +301,city_beirut,2019,MONTH_Aug,0.08060512516532647 +302,city_beirut,2019,MONTH_Nov,0.3121758077040654 +303,city_beirut,2019,MONTH_Dec,0.5704450329632651 +304,city_beirut,2020,MONTH_May,0.49711298135083226 +305,city_beirut,2020,MONTH_Aug,0.2651799515773383 +306,city_beirut,2020,MONTH_Nov,0.37582969737955385 +307,city_beirut,2020,MONTH_Dec,0.23214191453836386 +308,city_beirut,2021,MONTH_Feb,0.9769205528039658 +309,city_beirut,2021,MONTH_Apr,0.5714471639055412 +310,city_beirut,2021,MONTH_Jun,0.7866510539409003 +311,city_beirut,2021,MONTH_Oct,0.10968686507430592 +312,city_tripoli,2019,MONTH_Apr,0.3459256866028718 +313,city_tripoli,2019,MONTH_Jul,0.8762903773435768 +314,city_tripoli,2019,MONTH_Sep,0.7902752440774569 +315,city_tripoli,2020,MONTH_Jan,0.39655891397903786 +316,city_tripoli,2020,MONTH_Mar,0.2853487707159261 +317,city_tripoli,2020,MONTH_May,0.4963336260125154 +318,city_tripoli,2020,MONTH_Oct,0.017927444716766217 +319,city_tripoli,2020,MONTH_Dec,0.49479276214492607 +320,city_tripoli,2021,MONTH_May,0.13084483339218256 +321,city_tripoli,2021,MONTH_Aug,0.3972967126563762 +322,city_tripoli,2021,MONTH_Nov,0.44945112228561657 +323,city_tripoli,2021,MONTH_Dec,0.9189092853708906 +324,city_kuala_lumpur,2019,MONTH_Feb,0.16756258334398821 +325,city_kuala_lumpur,2019,MONTH_Apr,0.7292001698733792 +326,city_kuala_lumpur,2019,MONTH_Jun,0.5157281213252976 +327,city_kuala_lumpur,2019,MONTH_Oct,0.8014958747496247 +328,city_kuala_lumpur,2020,MONTH_May,0.8602854104400254 +329,city_kuala_lumpur,2020,MONTH_Aug,0.43333673199642 +330,city_kuala_lumpur,2020,MONTH_Nov,0.3736418013982573 +331,city_kuala_lumpur,2020,MONTH_Dec,0.9933212143240009 +332,city_kuala_lumpur,2021,MONTH_May,0.9558969606204645 +333,city_kuala_lumpur,2021,MONTH_Aug,0.8474663747876059 +334,city_kuala_lumpur,2021,MONTH_Nov,0.7259309917369569 +335,city_kuala_lumpur,2021,MONTH_Dec,0.07716765857962526 +336,city_male,2019,MONTH_May,0.11859194162248121 +337,city_male,2019,MONTH_Aug,0.10933036332271562 +338,city_male,2019,MONTH_Nov,0.3512985312079444 +339,city_male,2019,MONTH_Dec,0.9390140198052906 +340,city_male,2020,MONTH_May,0.9058257181974001 +341,city_male,2020,MONTH_Aug,0.47744511584315097 +342,city_male,2020,MONTH_Nov,0.8658614942065163 +343,city_male,2020,MONTH_Dec,0.38798872766896986 +344,city_male,2021,MONTH_Feb,0.7620947026588929 +345,city_male,2021,MONTH_Apr,0.9307031365367027 +346,city_male,2021,MONTH_Jun,0.4132674715381708 +347,city_male,2021,MONTH_Oct,0.07150772598482613 +348,city_mexico_city,2019,MONTH_Mar,0.2826892717581577 +349,city_mexico_city,2019,MONTH_May,0.6928013923863494 +350,city_mexico_city,2019,MONTH_Oct,0.8563008311643129 +351,city_mexico_city,2019,MONTH_Dec,0.627526483522628 +352,city_mexico_city,2020,MONTH_Apr,0.9928776824550084 +353,city_mexico_city,2020,MONTH_Jul,0.32889448012572653 +354,city_mexico_city,2020,MONTH_Sep,0.5673016627623955 +355,city_mexico_city,2021,MONTH_Jan,0.6536524032020574 +356,city_mexico_city,2021,MONTH_Feb,0.36173684152563834 +357,city_mexico_city,2021,MONTH_Apr,0.19990517830323706 +358,city_mexico_city,2021,MONTH_Jun,0.22345205229744747 +359,city_mexico_city,2021,MONTH_Oct,0.22492657039602948 +360,city_ulan_bator,2019,MONTH_Feb,0.09731115691626857 +361,city_ulan_bator,2019,MONTH_Apr,0.7176250351822594 +362,city_ulan_bator,2019,MONTH_Jun,0.688881154365618 +363,city_ulan_bator,2019,MONTH_Oct,0.3175980682827121 +364,city_ulan_bator,2020,MONTH_Mar,0.5320422814207855 +365,city_ulan_bator,2020,MONTH_May,0.9377318205081451 +366,city_ulan_bator,2020,MONTH_Oct,0.15075146061048983 +367,city_ulan_bator,2020,MONTH_Dec,0.02105164967117734 +368,city_ulan_bator,2021,MONTH_Feb,0.6952583644077902 +369,city_ulan_bator,2021,MONTH_Apr,0.21333687792373945 +370,city_ulan_bator,2021,MONTH_Jun,0.43504532964375053 +371,city_ulan_bator,2021,MONTH_Oct,0.8872324146983761 +372,city_rabat,2019,MONTH_Apr,0.48486845571004145 +373,city_rabat,2019,MONTH_Jul,0.8303783897079856 +374,city_rabat,2019,MONTH_Sep,0.2679469126786186 +375,city_rabat,2020,MONTH_Jan,0.216862086460625 +376,city_rabat,2020,MONTH_Feb,0.6394841852490968 +377,city_rabat,2020,MONTH_Apr,0.7957348864256418 +378,city_rabat,2020,MONTH_Jun,0.35449913609838557 +379,city_rabat,2020,MONTH_Oct,0.884786543583512 +380,city_rabat,2021,MONTH_Feb,0.7545998323649945 +381,city_rabat,2021,MONTH_Apr,0.44179928991617634 +382,city_rabat,2021,MONTH_Jun,0.6071167209468333 +383,city_rabat,2021,MONTH_Oct,0.3586237763278812 +384,city_amsterdam,2019,MONTH_Feb,0.7316252644430535 +385,city_amsterdam,2019,MONTH_Apr,0.5668687381660837 +386,city_amsterdam,2019,MONTH_Jun,0.5576670888299602 +387,city_amsterdam,2019,MONTH_Oct,0.41651402253597936 +388,city_amsterdam,2020,MONTH_Mar,0.13691185457089883 +389,city_amsterdam,2020,MONTH_May,0.9963811450585627 +390,city_amsterdam,2020,MONTH_Oct,0.5678846559952594 +391,city_amsterdam,2020,MONTH_Dec,0.35998249466652255 +392,city_amsterdam,2021,MONTH_May,0.36176124559912815 +393,city_amsterdam,2021,MONTH_Aug,0.1452082631177628 +394,city_amsterdam,2021,MONTH_Nov,0.4059250184669765 +395,city_amsterdam,2021,MONTH_Dec,0.4668655836718629 +396,city_wellington,2019,MONTH_Mar,0.23997903684052424 +397,city_wellington,2019,MONTH_May,0.05133126394973464 +398,city_wellington,2019,MONTH_Oct,0.1548202784687026 +399,city_wellington,2019,MONTH_Dec,0.3424800359478265 +400,city_wellington,2020,MONTH_Feb,0.022701964101586536 +401,city_wellington,2020,MONTH_Apr,0.5499770964284553 +402,city_wellington,2020,MONTH_Jun,0.8253524794233187 +403,city_wellington,2020,MONTH_Oct,0.005331477335972168 +404,city_wellington,2021,MONTH_May,0.921657139441937 +405,city_wellington,2021,MONTH_Aug,0.10309395870694193 +406,city_wellington,2021,MONTH_Nov,0.6263565227069673 +407,city_wellington,2021,MONTH_Dec,0.2020818627729063 +408,city_managua,2019,MONTH_Apr,0.05582787287624136 +409,city_managua,2019,MONTH_Jul,0.48382759592973157 +410,city_managua,2019,MONTH_Sep,0.9827871188806075 +411,city_managua,2020,MONTH_Jan,0.00017714421442871497 +412,city_managua,2020,MONTH_Feb,0.9249580344693701 +413,city_managua,2020,MONTH_Apr,0.8044975554446903 +414,city_managua,2020,MONTH_Jun,0.5627263957766564 +415,city_managua,2020,MONTH_Oct,0.3237250276194914 +416,city_managua,2021,MONTH_Mar,0.020448801084839263 +417,city_managua,2021,MONTH_May,0.8901304537407349 +418,city_managua,2021,MONTH_Oct,0.7318410443954749 +419,city_managua,2021,MONTH_Dec,0.8843814008259293 +420,city_abuja,2019,MONTH_May,0.664788190346494 +421,city_abuja,2019,MONTH_Aug,0.34573866676735254 +422,city_abuja,2019,MONTH_Nov,0.0929888238353932 +423,city_abuja,2019,MONTH_Dec,0.8242625289595346 +424,city_abuja,2020,MONTH_Apr,0.610497664130435 +425,city_abuja,2020,MONTH_Jul,0.13045928363070136 +426,city_abuja,2020,MONTH_Sep,0.5931871800066496 +427,city_abuja,2021,MONTH_Jan,0.8761990727326217 +428,city_abuja,2021,MONTH_Mar,0.03297221593215882 +429,city_abuja,2021,MONTH_May,0.2663683106261656 +430,city_abuja,2021,MONTH_Oct,0.4752472559097941 +431,city_abuja,2021,MONTH_Dec,0.21817891455498406 +432,city_islamabad,2019,MONTH_Feb,0.6894565356869449 +433,city_islamabad,2019,MONTH_Apr,0.04473733639784894 +434,city_islamabad,2019,MONTH_Jun,0.8225140958795525 +435,city_islamabad,2019,MONTH_Oct,0.9167038764499388 +436,city_islamabad,2020,MONTH_Mar,0.18931156178758168 +437,city_islamabad,2020,MONTH_May,0.867263067708257 +438,city_islamabad,2020,MONTH_Oct,0.9052158492439835 +439,city_islamabad,2020,MONTH_Dec,0.2549403768974773 +440,city_islamabad,2021,MONTH_Mar,0.2810396842292088 +441,city_islamabad,2021,MONTH_May,0.8873391067395595 +442,city_islamabad,2021,MONTH_Oct,0.9330488657790148 +443,city_islamabad,2021,MONTH_Dec,0.03407368582674841 +444,city_lima,2019,MONTH_Feb,0.3283465777695367 +445,city_lima,2019,MONTH_Apr,0.27567241572636514 +446,city_lima,2019,MONTH_Jun,0.6098150878639521 +447,city_lima,2019,MONTH_Oct,0.7827311559088742 +448,city_lima,2020,MONTH_May,0.0004780110203138621 +449,city_lima,2020,MONTH_Aug,0.32359176810859613 +450,city_lima,2020,MONTH_Nov,0.7920164552383919 +451,city_lima,2020,MONTH_Dec,0.08680504053296734 +452,city_lima,2021,MONTH_Feb,0.2815552061774018 +453,city_lima,2021,MONTH_Apr,0.7946567665550932 +454,city_lima,2021,MONTH_Jun,0.9348739114080165 +455,city_lima,2021,MONTH_Oct,0.9664448937706452 +456,city_bucharest,2019,MONTH_Apr,0.2754215240255594 +457,city_bucharest,2019,MONTH_Jul,0.9342575547213549 +458,city_bucharest,2019,MONTH_Sep,0.4561755717169159 +459,city_bucharest,2020,MONTH_Jan,0.5815353517023211 +460,city_bucharest,2020,MONTH_Feb,0.09553696230313513 +461,city_bucharest,2020,MONTH_Apr,0.7977241274060681 +462,city_bucharest,2020,MONTH_Jun,0.11581142188629723 +463,city_bucharest,2020,MONTH_Oct,0.609366463954831 +464,city_bucharest,2021,MONTH_May,0.7786493748178472 +465,city_bucharest,2021,MONTH_Aug,0.3709475494848148 +466,city_bucharest,2021,MONTH_Nov,0.06409631979509034 +467,city_bucharest,2021,MONTH_Dec,0.6435411634892579 +468,city_moscow,2019,MONTH_Mar,0.3010106354277793 +469,city_moscow,2019,MONTH_May,0.4560783213170011 +470,city_moscow,2019,MONTH_Oct,0.05383312030625198 +471,city_moscow,2019,MONTH_Dec,0.751924840138458 +472,city_moscow,2020,MONTH_May,0.8723060880532295 +473,city_moscow,2020,MONTH_Aug,0.12394020657703886 +474,city_moscow,2020,MONTH_Nov,0.20202634410012543 +475,city_moscow,2020,MONTH_Dec,0.2782740134125702 +476,city_moscow,2021,MONTH_May,0.24885715310109735 +477,city_moscow,2021,MONTH_Aug,0.04896170267358957 +478,city_moscow,2021,MONTH_Nov,0.8684557906574781 +479,city_moscow,2021,MONTH_Dec,0.543114638108053 +480,city_belgrade,2019,MONTH_May,0.5522466531644503 +481,city_belgrade,2019,MONTH_Aug,0.6084457342690707 +482,city_belgrade,2019,MONTH_Nov,0.9044174074753157 +483,city_belgrade,2019,MONTH_Dec,0.07066906245830429 +484,city_belgrade,2020,MONTH_May,0.0008637322170093054 +485,city_belgrade,2020,MONTH_Aug,0.3288244897831679 +486,city_belgrade,2020,MONTH_Nov,0.369768435670744 +487,city_belgrade,2020,MONTH_Dec,0.9619642633301051 +488,city_belgrade,2021,MONTH_Mar,0.30571888815406045 +489,city_belgrade,2021,MONTH_May,0.4498184700674681 +490,city_belgrade,2021,MONTH_Oct,0.711549047351862 +491,city_belgrade,2021,MONTH_Dec,0.13085939624289578 +492,city_singapore,2019,MONTH_Feb,0.1936942927803761 +493,city_singapore,2019,MONTH_Apr,0.3187029298909052 +494,city_singapore,2019,MONTH_Jun,0.6452157990829956 +495,city_singapore,2019,MONTH_Oct,0.5911879699181295 +496,city_singapore,2020,MONTH_May,0.6993965342569872 +497,city_singapore,2020,MONTH_Aug,0.27809776213878035 +498,city_singapore,2020,MONTH_Nov,0.4554896687696134 +499,city_singapore,2020,MONTH_Dec,0.7243723676795923 +500,city_singapore,2021,MONTH_Apr,0.02299799672926217 +501,city_singapore,2021,MONTH_Jul,0.02496694790370424 +502,city_singapore,2021,MONTH_Sep,0.8791086402875006 +503,city_singapore,2022,MONTH_Jan,0.6120899910207525 +504,city_seoul,2019,MONTH_May,0.2771508217854315 +505,city_seoul,2019,MONTH_Aug,0.33484783290436804 +506,city_seoul,2019,MONTH_Nov,0.45034878076078355 +507,city_seoul,2019,MONTH_Dec,0.21034420206658822 +508,city_seoul,2020,MONTH_May,0.36401409053803546 +509,city_seoul,2020,MONTH_Aug,0.7067291614998081 +510,city_seoul,2020,MONTH_Nov,0.8856122368081336 +511,city_seoul,2020,MONTH_Dec,0.5197758093680719 +512,city_seoul,2021,MONTH_Apr,0.7328358817323198 +513,city_seoul,2021,MONTH_Jul,0.9037127128689783 +514,city_seoul,2021,MONTH_Sep,0.5799119578817793 +515,city_seoul,2022,MONTH_Jan,0.5237934258414012 +516,city_tunis,2019,MONTH_Mar,0.09827353604234723 +517,city_tunis,2019,MONTH_May,0.27835171289138416 +518,city_tunis,2019,MONTH_Oct,0.01798652216085228 +519,city_tunis,2019,MONTH_Dec,0.5949113607489287 +520,city_tunis,2020,MONTH_Mar,0.44924299463957973 +521,city_tunis,2020,MONTH_May,0.2858608027590416 +522,city_tunis,2020,MONTH_Oct,0.5320218904968578 +523,city_tunis,2020,MONTH_Dec,0.6648999091609407 +524,city_tunis,2021,MONTH_Apr,0.3736650716340366 +525,city_tunis,2021,MONTH_Jul,0.9657763373669 +526,city_tunis,2021,MONTH_Sep,0.6595606201567045 +527,city_tunis,2022,MONTH_Jan,0.6243212038969197 +528,city_bangkok,2019,MONTH_Feb,0.2578456608769377 +529,city_bangkok,2019,MONTH_Apr,0.2248885416702492 +530,city_bangkok,2019,MONTH_Jun,0.6198473912429538 +531,city_bangkok,2019,MONTH_Oct,0.8505515150984757 +532,city_bangkok,2020,MONTH_Feb,0.9118617849799147 +533,city_bangkok,2020,MONTH_Apr,0.8543453671326979 +534,city_bangkok,2020,MONTH_Jun,0.9765808850300658 +535,city_bangkok,2020,MONTH_Oct,0.5158800233414695 +536,city_bangkok,2021,MONTH_Apr,0.050747029721519676 +537,city_bangkok,2021,MONTH_Jul,0.42532679178785726 +538,city_bangkok,2021,MONTH_Sep,0.9152877310128299 +539,city_bangkok,2022,MONTH_Jan,0.2583064313996952 +540,city_washington_dc,2019,MONTH_May,0.6433596169157464 +541,city_washington_dc,2019,MONTH_Aug,0.3702060052617322 +542,city_washington_dc,2019,MONTH_Nov,0.06234400404581297 +543,city_washington_dc,2019,MONTH_Dec,0.8164574817344272 +544,city_washington_dc,2020,MONTH_May,0.5387086257630082 +545,city_washington_dc,2020,MONTH_Aug,0.6503845339241877 +546,city_washington_dc,2020,MONTH_Nov,0.1169515450758295 +547,city_washington_dc,2020,MONTH_Dec,0.1482196412729787 +548,city_washington_dc,2021,MONTH_Apr,0.021006555605136645 +549,city_washington_dc,2021,MONTH_Jul,0.8719805902905939 +550,city_washington_dc,2021,MONTH_Sep,0.2823182323390435 +551,city_washington_dc,2022,MONTH_Jan,0.8058292769346758 +552,city_hanoi,2019,MONTH_May,0.416591132604722 +553,city_hanoi,2019,MONTH_Aug,0.11526419958273892 +554,city_hanoi,2019,MONTH_Nov,0.3600359652946916 +555,city_hanoi,2019,MONTH_Dec,0.7841960773324388 +556,city_hanoi,2020,MONTH_May,0.7614140625646568 +557,city_hanoi,2020,MONTH_Aug,0.9722495866270668 +558,city_hanoi,2020,MONTH_Nov,0.4772429269877435 +559,city_hanoi,2020,MONTH_Dec,0.5484266496681606 +560,city_hanoi,2021,MONTH_May,0.5482481929764795 +561,city_hanoi,2021,MONTH_Aug,0.5910165431201254 +562,city_hanoi,2021,MONTH_Nov,0.7883174579363615 +563,city_hanoi,2021,MONTH_Dec,0.8001325713399826 +564,city_harare,2019,MONTH_Mar,0.7297867595027538 +565,city_harare,2019,MONTH_May,0.9072865854787621 +566,city_harare,2019,MONTH_Oct,0.7502614309817123 +567,city_harare,2019,MONTH_Dec,0.4934380718142153 +568,city_harare,2020,MONTH_Feb,0.651326952527076 +569,city_harare,2020,MONTH_Apr,0.6744095138584462 +570,city_harare,2020,MONTH_Jun,0.6135341540484665 +571,city_harare,2020,MONTH_Oct,0.3326984860429695 +572,city_harare,2021,MONTH_Apr,0.3268433775218048 +573,city_harare,2021,MONTH_Jul,0.952598360887876 +574,city_harare,2021,MONTH_Sep,0.6345983070473546 +575,city_harare,2022,MONTH_Jan,0.9701301800993941 +576,city_ankara,2019,MONTH_Feb,0.10677390573021461 +577,city_ankara,2019,MONTH_Apr,0.6365782948222759 +578,city_ankara,2019,MONTH_Jun,0.10650019877719086 +579,city_ankara,2019,MONTH_Oct,0.3950462306735656 +580,city_ankara,2020,MONTH_May,0.5166268720639717 +581,city_ankara,2020,MONTH_Aug,0.7077116044418617 +582,city_ankara,2020,MONTH_Nov,0.4929785255773451 +583,city_ankara,2020,MONTH_Dec,0.4176154831799538 +584,city_ankara,2021,MONTH_Mar,0.39164017521306327 +585,city_ankara,2021,MONTH_May,0.6425737678224106 +586,city_ankara,2021,MONTH_Oct,0.23326853444427909 +587,city_ankara,2021,MONTH_Dec,0.3483021408358088 \ No newline at end of file diff --git a/run_tree/data/incenter_test_data_clean_old.csv b/run_tree/data/incenter_test_data_clean_old.csv new file mode 100644 index 0000000..914635b --- /dev/null +++ b/run_tree/data/incenter_test_data_clean_old.csv @@ -0,0 +1,490 @@ +0,city_kiev,2019-Jan,0.4135864139,0.01956557108,0.3199632899 +1,city_kiev,2019-May,0.5108363835,0.8589876789,0.2033754817 +2,city_kiev,2019-Sep,0.3098831619,0.2965779176,0.8780642384 +3,city_kiev,2020-Jan,0.6513288588,0.969807378,0.4734936057 +4,city_kiev,2020-May,0.4017988233,0.08149953656,0.1917572298 +5,city_kiev,2020-Sep,0.2700455917,0.6525809233,0.3808256497 +6,city_kiev,2021-Jan,0.9957073392,0.8955640153,0.08200560685 +7,city_kiev,2021-May,0.08359383932,0.878866307,0.2737393541 +8,city_kiev,2021-Sep,0.3864062227,0.8355196902,0.1672691656 +9,city_kiev,2022-Jan,0.03859181836,0.8382749998,0.8116680932 +10,city_buenos_aires,2019-Jan,0.9308313567,0.6466857107,0.8641769833 +11,city_buenos_aires,2019-May,0.3700134984,0.7837693637,0.4343937489 +12,city_buenos_aires,2019-Sep,0.5994078053,0.2148970716,0.2135238874 +13,city_buenos_aires,2020-Jan,0.4941897857,0.9995185631,0.4317838305 +14,city_buenos_aires,2020-May,0.3257251742,0.1786902536,0.9581480625 +15,city_buenos_aires,2020-Sep,0.4133663483,0.4895787017,0.3266269703 +16,city_buenos_aires,2021-Jan,0.4185051363,0.6196468097,0.8595087401 +17,city_buenos_aires,2021-May,0.967209952,0.9684863108,0.1240276343 +18,city_buenos_aires,2021-Sep,0.9547593981,0.4235904569,0.7747874597 +19,city_buenos_aires,2022-Jan,0.7438244778,0.63418064,0.08865491745 +20,city_canberra,2019-Jan,0.642174332,0.2388107887,0.4174561786 +21,city_canberra,2019-May,0.275049574,0.5548509861,0.6932049183 +22,city_canberra,2019-Sep,0.7137277005,0.2288560273,0.3374528905 +23,city_canberra,2020-Jan,0.7776833239,0.2323082658,0.412349501 +24,city_canberra,2020-May,0.240911076,0.7393032141,0.03500517153 +25,city_canberra,2020-Sep,0.3222924521,0.6443196701,0.8722973134 +26,city_canberra,2021-Jan,0.03333787808,0.942723093,0.9307922515 +27,city_canberra,2021-May,0.6754651903,0.8715185605,0.7317628479 +28,city_canberra,2021-Sep,0.6679682277,0.3739222301,0.1775886144 +29,city_canberra,2022-Jan,0.5068355685,0.1635081943,0.1361671877 +30,city_yerevan,2019-Jan,0.2147489967,0.1612449722,0.8831791504 +31,city_yerevan,2019-May,0.9215334967,0.5782146645,0.4315847514 +32,city_yerevan,2019-Sep,0.08998384769,0.243931627,0.9968073448 +33,city_yerevan,2020-Jan,0.6352732643,0.1800861503,0.09468051361 +34,city_yerevan,2020-May,0.9732926191,0.3591501359,0.2549700998 +35,city_yerevan,2020-Sep,0.8958159719,0.9162956265,0.1139302618 +36,city_yerevan,2021-Jan,0.03360279599,0.999251994,0.6504557519 +37,city_yerevan,2021-May,0.2320210872,0.7948166485,0.3111218033 +38,city_yerevan,2021-Sep,0.7518920271,0.2746721747,0.1822453912 +39,city_yerevan,2022-Jan,0.9828234148,0.07410452188,0.8394608475 +40,city_bishkek,2019-Jan,0.1452622254,0.7491750047,0.9541456661 +41,city_bishkek,2019-May,0.5750325423,0.03818584404,0.4018200559 +42,city_bishkek,2019-Sep,0.2234510709,0.8535100292,0.2897079852 +43,city_bishkek,2020-Jan,0.5124122989,0.5110659435,0.3112428697 +44,city_bishkek,2020-May,0.6543130255,0.04240204986,0.622299684 +45,city_bishkek,2020-Sep,0.291880605,0.4159968733,0.2820567858 +46,city_bishkek,2021-Jan,0.04837900082,0.6784619452,0.1266086804 +47,city_bishkek,2021-May,0.7297099912,0.5149978596,0.5162051605 +48,city_bishkek,2021-Sep,0.5357617635,0.1818118381,0.8049034964 +49,city_bishkek,2022-Jan,0.8776874504,0.526233849,0.5263148206 +50,city_dhaka,2019-Jan,0.6751063458,0.1258686413,0.1016408419 +51,city_dhaka,2019-May,0.1479538758,0.137851628,0.5491982115 +52,city_dhaka,2019-Sep,0.0975619112,0.07457551448,0.03538831459 +53,city_dhaka,2020-Jan,0.4430038543,0.1828778611,0.2944631539 +54,city_dhaka,2020-May,0.4983727344,0.2630854991,0.3943451107 +55,city_dhaka,2020-Sep,0.4484292451,0.2339481189,0.2726949863 +56,city_dhaka,2021-Jan,0.5386010889,0.6933623389,0.4272398241 +57,city_dhaka,2021-May,0.8000427347,0.1994170511,0.390616751 +58,city_dhaka,2021-Sep,0.6004021175,0.3635764249,0.7907815985 +59,city_dhaka,2022-Jan,0.7859317154,0.9442375658,0.4927301142 +60,city_sucre,2019-Jan,0.5256472928,0.6907740522,0.615610268 +61,city_sucre,2019-May,0.09963983779,0.7664825572,0.06144303964 +62,city_sucre,2019-Sep,0.2666295548,0.8243600228,0.9654478129 +63,city_sucre,2020-Jan,0.8832832537,0.8316651207,0.506107938 +64,city_sucre,2020-May,0.5119837485,0.8836395641,0.5570675648 +65,city_sucre,2020-Sep,0.2845784627,0.9690913465,0.8959150557 +66,city_sucre,2021-Jan,0.6332564923,0.6389759815,0.1370995872 +67,city_sucre,2021-May,0.3936684553,0.5841123856,0.7516655319 +68,city_sucre,2021-Sep,0.2701367573,0.3501915684,0.6336972499 +69,city_sucre,2022-Jan,0.5919516162,0.4011786881,0.401258499 +70,city_brasilia,2019-Jan,0.9362317028,0.7884664385,0.422647608 +71,city_brasilia,2019-May,0.8524471342,0.430337496,0.6524337378 +72,city_brasilia,2019-Sep,0.3174124746,0.2555113355,0.7316351622 +73,city_brasilia,2020-Jan,0.7486195535,0.9015460575,0.7223646562 +74,city_brasilia,2020-May,0.3439380221,0.4736994161,0.2520318998 +75,city_brasilia,2020-Sep,0.3628079446,0.8676514395,0.03414644115 +76,city_brasilia,2021-Jan,0.7881248045,0.07831938111,0.1207919623 +77,city_brasilia,2021-May,0.9250479078,0.8901303748,0.07106044929 +78,city_brasilia,2021-Sep,0.4424696223,0.1006045971,0.5623995233 +79,city_brasilia,2022-Jan,0.774905499,0.2060788813,0.8296158878 +80,city_ottawa,2019-Jan,0.415154305,0.1059680177,0.3308787448 +81,city_ottawa,2019-May,0.6493463515,0.8937871978,0.3920436129 +82,city_ottawa,2019-Sep,0.7302853507,0.959377626,0.6185701564 +83,city_ottawa,2020-Jan,0.7511642768,0.9351348965,0.3946346882 +84,city_ottawa,2020-May,0.7724624372,0.9600619198,0.7859329103 +85,city_ottawa,2020-Sep,0.3041129836,0.7255126855,0.5221992715 +86,city_ottawa,2021-Jan,0.2503068936,0.3966644239,0.9602804747 +87,city_ottawa,2021-May,0.9312852988,0.3889126695,0.7929940878 +88,city_ottawa,2021-Sep,0.4981112549,0.1059935693,0.8574743066 +89,city_ottawa,2022-Jan,0.2752719283,0.719554905,0.6726537328 +90,city_santiago,2019-Jan,0.7354927387,0.4213001179,0.8802422329 +91,city_santiago,2019-May,0.7656384917,0.04327784254,0.4415898581 +92,city_santiago,2019-Sep,0.9611505259,0.6413038085,0.3379016843 +93,city_santiago,2020-Jan,0.2073040591,0.9427695446,0.6375111631 +94,city_santiago,2020-May,0.3194905106,0.7217433052,0.5085047009 +95,city_santiago,2020-Sep,0.3848264613,0.4960023984,0.9355666638 +96,city_santiago,2021-Jan,0.8416596967,0.8012664085,0.9257390628 +97,city_santiago,2021-May,0.04492334998,0.5346889758,0.7850799406 +98,city_santiago,2021-Sep,0.2037147168,0.5946083862,0.2569824786 +99,city_santiago,2022-Jan,0.1393061974,0.3129179343,0.952991536 +100,city_beijing,2019-Jan,0.3178648282,0.6780576423,0.310220077 +101,city_beijing,2019-May,0.08431258495,0.4251703457,0.325551065 +102,city_beijing,2019-Sep,0.9445905243,0.6002283849,0.2930351001 +103,city_beijing,2020-Jan,0.2790601521,0.6238888439,0.1195087407 +104,city_beijing,2020-May,0.7794297238,0.1274087865,0.8642829933 +105,city_beijing,2020-Sep,0.1180488469,0.6663626158,0.2607091672 +106,city_beijing,2021-Jan,0.0704770744,0.1823784313,0.266078728 +107,city_beijing,2021-May,0.6136936433,0.9076039223,0.7423526451 +108,city_beijing,2021-Sep,0.1818364902,0.8480116889,0.1921589399 +109,city_beijing,2022-Jan,0.9251074867,0.9359530202,0.1770008157 +110,city_bogota,2019-Jan,0.624155697,0.03153673702,0.194147822 +111,city_bogota,2019-May,0.6693112776,0.9194170452,0.7562801226 +112,city_bogota,2019-Sep,0.2270854552,0.5727321164,0.1383067024 +113,city_bogota,2020-Jan,0.1680212218,0.9342808077,0.8749805221 +114,city_bogota,2020-May,0.7202858441,0.9917960947,0.6322514442 +115,city_bogota,2020-Sep,0.2521898539,0.6263208583,0.4677228154 +116,city_bogota,2021-Jan,0.1522785431,0.3525519967,0.7373106672 +117,city_bogota,2021-May,0.5294850571,0.5696053899,0.8817775003 +118,city_bogota,2021-Sep,0.4124724998,0.8456196102,0.6640041077 +119,city_bogota,2022-Jan,0.3733020161,0.02006290035,0.7176733233 +120,city_nicosia,2019-Jan,0.05459926779,0.5053119181,0.7161425568 +121,city_nicosia,2019-May,0.1106513246,0.05436806241,0.3515319482 +122,city_nicosia,2019-Sep,0.2890129589,0.5327814479,0.0564076411 +123,city_nicosia,2020-Jan,0.5163181441,0.6338465939,0.6444040696 +124,city_nicosia,2020-May,0.368582402,0.2737939017,0.5093951622 +125,city_nicosia,2020-Sep,0.471424489,0.7035862994,0.2042673249 +126,city_nicosia,2021-Jan,0.6501679348,0.3863401401,0.06039493853 +127,city_nicosia,2021-May,0.8365728469,0.9942683732,0.2896511837 +128,city_nicosia,2021-Sep,0.995211768,0.4426742775,0.2572311547 +129,city_nicosia,2022-Jan,0.4359362671,0.3118280621,0.6705883368 +130,city_quito,2019-Jan,0.008417639206,0.3014245876,0.3052574326 +131,city_quito,2019-May,0.9857935547,0.1817759722,0.6952597878 +132,city_quito,2019-Sep,0.5276216133,0.130251563,0.3240003865 +133,city_quito,2020-Jan,0.9035196298,0.05698437866,0.7702244321 +134,city_quito,2020-May,0.3066932204,0.4436222048,0.260779084 +135,city_quito,2020-Sep,0.7272718268,0.5725148062,0.9164124193 +136,city_quito,2021-Jan,0.1059151872,0.08895582061,0.2928971124 +137,city_quito,2021-May,0.5118712419,0.3026817401,0.4279458258 +138,city_quito,2021-Sep,0.3330274894,0.4468848481,0.1236207096 +139,city_quito,2022-Jan,0.1244205704,0.1358899607,0.09450148278 +140,city_cairo,2019-Jan,0.4615407783,0.9520223142,0.5749502467 +141,city_cairo,2019-May,0.475409533,0.8210527062,0.4346789398 +142,city_cairo,2019-Sep,0.8066731319,0.6534694757,0.02837567269 +143,city_cairo,2020-Jan,0.8670750153,0.3625430406,0.3825884646 +144,city_cairo,2020-May,0.4951683874,0.3254080811,0.3654370688 +145,city_cairo,2020-Sep,0.7770142608,0.3716663152,0.7309639163 +146,city_cairo,2021-Jan,0.7855635031,0.066121297,0.4673674219 +147,city_cairo,2021-May,0.1730690216,0.6707204192,0.04674807743 +148,city_cairo,2021-Sep,0.489859121,0.7975075822,0.4092845343 +149,city_cairo,2022-Jan,0.4026321904,0.3023607084,0.4688463182 +150,city_addis_ababa,2019-Jan,0.4158713422,0.723030428,0.7597643722 +151,city_addis_ababa,2019-May,0.6785635739,0.1609066638,0.3381258458 +152,city_addis_ababa,2019-Sep,0.4569397919,0.526164665,0.1769840336 +153,city_addis_ababa,2020-Jan,0.6383916423,0.9232172286,0.1182792853 +154,city_addis_ababa,2020-May,0.7178022526,0.2387936324,0.02385348652 +155,city_addis_ababa,2020-Sep,0.9849294332,0.7956996228,0.4222712868 +156,city_addis_ababa,2021-Jan,0.07887778219,0.69387249,0.1295531304 +157,city_addis_ababa,2021-May,0.1808748003,0.06275186687,0.07472647253 +158,city_addis_ababa,2021-Sep,0.4839227903,0.4053925375,0.5147437288 +159,city_addis_ababa,2022-Jan,0.7803588092,0.727980068,0.6142244773 +160,city_berlin,2019-Jan,0.8326116144,0.1655051488,0.9828841108 +161,city_berlin,2019-May,0.250598596,0.8092499198,0.2239228888 +162,city_berlin,2019-Sep,0.8741896975,0.2665338382,0.1668458375 +163,city_berlin,2020-Jan,0.8399662922,0.7424132106,0.7362431642 +164,city_berlin,2020-May,0.6234997751,0.1409901662,0.1120024816 +165,city_berlin,2020-Sep,0.5161994486,0.5217599377,0.2535940892 +166,city_berlin,2021-Jan,0.1199007456,0.4344814743,0.1242415921 +167,city_berlin,2021-May,0.7303554923,0.3020973192,0.07171730289 +168,city_berlin,2021-Sep,0.7721955593,0.1087218774,0.6464209647 +169,city_berlin,2022-Jan,0.7614676523,0.08317084863,0.2325090714 +170,city_athens,2019-Jan,0.5327877289,0.9744463465,0.08180874782 +171,city_athens,2019-May,0.3652119168,0.01078413186,0.3276447375 +172,city_athens,2019-Sep,0.02943374111,0.9488744953,0.839420683 +173,city_athens,2020-Jan,0.8262571714,0.3638952168,0.00987960679 +174,city_athens,2020-May,0.5744768806,0.345623497,0.02740369312 +175,city_athens,2020-Sep,0.1795134643,0.3635695132,0.5559708634 +176,city_athens,2021-Jan,0.7699177565,0.392814441,0.61825789 +177,city_athens,2021-May,0.2212081657,0.9191236281,0.2313453472 +178,city_athens,2021-Sep,0.6074897578,0.7022955185,0.9424673176 +179,city_athens,2022-Jan,0.8794169545,0.3645845791,0.03908482265 +180,city_guatemala_city,2019-Jan,0.2898139176,0.763974548,0.1414512253 +181,city_guatemala_city,2019-May,0.6106569652,0.8240962332,0.6939830925 +182,city_guatemala_city,2019-Sep,0.5861384162,0.04609006852,0.8409472079 +183,city_guatemala_city,2020-Jan,0.7872155024,0.1606561264,0.2650589027 +184,city_guatemala_city,2020-May,0.1910735766,0.557900717,0.600110758 +185,city_guatemala_city,2020-Sep,0.6290094549,0.2562474722,0.7560094788 +186,city_guatemala_city,2021-Jan,0.4257358075,0.1027767675,0.4144983414 +187,city_guatemala_city,2021-May,0.7099732679,0.08313104975,0.284854386 +188,city_guatemala_city,2021-Sep,0.892413365,0.5532906407,0.2968339741 +189,city_guatemala_city,2022-Jan,0.8273477199,0.7395492724,0.9457886281 +190,city_jakarta,2019-Jan,0.9193766389,0.562096263,0.08597256563 +191,city_jakarta,2019-May,0.9613467154,0.6769316276,0.6942166445 +192,city_jakarta,2019-Sep,0.8911849078,0.7562774935,0.931896191 +193,city_jakarta,2020-Jan,0.4624306474,0.2038734797,0.9108010452 +194,city_jakarta,2020-May,0.7789672101,0.4319469274,0.5955267956 +195,city_jakarta,2020-Sep,0.937567279,0.5425494534,0.1971329509 +196,city_jakarta,2021-Jan,0.05969973106,0.8612950096,0.1110350332 +197,city_jakarta,2021-May,0.2180583953,0.129191418,0.8485609101 +198,city_jakarta,2021-Sep,0.5603349001,0.4438715596,0.3221066821 +199,city_jakarta,2022-Jan,0.5924979531,0.7839538361,0.9407650221 +200,city_tehran,2019-Jan,0.5292539582,0.9150355842,0.5624261915 +201,city_tehran,2019-May,0.7509693779,0.2702537133,0.05959118151 +202,city_tehran,2019-Sep,0.0004306332507,0.5449529067,0.7126608061 +203,city_tehran,2020-Jan,0.1082794742,0.4536112847,0.9691479921 +204,city_tehran,2020-May,0.3819988509,0.6632068954,0.5233308183 +205,city_tehran,2020-Sep,0.9333775196,0.6158183662,0.6980507813 +206,city_tehran,2021-Jan,0.4710513182,0.05454750359,0.5645271704 +207,city_tehran,2021-May,0.2485026502,0.7312942592,0.2627718368 +208,city_tehran,2021-Sep,0.01302679826,0.336700741,0.6003091579 +209,city_tehran,2022-Jan,0.819297579,0.9598619279,0.6779261352 +210,city_baghdad,2019-Jan,0.6571740151,0.7467470149,0.6081817043 +211,city_baghdad,2019-May,0.8853581326,0.7189311143,0.7448624368 +212,city_baghdad,2019-Sep,0.6146196468,0.6768913331,0.7571456788 +213,city_baghdad,2020-Jan,0.08117439619,0.8747030021,0.7191705185 +214,city_baghdad,2020-May,0.3522675259,0.8238104615,0.1537342642 +215,city_baghdad,2020-Sep,0.2356301438,0.3576600925,0.6118789786 +216,city_baghdad,2021-Jan,0.4391707399,0.4474647074,0.6430828897 +217,city_baghdad,2021-May,0.268736745,0.394059054,0.119349115 +218,city_baghdad,2021-Sep,0.2073373839,0.407147767,0.8267744414 +219,city_baghdad,2022-Jan,0.01562994523,0.7208303197,0.3132938272 +220,city_tokyo,2019-Jan,0.8352048365,0.4889643586,0.5708637608 +221,city_tokyo,2019-May,0.07092244122,0.7175987454,0.548696431 +222,city_tokyo,2019-Sep,0.435831484,0.7019761931,0.8220189625 +223,city_tokyo,2020-Jan,0.5223738584,0.9554340802,0.7499007696 +224,city_tokyo,2020-May,0.303390769,0.9935451138,0.9673256357 +225,city_tokyo,2020-Sep,0.4384910546,0.06373422983,0.9278227045 +226,city_tokyo,2021-Jan,0.4244047664,0.8205993601,0.3039457448 +227,city_tokyo,2021-May,0.01059055428,0.1387852586,0.202489681 +228,city_tokyo,2021-Sep,0.8243603537,0.01143751208,0.6110956967 +229,city_tokyo,2022-Jan,0.9934216564,0.5012722622,0.8378971436 +230,city_amman,2019-Jan,0.1540357106,0.6803451745,0.7406204618 +231,city_amman,2019-May,0.3376841081,0.8528543434,0.8947938379 +232,city_amman,2019-Sep,0.8652355208,0.7611803277,0.4579395501 +233,city_amman,2020-Jan,0.9236248973,0.597652822,0.3755196877 +234,city_amman,2020-May,0.4995982826,0.924389631,0.306112936 +235,city_amman,2020-Sep,0.5400326648,0.09029500814,0.474054147 +236,city_amman,2021-Jan,0.08564701964,0.3066904227,0.7320517679 +237,city_amman,2021-May,0.4889587211,0.2702591115,0.7290170229 +238,city_amman,2021-Sep,0.0335487674,0.2504805992,0.7181076944 +239,city_amman,2022-Jan,0.3418902923,0.8970783354,0.1739518732 +240,city_nairobi,2019-Jan,0.8272692723,0.2193240076,0.02060070785 +241,city_nairobi,2019-May,0.25413013,0.273279121,0.9193914915 +242,city_nairobi,2019-Sep,0.2576763868,0.8634612874,0.4355158525 +243,city_nairobi,2020-Jan,0.9763060138,0.1430317922,0.6483186049 +244,city_nairobi,2020-May,0.6939313329,0.5892953211,0.9663935709 +245,city_nairobi,2020-Sep,0.2764149061,0.1774120717,0.7812622959 +246,city_nairobi,2021-Jan,0.7707636847,0.8689268495,0.1363146058 +247,city_nairobi,2021-May,0.9163507683,0.2515377182,0.07565517255 +248,city_nairobi,2021-Sep,0.7513935872,0.1532284207,0.7363183336 +249,city_nairobi,2022-Jan,0.1767128894,0.1454489297,0.3971665474 +250,city_beirut,2019-Jan,0.788339519,0.5127333364,0.8333304991 +251,city_beirut,2019-May,0.7230935424,0.2298084849,0.5472381483 +252,city_beirut,2019-Sep,0.5909867246,0.02179296134,0.7592174254 +253,city_beirut,2020-Jan,0.9340891126,0.8696574846,0.5400465709 +254,city_beirut,2020-May,0.0276754093,0.8986496952,0.5265469731 +255,city_beirut,2020-Sep,0.4649235896,0.3356422036,0.5517011162 +256,city_beirut,2021-Jan,0.7389463326,0.947502386,0.6815278477 +257,city_beirut,2021-May,0.7670585948,0.6473540111,0.5277366776 +258,city_beirut,2021-Sep,0.5942151705,0.4821676255,0.1016388854 +259,city_beirut,2022-Jan,0.5882001691,0.361997451,0.293222771 +260,city_tripoli,2019-Jan,0.2677810804,0.2357072677,0.3565856652 +261,city_tripoli,2019-May,0.07104588209,0.5513605839,0.0451456715 +262,city_tripoli,2019-Sep,0.4257855731,0.616771154,0.5592935074 +263,city_tripoli,2020-Jan,0.3449656127,0.687252387,0.2071332881 +264,city_tripoli,2020-May,0.05954930585,0.08429442185,0.5561507364 +265,city_tripoli,2020-Sep,0.5287426821,0.7518475156,0.605454666 +266,city_tripoli,2021-Jan,0.926167857,0.4054919777,0.01780159166 +267,city_tripoli,2021-May,0.1158836845,0.1263661794,0.5107072656 +268,city_tripoli,2021-Sep,0.3098832321,0.8877507511,0.9402516681 +269,city_tripoli,2022-Jan,0.2471150536,0.9391734631,0.05978336229 +270,city_kuala_lumpur,2019-Jan,0.6863528274,0.8697980657,0.2282523362 +271,city_kuala_lumpur,2019-May,0.8358905297,0.9856091378,0.9827359299 +272,city_kuala_lumpur,2019-Sep,0.8423115828,0.8475761347,0.6705055844 +273,city_kuala_lumpur,2020-Jan,0.352567735,0.1954722531,0.2030722961 +274,city_kuala_lumpur,2020-May,0.04741808923,0.210640203,0.01469151867 +275,city_kuala_lumpur,2020-Sep,0.957184061,0.4772033411,0.06693120676 +276,city_kuala_lumpur,2021-Jan,0.8694608057,0.4899108808,0.6298810317 +277,city_kuala_lumpur,2021-May,0.03785739177,0.215056941,0.4898345725 +278,city_kuala_lumpur,2021-Sep,0.8474861196,0.8203214118,0.9639926419 +279,city_kuala_lumpur,2022-Jan,0.09388447049,0.8918711252,0.8982826914 +280,city_male,2019-Jan,0.9535318247,0.150372675,0.945000347 +281,city_male,2019-May,0.7412962727,0.003038298983,0.4180035581 +282,city_male,2019-Sep,0.2345256191,0.9034615199,0.4484671987 +283,city_male,2020-Jan,0.04034677353,0.1748185368,0.4505723828 +284,city_male,2020-May,0.5639263503,0.2796195837,0.2018342222 +285,city_male,2020-Sep,0.2502278203,0.5534360568,0.4339739447 +286,city_male,2021-Jan,0.3031630191,0.07439445923,0.4700919847 +287,city_male,2021-May,0.8624679204,0.2578625741,0.09027702491 +288,city_male,2021-Sep,0.2454379645,0.9075344381,0.05214485101 +289,city_male,2022-Jan,0.3611491011,0.9851549825,0.4531224627 +290,city_mexico_city,2019-Jan,0.5367583915,0.258080948,0.6816746827 +291,city_mexico_city,2019-May,0.9853964418,0.6359366543,0.4883879642 +292,city_mexico_city,2019-Sep,0.9563011498,0.0299396029,0.9594745399 +293,city_mexico_city,2020-Jan,0.4688441336,0.8191478053,0.8617118239 +294,city_mexico_city,2020-May,0.1927625183,0.5748900138,0.8513407749 +295,city_mexico_city,2020-Sep,0.4454512258,0.5824312156,0.9636387659 +296,city_mexico_city,2021-Jan,0.9859257045,0.1759599736,0.4286920936 +297,city_mexico_city,2021-May,0.363776648,0.1809230842,0.2368178691 +298,city_mexico_city,2021-Sep,0.6824795264,0.2990136144,0.0405011663 +299,city_mexico_city,2022-Jan,0.8905587395,0.1905990529,0.4882507814 +300,city_ulan_bator,2019-Jan,0.6741485464,0.717576578,0.4293573811 +301,city_ulan_bator,2019-May,0.3262047159,0.8716206568,0.5458236269 +302,city_ulan_bator,2019-Sep,0.6265632177,0.2317454106,0.7036908001 +303,city_ulan_bator,2020-Jan,0.5113218116,0.221105242,0.888826252 +304,city_ulan_bator,2020-May,0.3906062072,0.66427438,0.2935980572 +305,city_ulan_bator,2020-Sep,0.3971036952,0.01783759712,0.8998790336 +306,city_ulan_bator,2021-Jan,0.2637427101,0.2385390121,0.6249611526 +307,city_ulan_bator,2021-May,0.912242776,0.08731497158,0.6532080205 +308,city_ulan_bator,2021-Sep,0.397708583,0.8048328144,0.7926631264 +309,city_ulan_bator,2022-Jan,0.9942061508,0.2470806419,0.4383188216 +310,city_rabat,2019-Jan,0.2230411495,0.3676032952,0.4107616888 +311,city_rabat,2019-May,0.1492052294,0.3892316663,0.1094391123 +312,city_rabat,2019-Sep,0.5472040034,0.9976653002,0.1954636489 +313,city_rabat,2020-Jan,0.9966868022,0.2096797583,0.3057921875 +314,city_rabat,2020-May,0.2045133008,0.2371876672,0.4427255118 +315,city_rabat,2020-Sep,0.925035033,0.584423711,0.6622095958 +316,city_rabat,2021-Jan,0.09596785333,0.1155214101,0.9929036089 +317,city_rabat,2021-May,0.5279036078,0.2882972716,0.2605861754 +318,city_rabat,2021-Sep,0.9105437212,0.3634054264,0.5256147774 +319,city_rabat,2022-Jan,0.7458623714,0.1574213382,0.6264820458 +320,city_amsterdam,2019-Jan,0.799256021,0.3395427351,0.4031577596 +321,city_amsterdam,2019-May,0.1804581241,0.845954797,0.3228938347 +322,city_amsterdam,2019-Sep,0.1970508803,0.04130658614,0.5235063506 +323,city_amsterdam,2020-Jan,0.9242590394,0.1852741273,0.3749524614 +324,city_amsterdam,2020-May,0.8783562576,0.08261349126,0.3541495132 +325,city_amsterdam,2020-Sep,0.8995390999,0.8467088641,0.8145635751 +326,city_amsterdam,2021-Jan,0.6193291884,0.3946284311,0.6509909684 +327,city_amsterdam,2021-May,0.7058310687,0.2254146029,0.3006021917 +328,city_amsterdam,2021-Sep,0.6448915078,0.2207063867,0.7670154359 +329,city_amsterdam,2022-Jan,0.6566724581,0.4963253272,0.5882010246 +330,city_wellington,2019-Jan,0.975771214,0.7828569709,0.8579568289 +331,city_wellington,2019-May,0.4808303848,0.2147995042,0.5427822914 +332,city_wellington,2019-Sep,0.982612098,0.2017583263,0.6818840957 +333,city_wellington,2020-Jan,0.8282939128,0.0173039828,0.8484000112 +334,city_wellington,2020-May,0.7067879274,0.1232934138,0.1583243715 +335,city_wellington,2020-Sep,0.05426185515,0.9523095362,0.8600642333 +336,city_wellington,2021-Jan,0.849837313,0.6723412286,0.3539009568 +337,city_wellington,2021-May,0.851419205,0.08734822939,0.3631028432 +338,city_wellington,2021-Sep,0.5211397365,0.601091111,0.8736619915 +339,city_wellington,2022-Jan,0.0004370141048,0.7856350051,0.7967341982 +340,city_managua,2019-Jan,0.4449076437,0.07095081666,0.2226768192 +341,city_managua,2019-May,0.9058054532,0.9825352592,0.8801532619 +342,city_managua,2019-Sep,0.4664849351,0.1507856153,0.6859989836 +343,city_managua,2020-Jan,0.7063256142,0.8480495571,0.6506210446 +344,city_managua,2020-May,0.5672273277,0.1732735134,0.0473325036 +345,city_managua,2020-Sep,0.6152126641,0.262875193,0.06784724677 +346,city_managua,2021-Jan,0.5630548661,0.139303683,0.2497055152 +347,city_managua,2021-May,0.7090141669,0.6050612033,0.717160999 +348,city_managua,2021-Sep,0.6726886326,0.3955881513,0.05659926761 +349,city_managua,2022-Jan,0.5118331134,0.9697227523,0.6694463186 +350,city_abuja,2019-Jan,0.7215577985,0.8069645818,0.2144030138 +351,city_abuja,2019-May,0.2389187672,0.1132551265,0.6855980263 +352,city_abuja,2019-Sep,0.3713433464,0.8430974465,0.7186428163 +353,city_abuja,2020-Jan,0.3213201344,0.9099336087,0.8449178856 +354,city_abuja,2020-May,0.8469259071,0.5524627768,0.9260609535 +355,city_abuja,2020-Sep,0.4366534985,0.4725483191,0.6004087497 +356,city_abuja,2021-Jan,0.6629119774,0.2245666268,0.2164730197 +357,city_abuja,2021-May,0.7151602496,0.852215806,0.9994776477 +358,city_abuja,2021-Sep,0.2657906656,0.8775827085,0.02569985435 +359,city_abuja,2022-Jan,0.6656366265,0.5595354603,0.3052805174 +360,city_islamabad,2019-Jan,0.5657435109,0.06594882308,0.05639372024 +361,city_islamabad,2019-May,0.3617440488,0.8182270972,0.5020515613 +362,city_islamabad,2019-Sep,0.8972054882,0.5389161919,0.08204922443 +363,city_islamabad,2020-Jan,0.6361910136,0.7719467598,0.3555156382 +364,city_islamabad,2020-May,0.5658655482,0.9978291866,0.9204755129 +365,city_islamabad,2020-Sep,0.5229417395,0.4433901007,0.3977836013 +366,city_islamabad,2021-Jan,0.9304358199,0.5494074576,0.689688983 +367,city_islamabad,2021-May,0.04229158644,0.4005375448,0.4328307124 +368,city_islamabad,2021-Sep,0.3071366189,0.4742819877,0.8376670766 +369,city_islamabad,2022-Jan,0.9667463886,0.8263189953,0.9260605166 +370,city_lima,2019-Jan,0.004449000129,0.5359554688,0.5170556156 +371,city_lima,2019-May,0.0040391066,0.727889608,0.3979039803 +372,city_lima,2019-Sep,0.4752783789,0.286290551,0.9038587969 +373,city_lima,2020-Jan,0.5243305401,0.9542521021,0.8437255443 +374,city_lima,2020-May,0.5189281056,0.9532682341,0.04858519966 +375,city_lima,2020-Sep,0.9698181754,0.2626736181,0.07547748485 +376,city_lima,2021-Jan,0.42487374,0.7219955088,0.03794786379 +377,city_lima,2021-May,0.1580065461,0.7412839844,0.78239396 +378,city_lima,2021-Sep,0.5313078226,0.6906399598,0.1497155574 +379,city_lima,2022-Jan,0.7137341222,0.9608880466,0.7117129761 +380,city_bucharest,2019-Jan,0.9989856747,0.3173551828,0.3589126521 +381,city_bucharest,2019-May,0.7987576639,0.431771908,0.1180147721 +382,city_bucharest,2019-Sep,0.4474069189,0.716171076,0.3027452883 +383,city_bucharest,2020-Jan,0.9724268855,0.3257941961,0.8441895702 +384,city_bucharest,2020-May,0.9980411751,0.1256631536,0.07115468458 +385,city_bucharest,2020-Sep,0.1213183636,0.3941146639,0.06092239127 +386,city_bucharest,2021-Jan,0.4205241143,0.1941809277,0.4877147348 +387,city_bucharest,2021-May,0.3360387926,0.3922642193,0.2054573166 +388,city_bucharest,2021-Sep,0.06667197523,0.1235198397,0.5762869522 +389,city_bucharest,2022-Jan,0.306929458,0.7091646997,0.8807736754 +390,city_moscow,2019-Jan,0.4884820054,0.3664299465,0.5947931914 +391,city_moscow,2019-May,0.8045965787,0.645890862,0.6135267009 +392,city_moscow,2019-Sep,0.5168853064,0.005617348514,0.03449093575 +393,city_moscow,2020-Jan,0.5083457969,0.1835582116,0.9683744996 +394,city_moscow,2020-May,0.1155265419,0.02495497214,0.9077392365 +395,city_moscow,2020-Sep,0.3679246739,0.4012096928,0.1788263876 +396,city_moscow,2021-Jan,0.04563746129,0.5524970339,0.2758883611 +397,city_moscow,2021-May,0.874515788,0.5738406989,0.4389562884 +398,city_moscow,2021-Sep,0.5644210913,0.1248259343,0.3045741317 +399,city_moscow,2022-Jan,0.02472030916,0.5212881284,0.6865817501 +400,city_belgrade,2019-Jan,0.2054378336,0.3388140331,0.1560520775 +401,city_belgrade,2019-May,0.8233419498,0.06099252492,0.3285799916 +402,city_belgrade,2019-Sep,0.737910215,0.0218623579,0.8147299491 +403,city_belgrade,2020-Jan,0.9112117631,0.9656860025,0.3786632918 +404,city_belgrade,2020-May,0.7803837773,0.09974279125,0.003345917394 +405,city_belgrade,2020-Sep,0.2159103445,0.4208667863,0.306492557 +406,city_belgrade,2021-Jan,0.8099756545,0.1659555892,0.5686013193 +407,city_belgrade,2021-May,0.9153223024,0.7262449027,0.5551206235 +408,city_belgrade,2021-Sep,0.5130398179,0.01271602991,0.9210065704 +409,city_belgrade,2022-Jan,0.815222032,0.2659741857,0.2871871833 +410,city_singapore,2019-Jan,0.2134172681,0.8580276605,0.9601842113 +411,city_singapore,2019-May,0.6023894791,0.4216392972,0.7161700994 +412,city_singapore,2019-Sep,0.6858661731,0.7862881275,0.2316293129 +413,city_singapore,2020-Jan,0.6841130768,0.2949128642,0.5366420271 +414,city_singapore,2020-May,0.498180307,0.47856757,0.5634083248 +415,city_singapore,2020-Sep,0.005418301445,0.6835751602,0.5749891016 +416,city_singapore,2021-Jan,0.2189054618,0.9144602713,0.7515237128 +417,city_singapore,2021-May,0.4224346227,0.2277588726,0.5884623504 +418,city_singapore,2021-Sep,0.00726630776,0.4287783353,0.9893778021 +419,city_singapore,2022-Jan,0.415505623,0.5043323742,0.04127731435 +420,city_seoul,2019-Jan,0.4158292137,0.3235311166,0.3313557261 +421,city_seoul,2019-May,0.3720615125,0.5183966398,0.5281903814 +422,city_seoul,2019-Sep,0.2898671082,0.1498256654,0.6543104049 +423,city_seoul,2020-Jan,0.2590961078,0.03198788857,0.7939989818 +424,city_seoul,2020-May,0.158505935,0.646670114,0.8497340793 +425,city_seoul,2020-Sep,0.7733778533,0.8329950401,0.6951126836 +426,city_seoul,2021-Jan,0.2333382418,0.3836525618,0.7553079657 +427,city_seoul,2021-May,0.7819967758,0.974315225,0.07959266939 +428,city_seoul,2021-Sep,0.5964142264,0.248241969,0.6541351389 +429,city_seoul,2022-Jan,0.90841441,0.1943781343,0.09601869236 +430,city_tunis,2019-Jan,0.6652183138,0.4894266427,0.4240159206 +431,city_tunis,2019-May,0.9884960516,0.9755110617,0.06384271908 +432,city_tunis,2019-Sep,0.680123991,0.3601116984,0.5918194417 +433,city_tunis,2020-Jan,0.1473826674,0.9219684102,0.513104658 +434,city_tunis,2020-May,0.7317874879,0.7317059155,0.5088701786 +435,city_tunis,2020-Sep,0.978750762,0.8405181067,0.9071571207 +436,city_tunis,2021-Jan,0.4223105477,0.182839254,0.9445235115 +437,city_tunis,2021-May,0.1376962812,0.3380520816,0.9820850094 +438,city_tunis,2021-Sep,0.9888050345,0.7938678388,0.4087101449 +439,city_tunis,2022-Jan,0.08062628741,0.811235545,0.6412991336 +440,city_bangkok,2019-Jan,0.7740886353,0.00393096204,0.9355208309 +441,city_bangkok,2019-May,0.9261865051,0.5543156401,0.2301005313 +442,city_bangkok,2019-Sep,0.0036399897,0.5151920906,0.7759955482 +443,city_bangkok,2020-Jan,0.4058027436,0.03111692238,0.5575806328 +444,city_bangkok,2020-May,0.657934059,0.5883429191,0.4110502161 +445,city_bangkok,2020-Sep,0.2211613657,0.8307157083,0.5495225194 +446,city_bangkok,2021-Jan,0.9381384113,0.3390859316,0.3941873429 +447,city_bangkok,2021-May,0.1913245397,0.8985675591,0.1613629563 +448,city_bangkok,2021-Sep,0.4849294818,0.07434437657,0.212956493 +449,city_bangkok,2022-Jan,0.5632024472,0.05342124515,0.608214207 +450,city_washington_d.c.,2019-Jan,0.706354796,0.5566582481,0.3888501308 +451,city_washington_d.c.,2019-May,0.3967146921,0.6871371398,0.3749746333 +452,city_washington_d.c.,2019-Sep,0.1461645524,0.07178227096,0.008434495791 +453,city_washington_d.c.,2020-Jan,0.7767257209,0.6806659613,0.2452377716 +454,city_washington_d.c.,2020-May,0.03369730849,0.4195955155,0.8280863275 +455,city_washington_d.c.,2020-Sep,0.7276129361,0.1779246857,0.1500722549 +456,city_washington_d.c.,2021-Jan,0.9155963204,0.9973251079,0.701925965 +457,city_washington_d.c.,2021-May,0.1160842378,0.1693766214,0.6736147037 +458,city_washington_d.c.,2021-Sep,0.4549449302,0.9554399549,0.7586370391 +459,city_washington_d.c.,2022-Jan,0.4006997702,0.955893003,0.1364601882 +460,city_hanoi,2019-Jan,0.4131646918,0.6762825725,0.5131651918 +461,city_hanoi,2019-May,0.219613407,0.4764566921,0.5947576005 +462,city_hanoi,2019-Sep,0.7775954747,0.5535598775,0.9161480338 +463,city_hanoi,2020-Jan,0.1749110224,0.03153303649,0.2325527303 +464,city_hanoi,2020-May,0.6513750193,0.9378385276,0.6723599033 +465,city_hanoi,2020-Sep,0.8846442259,0.5905572431,0.8375318419 +466,city_hanoi,2021-Jan,0.04438681781,0.7197215338,0.5135403183 +467,city_hanoi,2021-May,0.8841873451,0.01386415254,0.9290412269 +468,city_hanoi,2021-Sep,0.9471121112,0.8845281879,0.4825962156 +469,city_hanoi,2022-Jan,0.6399693588,0.3162389532,0.351121779 +470,city_harare,2019-Jan,0.05113965261,0.6079969608,0.7127907344 +471,city_harare,2019-May,0.5499694149,0.7112740295,0.8657201091 +472,city_harare,2019-Sep,0.6705953617,0.8481746283,0.7781915229 +473,city_harare,2020-Jan,0.5448455637,0.761481783,0.3161047732 +474,city_harare,2020-May,0.02555600558,0.8157707267,0.05503697195 +475,city_harare,2020-Sep,0.627355327,0.5530698033,0.5992110078 +476,city_harare,2021-Jan,0.6049262896,0.527575273,0.5758586976 +477,city_harare,2021-May,0.4274464672,0.22878636,0.1059028406 +478,city_harare,2021-Sep,0.3598503868,0.4448781561,0.1940659583 +479,city_harare,2022-Jan,0.2554936994,0.04221218981,0.8283157554 +480,city_ankara,2019-Jan,0.5773037837,0.2326703291,0.5464883464 +481,city_ankara,2019-May,0.7535813143,0.4992113773,0.9809685139 +482,city_ankara,2019-Sep,0.5976797307,0.794414639,0.8742555726 +483,city_ankara,2020-Jan,0.08520386108,0.8773860695,0.3858137862 +484,city_ankara,2020-May,0.004111445517,0.8040046923,0.1569392782 +485,city_ankara,2020-Sep,0.2601369272,0.2083602167,0.8048114997 +486,city_ankara,2021-Jan,0.06646180846,0.1508074934,0.7621242697 +487,city_ankara,2021-May,0.2056833359,0.4014711821,0.5422262985 +488,city_ankara,2021-Sep,0.2211609615,0.7420965859,0.9192380563 +489,city_ankara,2022-Jan,0.5664276514,0.1191242719,0.5142831272 \ No newline at end of file diff --git a/run_tree/osx/arm64/debug/lumenarium b/run_tree/osx/arm64/debug/lumenarium index 61193e9..d3b2973 100755 Binary files a/run_tree/osx/arm64/debug/lumenarium and b/run_tree/osx/arm64/debug/lumenarium differ diff --git a/run_tree/raspi/arm64/debug/lumenarium b/run_tree/raspi/arm64/debug/lumenarium deleted file mode 100755 index 889171b..0000000 Binary files a/run_tree/raspi/arm64/debug/lumenarium and /dev/null differ diff --git a/src_v2/core/lumenarium_core_random.h b/src_v2/core/lumenarium_core_random.h index cffb7bd..ca5aaf3 100644 --- a/src_v2/core/lumenarium_core_random.h +++ b/src_v2/core/lumenarium_core_random.h @@ -18,12 +18,26 @@ random_series_create(u32 seed) } internal u32 -random_series_next(Random_Series* s) +random_from_u32(u32 input) { - u32 result = s->last_value; + u32 result = input; result ^= result << 13; result ^= result >> 17; result ^= result << 5; + return result; +} + +internal r32 +random_unilateral_from_u32(u32 input) +{ + r32 result = random_from_u32(input) / (r32)(0xFFFFFFFF); + return result; +} + +internal u32 +random_series_next(Random_Series* s) +{ + u32 result = random_from_u32(s->last_value); s->last_value = result; return result; } diff --git a/src_v2/editor/graphics/lumenarium_editor_opengl.h b/src_v2/editor/graphics/lumenarium_editor_opengl.h index c8b4264..094882b 100644 --- a/src_v2/editor/graphics/lumenarium_editor_opengl.h +++ b/src_v2/editor/graphics/lumenarium_editor_opengl.h @@ -11,7 +11,7 @@ void os_gl_no_error(); // type mocking // so far, this is only for platforms that won't be using the editor // but which still need to compile it. -#ifndef __gl_glext_h_ +#if !defined(GL_GLEXT_VERSION) typedef u32 GLsizei; typedef u32 GLuint; typedef u32 GLenum; diff --git a/src_v2/engine/lumenarium_engine.c b/src_v2/engine/lumenarium_engine.c index be11d7a..d52fdb3 100644 --- a/src_v2/engine/lumenarium_engine.c +++ b/src_v2/engine/lumenarium_engine.c @@ -32,22 +32,6 @@ en_frame(App_State* state) scratch_get(scratch); Assembly_Array assemblies = state->assemblies; - /////////////////////////////////////// - // Temp Pattern Simulation - - tt += 1.0f / 60.0f; - if (tt > 50) tt = 0; - - r32 hrange = 1; - r32 range = hrange * 2; - for (u32 i = 0; i < assemblies.len; i++) - { - Assembly_Pixel_Buffer pixels = assemblies.pixel_buffers[i]; - //grow_pattern(pixels); - //pattern_color(pixels, 0, 0, 0); - pattern_demo(pixels); - } - /////////////////////////////////////// // Output Data Output_Methods methods = state->output.methods; diff --git a/src_v2/lumenarium_first.c b/src_v2/lumenarium_first.c index e19460e..3441f9d 100644 --- a/src_v2/lumenarium_first.c +++ b/src_v2/lumenarium_first.c @@ -1,11 +1,11 @@ #include "lumenarium_first.h" -#include "user_space/user_space_incenter.cpp" +#include "user_space/user_space_incenter.c" void -sculpture_updated() +sculpture_updated(App_State* state, r32 scale, r32 led_size) { #if defined(PLATFORM_SUPPORTS_EDITOR) - ed_sculpture_updated(); + ed_sculpture_updated(state, scale, led_size); #endif } @@ -19,6 +19,8 @@ lumenarium_init(Editor_Desc* ed_desc) run_tests(); + //cvtcsv_convert(lit_str("./data/incenter_test_data_clean.csv")); + scratch_get(scratch); App_Init_Desc desc = incenter_get_init_desc(); // TODO(PS): make sure the values make sense in desc @@ -85,11 +87,11 @@ lumenarium_frame_prepare(App_State* state) internal void lumenarium_frame(App_State* state) { + if (has_flag(state->flags, AppState_RunUserSpace)) incenter_frame(state); en_frame(state); #if defined(PLATFORM_SUPPORTS_EDITOR) if (has_flag(state->flags, AppState_RunEditor)) ed_frame(state); #endif - if (has_flag(state->flags, AppState_RunUserSpace)) incenter_frame(state); } internal void diff --git a/src_v2/lumenarium_first.h b/src_v2/lumenarium_first.h index 362c115..8eecd85 100644 --- a/src_v2/lumenarium_first.h +++ b/src_v2/lumenarium_first.h @@ -100,7 +100,10 @@ struct Editor_Desc v2 init_window_dim; }; -void sculpture_updated(); +void sculpture_updated(App_State* state, r32 scale, r32 led_size); + +#include "user_space/user_space_incenter.h" +#include "../run_tree/data/incenter_test_data.c" #include "engine/lumenarium_engine_assembly.c" #include "engine/lumenarium_engine.c" @@ -115,4 +118,6 @@ void sculpture_updated(); # include "editor/lumenarium_editor.c" #endif +#include "tools/convert_csv.c" + #endif //LUMENARIUM_FIRST_H diff --git a/src_v2/lumenarium_types.h b/src_v2/lumenarium_types.h index 7937a14..b83427c 100644 --- a/src_v2/lumenarium_types.h +++ b/src_v2/lumenarium_types.h @@ -106,9 +106,9 @@ internal void memory_copy(u8* from, u8* to, u64 size); # define min(a,b) (a) > (b) ? (b) : (a) #endif -#define lerp(a,t,b) (a) + ((1.0f - (t)) * (b)) -#define clamp(r0,v,r1) min((r1),max((r0),(v))) -#define lerp_clamp(a,t,b) clamp((a),lerp((a),(t),(b)),(b)) +// #define lerp(a,t,b) (a) + ((1.0f - (t)) * (b)) +// #define clamp(r0,v,r1) min((r1),max((r0),(v))) +// #define lerp_clamp(a,t,b) clamp((a),lerp((a),(t),(b)),(b)) ////////////////////////////////////////////// // String diff --git a/src_v2/patterns/patterns_math.h b/src_v2/patterns/patterns_math.h index bdc1dcb..01e7d5e 100644 --- a/src_v2/patterns/patterns_math.h +++ b/src_v2/patterns/patterns_math.h @@ -31,6 +31,28 @@ pm_smoothstep_v3(v3 p) ///// vector extensions +v2 pm_lerp_v2(v2 a, r32 t, v2 b) { + return (v2){ + .x = lerp(a.x, t, b.x), + .y = lerp(a.y, t, b.y), + }; +} +v3 pm_lerp_v3(v3 a, r32 t, v3 b) { + return (v3){ + .x = lerp(a.x, t, b.x), + .y = lerp(a.y, t, b.y), + .z = lerp(a.z, t, b.z), + }; +} +v4 pm_lerp_v4(v4 a, r32 t, v4 b) { + return (v4){ + .x = lerp(a.x, t, b.x), + .y = lerp(a.y, t, b.y), + .z = lerp(a.z, t, b.z), + .w = lerp(a.w, t, b.w), + }; +} + v2 pm_abs_v2(v2 v) { return (v2){ .x = fabsf(v.x), .y = fabsf(v.y) }; } v3 pm_abs_v3(v3 v) { return (v3){ .x = fabsf(v.x), .y = fabsf(v.y), .z = fabsf(v.z) }; } v4 pm_abs_v4(v4 v) { return (v4){ .x = fabsf(v.x), .y = fabsf(v.y), .z = fabsf(v.z), .w = fabsf(v.w) }; } @@ -111,7 +133,7 @@ pm_hash_v3_to_r32(v3 p) v3 p0 = HMM_MultiplyVec3f(p, 0.3183099f); v3 p1 = HMM_AddVec3(p0, (v3){ 0.1f, 0.1f, 0.1f }); v3 p2 = pm_fract_v3(p1); - v3 p3 = HMM_MultiplyVec3f(p, 17.0f); + v3 p3 = HMM_MultiplyVec3f(p2, 17.0f); r32 r0 = fractf(p3.x * p3.y * p3.z * (p3.x + p3.y + p3.z)); return r0; } @@ -152,32 +174,65 @@ pm_noise_v3_to_r32(v3 p) r32 h6 = pm_hash_v3_to_r32(p_fl_6); r32 h7 = pm_hash_v3_to_r32(p_fl_7); - r32 result = lerp(f.z, - lerp( - lerp(h0, f.x, h1), - f.y, - lerp(h2, f.x, h3) - ), - lerp( - lerp(h4, f.x, h5), - f.y, - lerp(h6, f.x, h7) - ) - ); + r32 h0_1 = lerp(h0, f.x, h1); + r32 h2_3 = lerp(h2, f.x, h3); + r32 h4_5 = lerp(h4, f.x, h5); + r32 h6_7 = lerp(h6, f.x, h7); + r32 h01_23 = lerp(h0_1, f.y, h2_3); + r32 h45_67 = lerp(h4_5, f.y, h6_7); + // r32 result = lerp( + // lerp( + // lerp(h0, f.x, h1), + // f.y, + // lerp(h2, f.x, h3) + // ), + // f.z, + // lerp( + // lerp(h4, f.x, h5), + // f.y, + // lerp(h6, f.x, h7) + // ) + // ); + r32 result = lerp(h01_23, f.z, h45_67); assert(result >= 0 && result <= 1); return result; } internal r32 -pm_fmb_3d(v3 p, r32 t) -{ - v3 ts = (v3){t, t, t}; - r32 tsin = sinf(t); - v3 tv = (v3){tsin, tsin, tsin}; - v3 pp = p; +pm_fmb_3d(v3 x, r32 h) +{ + // r32 G = powf(2, -h); + // r32 f = 1.0f; + // r32 a = 1.0f; + // r32 t = 0.0f; + // for(s32 i = 0; i < 4; i++) + // { + // v3 xx = HMM_MultiplyVec3f(x, f); + // r32 n = pm_noise_v3_to_r32(xx); + // t += a * n; + // f *= 2.0f; + // a *= G; + // } + // return (t - .17f) / 1.2f; + + // float t = 0.0; + // for(s32 i = 0; i < 4; i++) + // { + // r32 f = powf(2.0, (r32)(i)); + // r32 a = powf(f, -h); + // r32 n = pm_noise_v3_to_r32( + // HMM_MultiplyVec3f(x, f) + // ); + // r32 ns = a * n; + // t += ns; + // } + // return t; + + v3 ts = (v3){h, h, h}; + v3 pp = x; r32 f = 0.0; - + v3 pp0 = HMM_AddVec3(pp, ts); v3 pp1 = HMM_SubtractVec3(pp, ts); @@ -185,8 +240,8 @@ pm_fmb_3d(v3 p, r32 t) f += 0.300000f * pm_noise_v3_to_r32(pp1); pp = HMM_MultiplyVec3f(pp, 2.03); f += 0.125000f * pm_noise_v3_to_r32(pp); pp = HMM_MultiplyVec3f(pp, 2.01); f += 0.062500f * pm_noise_v3_to_r32(pp0); pp = HMM_MultiplyVec3f(pp, 2.04); - r32 d = 0.9875f; + r32 d = 0.9875f; f = f / d; return f; } @@ -219,4 +274,47 @@ pm_fmb_3d(v3 p, r32 t) // return a.x / a.y; // } + +// Color ramps + +typedef struct { + r32 pct; + v3 color; +} Color_Ramp_Anchor; + +typedef struct { + Color_Ramp_Anchor anchors[8]; + u32 anchors_count; +} Color_Ramp; + +internal v3 +color_ramp_eval(Color_Ramp ramp, r32 pct) +{ + // find nearest two anchors + // TODO: do a binary search and we just have to assume that the anchors + // are in order from least to greatest + Color_Ramp_Anchor nearest_below = { .pct = 0, .color = BLACK_V4.xyz }; + Color_Ramp_Anchor nearest_above = { .pct = 1, .color = BLACK_V4.xyz }; + r32 dist_below = 1; + r32 dist_above = -1; + for (u32 i = 0; i < ramp.anchors_count; i++) { + Color_Ramp_Anchor anchor = ramp.anchors[i]; + r32 dist = pct - anchor.pct; + if (dist >= 0 && dist_below > dist) { + nearest_below = anchor; + dist_below = dist; + } + if (dist <= 0 && dist_above < dist) { + nearest_above = anchor; + dist_above = dist; + } + } + + // interpolate between them + r32 anchor_range = nearest_above.pct - nearest_below.pct; + r32 pct_remapped = (pct - nearest_below.pct) / anchor_range; + v3 result = pm_lerp_v3(nearest_below.color, pct_remapped, nearest_above.color); + return result; +} + #endif // PATTERNS_MATH_H \ No newline at end of file diff --git a/src_v2/tools/convert_csv.c b/src_v2/tools/convert_csv.c new file mode 100644 index 0000000..8ffa433 --- /dev/null +++ b/src_v2/tools/convert_csv.c @@ -0,0 +1,86 @@ +char* cvtcsv_header = "" +"typedef struct {\n" +" Incenter_City_Id city;\n" +" u32 year;\n" +" Incenter_Month_Id month;\n" +" r32 value_0;\n" +" r32 value_1;\n" +" r32 value_2;\n" +"} Incenter_Test_Data_Row;\n"; + +internal char* +cvtcsv_seek_comma(char* at) +{ + char* result = at; + while (*result && *result != ',') { result++; } + return result; +} + +internal void +cvtcsv_process_line(u32 line_number, char* start, char* end, FILE* out) +{ + char* col_end_0 = cvtcsv_seek_comma(start); + char* col_end_1 = cvtcsv_seek_comma(col_end_0 + 1); + char* col_end_2 = cvtcsv_seek_comma(col_end_1 + 1); + char* col_end_3 = cvtcsv_seek_comma(col_end_2 + 1); + char* col_end_4 = end - 1; // -1 because line endings are \r\n + + char* col_start_1 = col_end_0 + 1; + char* col_start_2 = col_end_1 + 1; + char* col_start_3 = col_end_2 + 1; + char* col_start_4 = col_end_3 + 1; + + s32 col_len_0 = (u32)(col_end_0 - start); + s32 col_len_1 = (u32)(col_end_1 - (col_end_0 + 1)); + s32 col_len_2 = (u32)(col_end_2 - (col_end_1 + 1)); + s32 col_len_3 = (u32)(col_end_3 - (col_end_2 + 1)); + s32 col_len_4 = (u32)(col_end_4 - (col_end_3 + 1)); + + fprintf(out, "[%d] = {", line_number); + fprintf(out, " %.*s, ", col_len_1, col_start_1); // city id + fprintf(out, " %.*s, ", col_len_2, col_start_2); // year + fprintf(out, " %.*s, ", col_len_3, col_start_3); // month + fprintf(out, " %.*sf, ", col_len_4, col_start_4); // value 1 + fprintf(out, " 0, 0 },\n"); +} + +internal void +cvtcsv_convert(String path) +{ + // this is hardcoded for a particular kind of csv + scratch_get(scratch); + File_Handle csv_file = os_file_open(path, FileAccess_Read, FileCreate_OpenExisting); + Data csv_data = os_file_read_all(csv_file, scratch.a); + String csv = (String){ + .str = csv_data.base, + .len = csv_data.size, + .cap = csv_data.size + }; + + FILE* out = fopen("./data/incenter_test_data.c", "wb"); + fprintf(out, "%s", cvtcsv_header); + fprintf(out, "static Incenter_Test_Data_Row test_data[] = {\n"); + + char* at = (char*)csv.str; + u32 col = 0; + u32 line = 0; + char* line_start = at; + while (*at != 0) + { + if (*at == ',') col += 1; + if (*at == '\n') { + cvtcsv_process_line(line, line_start, at, out); + line += 1; + col = 0; + line_start = at + 1; + } + at++; + } + cvtcsv_process_line(line, line_start, at, out); + fprintf(out, "};\nglobal u32 test_data_len = sizeof(test_data) / sizeof(test_data[0]);"); + printf("Done"); + + fclose(out); + + scratch_release(scratch); +} \ No newline at end of file diff --git a/src_v2/user_space/incenter_patterns.c b/src_v2/user_space/incenter_patterns.c index a72f097..48d48e4 100644 --- a/src_v2/user_space/incenter_patterns.c +++ b/src_v2/user_space/incenter_patterns.c @@ -9,6 +9,7 @@ curve_ease_in_out(r32 t) } #define incenter_pos_to_unit(p) (v4){ ((p.x / 6.0f) + 0.5f), ((p.y / 6.0f) + 0.5f), ((p.z / 6.0f) + 0.5f), 1.0f } +#define incenter_pos_to_bimodal(p) (v4){ (p.x / 3.0f), (p.y / 3.0f), (p.z / 3.0f), 1.0f } void test_pattern(Assembly_Pixel_Buffer pixels) @@ -66,12 +67,93 @@ assembly_pixel_add(Assembly_Pixel a, Assembly_Pixel b) return result; } +Assembly_Pixel +assembly_pixel_add_multi(u32 count, ...) +{ + Assembly_Pixel result = {}; + va_list args; + va_start(args, count); + for (u32 i = 0; i < count; i++) { + Assembly_Pixel p = va_arg(args, Assembly_Pixel); + result.r = u8_add_safe(result.r, p.r); + result.g = u8_add_safe(result.g, p.g); + result.b = u8_add_safe(result.b, p.b); + } + return result; +} + +Assembly_Pixel +assembly_pixel_scale(Assembly_Pixel p, r32 scale) +{ + Assembly_Pixel result = { + .r = (u8)(clamp(0, p.r * scale, 255)), + .g = (u8)(clamp(0, p.g * scale, 255)), + .b = (u8)(clamp(0, p.b * scale, 255)), + }; + return result; +} + +Assembly_Pixel +assembly_pixel_scale_u8(u32 r, u32 g, u32 b, r32 scale) +{ + Assembly_Pixel result = { + .r = (u8)(clamp(0, r * scale, 255)), + .g = (u8)(clamp(0, g * scale, 255)), + .b = (u8)(clamp(0, b * scale, 255)), + }; + return result; +} + +Assembly_Pixel +assembly_pixel_blend(Assembly_Pixel a, Assembly_Pixel b, r32 t) +{ + r32 rf = lerp((r32)a.r, t, (r32)b.r); + r32 gf = lerp((r32)a.g, t, (r32)b.g); + r32 bf = lerp((r32)a.b, t, (r32)b.b); + r32 rc = clamp(0, rf, 255); + r32 gc = clamp(0, gf, 255); + Assembly_Pixel result = { + .r = (u8)rc, + .g = (u8)clamp(0, gf, 255), + .b = (u8)clamp(0, bf, 255), + }; + return result; +} + +v3 +sun_center_for_pos(v4 p, v4 center, r32 radius, r32 falloff) +{ + v4 p_unit = incenter_pos_to_unit(p); + r32 d0 = HMM_LengthVec4(HMM_SubtractVec4(p_unit, center)); + r32 d1 = falloff - fabsf(d0 - (radius + (0.02f * sinf(tt)))); + r32 b = d1 / falloff; + + v3 result = {}; + if (b > 0) + { + v3 p0 = p.xyz; + v3 p1 = HMM_AddVec3(p0, (v3){ tt, -tt, 0 }); + + v3 color = { + .x = remap_r32(pm_fmb_3d(p0, tt), 0, 1, 0.5, 1), + .y = remap_r32(pm_noise_v3_to_r32(p1), 0, 1, 0, 0.3f), + .z = 0, + }; + result = HMM_MultiplyVec3f(color, b); + } + return result; +} + void sun_center(Assembly_Pixel_Buffer pixels, v4 center, r32 radius, r32 falloff) { for (u32 j = 0; j < pixels.len; j++) { - v4 p = incenter_pos_to_unit(pixels.positions[j]); + v3 color = sun_center_for_pos(pixels.positions[j], center, radius, falloff); + Assembly_Pixel ac = color_v3_to_assembly_pixel(color); + pixels.pixels[j] = assembly_pixel_add(ac, pixels.pixels[j]); + + #if 0 r32 d0 = HMM_LengthVec4(HMM_SubtractVec4(p, center)); r32 d1 = falloff - fabsf(d0 - (radius + (0.02f * sinf(tt)))); r32 b = d1 / falloff; @@ -92,18 +174,21 @@ sun_center(Assembly_Pixel_Buffer pixels, v4 center, r32 radius, r32 falloff) Assembly_Pixel color_1 = assembly_pixel_add(color_0, pixels.pixels[j]); pixels.pixels[j] = color_1; } + #endif } } void -grow_pattern_sphere_function(Assembly_Pixel_Buffer pixels, v4 center, r32 radius, r32 falloff) +grow_pattern_sphere_function(Assembly_Pixel_Buffer pixels, v4 center, r32 radius, r32 falloff, Assembly_Pixel inner_color) { for (u32 j = 0; j < pixels.len; j++) { v4 p = incenter_pos_to_unit(pixels.positions[j]); r32 d0 = HMM_LengthVec4(HMM_SubtractVec4(p, center)); - r32 d1 = falloff - fabsf(d0 - (radius + (0.02f * sinf(tt)))); - r32 b = d1 / falloff; + r32 d1 = fabsf(d0 - (radius + (0.02f * sinf(tt)))); + r32 d2 = falloff - d1; + r32 b = d2 / falloff; + r32 inner_b = d0 < (radius - falloff) ? 1 : 0; v3 color = { .x = 0.5f + 0.5f * sinf(p.x * r32_tau * 4.313f + tt * 1.3f), @@ -112,13 +197,15 @@ grow_pattern_sphere_function(Assembly_Pixel_Buffer pixels, v4 center, r32 radius }; v3 color_b = HMM_MultiplyVec3f(color, b); Assembly_Pixel color_0 = color_v3_to_assembly_pixel(color_b); - Assembly_Pixel color_1 = assembly_pixel_add(color_0, pixels.pixels[j]); + Assembly_Pixel color_inner = assembly_pixel_scale(inner_color, inner_b); + Assembly_Pixel color_1 = assembly_pixel_add_multi(3, color_0, color_inner, pixels.pixels[j]); + pixels.pixels[j] = color_1; } } void -grow_pattern(Assembly_Pixel_Buffer pixels, r32 time) +grow_pattern(Assembly_Pixel_Buffer pixels, r32 time, Assembly_Pixel inner_color) { v4 center = (v4){}; r32 radius = 0; @@ -135,15 +222,15 @@ grow_pattern(Assembly_Pixel_Buffer pixels, r32 time) { r32 t = (time - 6) / 4; center = (v4){ 0.5f, 0.5f, 0.5f, 1 }; - radius = 0.05f + curve_ease_in_out(t) * 0.4f; + radius = 0.05f + curve_ease_in_out(t) * 0.6f; falloff = 0.1f - (curve_ease_in_out(t) * 0.05f); } - grow_pattern_sphere_function(pixels, center, radius, falloff); + grow_pattern_sphere_function(pixels, center, radius, falloff, inner_color); } void -pattern_color(Assembly_Pixel_Buffer pixels, u8 r, u8 g, u8 b) +pattern_color(Assembly_Pixel_Buffer pixels, Assembly_Strip_Array strips, u8 r, u8 g, u8 b) { for (u32 j = 0; j < pixels.len; j++) { @@ -151,6 +238,19 @@ pattern_color(Assembly_Pixel_Buffer pixels, u8 r, u8 g, u8 b) pixels.pixels[j].g = g; pixels.pixels[j].b = b; } + +#if 0 + for (u32 strip_i = 0; strip_i < strips.len; strip_i++) + { + Assembly_Strip strip = strips.strips[strip_i]; + for (u32 led_i = 0; led_i < strip.pixels_len; led_i++) + { + u32 pixel_index = strip.pixels[led_i]; + pixels.pixels[pixel_index].r = 0; + pixels.pixels[pixel_index].g = 255; + } + } + #endif } void @@ -178,14 +278,225 @@ pattern_blink(Assembly_Pixel_Buffer pixels) pixels.pixels[i].b = 255; } } - grow_pattern_sphere_function(pixels, center, o, 0.01f); + grow_pattern_sphere_function(pixels, center, o, 0.01f, (Assembly_Pixel){}); +} + +u32 year = 2019; +r32 month = (r32)MONTH_Jan; + +s32 +test_data_find_nearest_row(Incenter_City_Id city, u32 year, Incenter_Month_Id month) +{ + s32 row_index = -1; + s32 nearest = 10000; + s32 months = (year * 12) + month; + for (s32 i = 0; i < test_data_len; i++) + { + Incenter_Test_Data_Row row = test_data[i]; + if (row.city != city) continue; + + s32 row_months = (row.year * 12) + row.month; + s32 months_offset = months - row_months; + if (months_offset < nearest && months_offset >= 0) { + nearest = months_offset; + row_index = i; + } + } + return row_index; +} + +global r32 city_last_values[city_count] = { -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, +}; +global r32 city_last_vel[city_count]; + +global Assembly_Pixel pixel_white = { 255, 255, 255 }; +global Assembly_Pixel pixel_black = { 0, 0, 0 }; + +void +pattern_test_data_scene_hombre(Assembly_Pixel_Buffer pixels, Assembly_Strip_Array strips, Assembly_Pixel color_before_a, Assembly_Pixel color_before_b, Assembly_Pixel color_at, Assembly_Pixel color_after) +{ + Incenter_Test_Data_Row* rows = test_data; + + r32 rand_min = 1000; + r32 rand_max = -1000; + + r32 month_delta = 1.0f / 24.0f; + if (month >= 11) { + s32 x = 5; + } + for (u32 city = 0; city < city_count; city++) + { + Assembly_Strip strip = strips.strips[city + 1]; + s32 data_row = test_data_find_nearest_row(city, year, month); + if (data_row < 0) continue; + s32 data_row_next = data_row + 1; + + Incenter_Test_Data_Row row_curr = test_data[data_row]; + r32 target_p = test_data[data_row].value_0; + if (data_row_next < test_data_len) { + Incenter_Test_Data_Row row_next = test_data[data_row_next]; + if (row_next.city == row_curr.city) + { + r32 row_curr_months = (r32)((row_curr.year * 12) + row_curr.month); + r32 row_next_months = (r32)((row_next.year * 12) + row_next.month); + r32 curr_months = (r32)(year * 12) + month; + + r32 row_month_delta = row_next_months - row_curr_months; + r32 delta_from_row_curr = curr_months - row_curr_months; + r32 theta = delta_from_row_curr / row_month_delta; + + target_p = lerp(row_curr.value_0 * 0.8f, theta, row_next.value_0 * 0.8f); + } + } + + r32 last_value = city_last_values[city]; + r32 dist_to_target = (target_p - last_value); + r32 towards_target = dist_to_target > 0 ? 1 : -1; + dist_to_target = fabsf(dist_to_target); + r32 force_approach = dist_to_target * towards_target * 0.1f; + city_last_vel[city] += force_approach; + + r32 max_vel = 0.01f; + r32 force_damping = -max(1 - dist_to_target, 0) * (city_last_vel[city]); + city_last_vel[city] = clamp(-1 * max_vel, city_last_vel[city] + force_damping, max_vel); + + city_last_values[city] += city_last_vel[city]; + + for (u32 led = 0; led < strip.pixels_len; led++) + { + r32 pct = (r32)(strip.pixels_len - led) / (r32)strip.pixels_len; + u32 led_index = strip.pixels[led]; + v4 led_pos = incenter_pos_to_unit(pixels.positions[led_index]); + + // max(-|pct -pct_r|, 0) ^ 10 + r32 d0 = (-1 * fabsf(city_last_values[city] - pct)) + 1; + r32 d1 = max(0, d0); + r32 d2 = powf(d1, 20); + r32 d2_inverse = 1 - d2; + v3 noise_pos0 = HMM_MultiplyVec3f(HMM_AddVec3(led_pos.xyz, (v3){237, 111 + tt, 923}), 16); + r32 at_noise = pm_fmb_3d(noise_pos0, 1); + at_noise = pm_smoothstep_r32(at_noise); + r32 d3 = d2; + + v3 noise_pos1 = HMM_MultiplyVec3f(HMM_AddVec3(led_pos.xyz, (v3){237, 111 + (tt * 0.3f), 923}), 16); + r32 inner_noise = pm_smoothstep_r32(pm_fmb_3d(noise_pos1, 1)); + + r32 before = pct < city_last_values[city] ? d2_inverse : 0; + r32 after = pct > city_last_values[city] ? d2_inverse : 0; + + Assembly_Pixel color_before_ = assembly_pixel_scale( + assembly_pixel_blend(color_before_a, color_before_b, at_noise * at_noise * at_noise), + before + ); + Assembly_Pixel color_after_ = assembly_pixel_scale(color_after, after - (0.8f * inner_noise)); + Assembly_Pixel color_at_ = assembly_pixel_scale(color_at, d3); + + pixels.pixels[led_index] = assembly_pixel_add_multi(3, color_before_, color_after_, color_at_); + } + } + + month += month_delta; + if (month > (r32)MONTH_Dec + 1) { + month = (r32)MONTH_Jan; + year += 1; + if (year > 2022) { + year = 2019; + } + } } void -pattern_demo(Assembly_Pixel_Buffer pixels) +pattern_test_data_scene(Assembly_Pixel_Buffer pixels, Assembly_Strip_Array strips) { - pattern_color(pixels, 255, 255, 255); // reset - return; + Incenter_Test_Data_Row* rows = test_data; + + r32 month_delta = 1.0f / 24.0f; + if (month >= 11) { + s32 x = 5; + } + for (u32 city = 0; city < city_count; city++) + { + Assembly_Strip strip = strips.strips[city + 1]; + s32 data_row = test_data_find_nearest_row(city, year, month); + if (data_row < 0) continue; + s32 data_row_next = data_row + 1; + + Incenter_Test_Data_Row row_curr = test_data[data_row]; + r32 percent_r = test_data[data_row].value_0; + r32 percent_g = test_data[data_row].value_1; + r32 percent_b = test_data[data_row].value_2; + if (data_row_next < test_data_len) { + Incenter_Test_Data_Row row_next = test_data[data_row_next]; + if (row_next.city == row_curr.city) + { + r32 row_curr_months = (r32)((row_curr.year * 12) + row_curr.month); + r32 row_next_months = (r32)((row_next.year * 12) + row_next.month); + r32 curr_months = (r32)(year * 12) + month; + + r32 row_month_delta = row_next_months - row_curr_months; + r32 delta_from_row_curr = curr_months - row_curr_months; + r32 theta = delta_from_row_curr / row_month_delta; + + percent_r = lerp(row_curr.value_0, theta, row_next.value_0); + percent_g = lerp(row_curr.value_1, theta, row_next.value_1); + percent_b = lerp(row_curr.value_2, theta, row_next.value_2); + } + } + + // printf("%d %f - %f\n", year, month, percent_r); + + for (u32 led = 0; led < strip.pixels_len; led++) + { + r32 pct = (r32)(strip.pixels_len - led) / (r32)strip.pixels_len; + u32 led_index = strip.pixels[led]; + + #if 0 + pixels.pixels[led_index] = (Assembly_Pixel){ + .r = 32, + .g = 32, + .b = 32, + }; + + if (pct <= percent_r) pixels.pixels[led_index].r = 255; + if (pct <= percent_g) pixels.pixels[led_index].g = 255; + if (pct <= percent_b) pixels.pixels[led_index].b = 255; + #else + if (pct > percent_r) { + pixels.pixels[led_index] = (Assembly_Pixel){ + .r = 32, + .g = 32, + .b = 32, + }; + } else { + r32 pct_dist = percent_r - pct; + r32 ramp = (percent_r - pct_dist) / percent_r; + ramp = ramp * ramp; + + pixels.pixels[led_index] = (Assembly_Pixel){ + .r = 32 + (128 * ramp), + .g = 128 + (128 * ramp), + .b = 255, + }; + } + #endif + } + } + + month += month_delta; + if (month > (r32)MONTH_Dec + 1) { + month = (r32)MONTH_Jan; + year += 1; + if (year > 2022) { + year = 2019; + } + } +} + +void +pattern_demo(Assembly_Pixel_Buffer pixels, Assembly_Strip_Array strips) +{ + // clear previous frame + pattern_color(pixels, strips, 0, 0, 0); r32 sun_limit = 5; if (tt < sun_limit) @@ -200,9 +511,107 @@ pattern_demo(Assembly_Pixel_Buffer pixels) } pattern_blink(pixels); + Assembly_Pixel data_less_than_color_a = { .r = 32, .g = 128, .b = 255 }; + Assembly_Pixel data_less_than_color_b = { .r = 32, .g = 255, .b = 128 }; + Assembly_Pixel data_border_color = { .r = 255, .g = 255, .b = 255 }; + Assembly_Pixel data_greater_than_color = { .r = 64, .g = 0, .b = 0 }; + r32 grow_delay = 2; - if (tt > grow_delay) + if (tt > grow_delay && tt < grow_delay + 10) { - grow_pattern(pixels, tt - grow_delay); + grow_pattern(pixels, tt - grow_delay, data_greater_than_color); + } + + if (tt >= grow_delay + 9) { + pattern_test_data_scene_hombre(pixels, strips, data_less_than_color_a, data_less_than_color_b, data_border_color, data_greater_than_color); + } +} + + +//////////// MOOD BOARD DEMOS //////////// + +global Color_Ramp aurora_ramp = { + .anchors = { + [0] = { .pct = 0, .color = { 0, 0, 0 } }, + [1] = { .pct = .4f, .color = { 0, 0, 0 } }, + [2] = { .pct = .55f, .color = { 176.f / 255.f, 65.f / 255.f, 36.f / 255.f } }, + [3] = { .pct = .7f, .color = { 237.f / 255.f, 201.f / 255.f, 138.f / 255.f } }, + [4] = { .pct = .80f, .color = { 49.f / 255.f, 156.f / 255.f, 255.f / 255.f } }, + [5] = { .pct = 1.0f, .color = { 49.f / 255.f, 156.f / 255.f, 255.f / 255.f } }, + }, + .anchors_count = 5, +}; + +global Color_Ramp cities_ramp = { + .anchors = { + [0] = { .pct = 0, .color = { 0, 0, 0 } }, + [1] = { .pct = .75f, .color = { 0, 0, 0 } }, + [2] = { .pct = 1, .color = { 255.f / 255.f, 194.f / 255.f, 86.f / 255.5 } }, + }, + .anchors_count = 3 +}; + +void +pattern_demo_1(Assembly_Pixel_Buffer pixels, Assembly_Strip_Array strips) +{ + for (u32 j = 0; j < pixels.len; j++) + { + v4 p = pixels.positions[j]; + v4 p_unit = incenter_pos_to_unit(p); + v3 p_offset = HMM_AddVec3(p.xyz, (v3){ 213.145f, 99.321f, 71.3f }); + v3 p_scaled = HMM_MultiplyVec3f(p_offset, 2); + r32 v = pm_fmb_3d(p_scaled, tt); + r32 vv = pm_smoothstep_r32(v); + v3 color = color_ramp_eval(aurora_ramp, vv); + pixels.pixels[j] = color_v3_to_assembly_pixel(color); + } +} + +void +pattern_demo_2(Assembly_Pixel_Buffer pixels, Assembly_Strip_Array strips) +{ + for (u32 city = 0; city < city_count; city++) + { + Assembly_Strip strip = strips.strips[city + 1]; + for (u32 led = 0; led < strip.pixels_len; led++) + { + r32 pct = (r32)(strip.pixels_len - led) / (r32)strip.pixels_len; + u32 led_index = strip.pixels[led]; + + v3 color = color_ramp_eval(cities_ramp, 1 - pct); + pixels.pixels[led_index] = color_v3_to_assembly_pixel(color); + } + } +} + +// sunrise +void +pattern_demo_3(Assembly_Pixel_Buffer pixels, Assembly_Strip_Array strips) +{ + v3 sun_dir = (v3){ sinf(tt), 0, cosf(tt) }; + for (u32 city = 0; city < city_count; city++) + { + Assembly_Strip strip = strips.strips[city + 1]; + for (u32 led = 0; led < strip.pixels_len; led++) + { + r32 pct = (r32)(strip.pixels_len - led) / (r32)strip.pixels_len; + u32 led_index = strip.pixels[led]; + + v3 cities_color = color_ramp_eval(cities_ramp, 1 - pct); + v4 p = pixels.positions[led_index]; + v4 p_unit = incenter_pos_to_bimodal(p); + r32 d = HMM_DotVec3(p_unit.xyz, sun_dir); + r32 dc = clamp(0, d, 1); + r32 ds = clamp(0, -1 * d, 1); + cities_color = HMM_MultiplyVec3f(cities_color, dc); + + v3 sky_color = { 49.f / 255.f, 156.f / 255.f, 255.f / 255.f }; + sky_color = HMM_MultiplyVec3f(sky_color, ds); + v3 day_color = HMM_AddVec3(sky_color, cities_color); + + v3 sun_color = sun_center_for_pos(pixels.positions[led_index], (v4){0.5f, 0.5f, 0.5f, 1}, .1f, .1f); + v3 color = HMM_AddVec3(day_color, sun_color); + pixels.pixels[led_index] = color_v3_to_assembly_pixel(color); + } } } \ No newline at end of file diff --git a/src_v2/user_space/user_space_incenter.c b/src_v2/user_space/user_space_incenter.c new file mode 100644 index 0000000..fd8a3ef --- /dev/null +++ b/src_v2/user_space/user_space_incenter.c @@ -0,0 +1,147 @@ + +internal App_Init_Desc +incenter_get_init_desc() +{ + App_Init_Desc result = {}; + result.assembly_cap = 4; + return result; +} + +#define INCENTER_METER 1.0f +#define INCENTER_FOOT 0.3048f +#define INCENTER_METERS(count) (count) * INCENTER_METER +#define INCENTER_FEET(count) (count) * INCENTER_FOOT +#define INCENTER_PER_METER(count) INCENTER_METER / (r32)(count) + +internal void +incenter_init(App_State* state) +{ + // create a fake sculpture + Assembly_Handle ah = assembly_add(&state->assemblies, lit_str("test"), 7043, city_count + 1); + //Assembly_Handle ah = assembly_add(&state->assemblies, lit_str("test"), 20000, 150); + + scratch_get(scratch); + Allocator* s = scratch.a; + + v3 start_p = (v3){0, 0, 0}; + + Assembly_Strip* vertical_strip = assembly_add_strip(&state->assemblies, ah, 123); + assembly_strip_create_leds( + &state->assemblies, + ah, + vertical_strip, + start_p, + (v3){0, INCENTER_FEET(-4.5f), 0}, + 123 + ); + + r32 radius = INCENTER_FEET(10); + + Random_Series rand = random_series_create(hash_djb2_cstr_to_u32("slfsaassdjf")); + u32 i = 0; + while (i < city_count) + //for (u32 i = 0; i < 40; i++) + { + Incenter_City_Desc city = city_descs[i]; + +#if 0 + // convert lat/lon (degrees) to theta/phi (radians) + // lat is in the range -90deg to 90deg + // lon is in the range -180deg to 180deg + // we want both in the range 0 to 2 + r32 theta = ((city.lat + 90) / 180.0f) * r32_pi; + r32 phi = ((city.lon + 180) / 360.0f) * r32_tau; + + printf("%s - \t\t%f %f -> \t\t%f %f\n", + city_strings[city.id], + city.lat, city.lon, + theta, phi + ); +#else + r32 theta = random_series_next_unilateral(&rand) * r32_tau; + r32 phi = random_series_next_unilateral(&rand) * r32_tau; +#endif + + // spherical to cartesian conversion + v3 end_p = { + radius * sinf(phi) * cosf(theta), + radius * sinf(phi) * sinf(theta), + radius * cosf(phi) + }; + + r32 down = HMM_DotVec3(HMM_NormalizeVec3(end_p), (v3){0, -1, 0}); + //if (down > 0.7f || down < -0.9f) continue; + + Assembly_Strip* strip = assembly_add_strip(&state->assemblies, ah, 123); + strip->output_kind = OutputData_NetworkSACN; + strip->sacn_universe = city.sacn_universe; + + assembly_strip_create_leds(&state->assemblies, ah, strip, start_p, end_p, 123); + i++; + } + + r32 rad = 0.05f; + sculpture_updated(state, 5, rad); + scratch_release(scratch); +} + +internal void +incenter_frame_prepare(App_State* state) +{ + +} + +global u32 pattern_sel = 2; + +internal void +incenter_frame(App_State* state) +{ + Assembly_Array assemblies = state->assemblies; + + if (input_key_is_down(state->input_state, KeyCode_0)) { tt = 0; pattern_sel = 0; } + if (input_key_is_down(state->input_state, KeyCode_1)) { tt = 0; pattern_sel = 1; } + if (input_key_is_down(state->input_state, KeyCode_2)) { tt = 0; pattern_sel = 2; } + if (input_key_is_down(state->input_state, KeyCode_3)) { tt = 0; pattern_sel = 3; } + if (input_key_is_down(state->input_state, KeyCode_4)) { tt = 0; pattern_sel = 4; } + if (input_key_is_down(state->input_state, KeyCode_5)) { tt = 0; pattern_sel = 5; } + + /////////////////////////////////////// + // Temp Pattern Simulation + + tt += 1.0f / 60.0f; + if (tt > 50) tt = 0; + + switch (pattern_sel) { + case 0: { pattern_color(assemblies.pixel_buffers[0], assemblies.strip_arrays[0], 255, 255, 255); } break; + case 1: { pattern_demo_1(assemblies.pixel_buffers[0], assemblies.strip_arrays[0]); } break; + case 2: { pattern_demo_2(assemblies.pixel_buffers[0], assemblies.strip_arrays[0]); } break; + case 3: { pattern_demo_3(assemblies.pixel_buffers[0], assemblies.strip_arrays[0]); } break; + default: { pattern_demo (assemblies.pixel_buffers[0], assemblies.strip_arrays[0]); } break; + } + +#if 0 + r32 hrange = 1; + r32 range = hrange * 2; + for (u32 i = 0; i < assemblies.len; i++) + { + Assembly_Pixel_Buffer pixels = assemblies.pixel_buffers[i]; + //grow_pattern(pixels); + //pattern_color(pixels, 0, 0, 0); + pattern_demo(pixels, assemblies.strip_arrays[i]); + // pattern_test_data_scene_hombre( + // pixels, + // assemblies.strip_arrays[i], + // (Assembly_Pixel){ .r = 32, .g = 128, .b = 255 }, + // (Assembly_Pixel){ .r = 255, .g = 200, .b = 32 }, + // (Assembly_Pixel){ .r = 255, .g = 255, .b = 255 }, + // (Assembly_Pixel){ .r = 64, .g = 0, .b = 0 } + // ); + } +#endif +} + +internal void +incenter_cleanup(App_State* state) +{ + +} \ No newline at end of file diff --git a/src_v2/user_space/user_space_incenter.cpp b/src_v2/user_space/user_space_incenter.cpp deleted file mode 100644 index a9a12cb..0000000 --- a/src_v2/user_space/user_space_incenter.cpp +++ /dev/null @@ -1,89 +0,0 @@ - -internal App_Init_Desc -incenter_get_init_desc() -{ - App_Init_Desc result = {}; - result.assembly_cap = 4; - return result; -} - -#define INCENTER_METER 1.0f -#define INCENTER_FOOT 0.3048f -#define INCENTER_METERS(count) (count) * INCENTER_METER -#define INCENTER_FEET(count) (count) * INCENTER_FOOT -#define INCENTER_PER_METER(count) INCENTER_METER / (r32)(count) - -internal void -incenter_init(App_State* state) -{ - // create a fake sculpture - Assembly_Handle ah = assembly_add(&state->assemblies, lit_str("test"), 5043, 41); - //Assembly_Handle ah = assembly_add(&state->assemblies, lit_str("test"), 20000, 150); - - scratch_get(scratch); - Allocator* s = scratch.a; - - v3 start_p = (v3){0, 0, 0}; - - Assembly_Strip* vertical_strip = assembly_add_strip(&state->assemblies, ah, 123); - assembly_strip_create_leds( - &state->assemblies, - ah, - vertical_strip, - start_p, - (v3){0, INCENTER_FEET(-4.5f), 0}, - 123 - ); - - r32 radius = INCENTER_FEET(10); - - Random_Series rand = random_series_create(hash_djb2_cstr_to_u32("slfsaassdjf")); - u32 i = 0; - while (i < 40) - //for (u32 i = 0; i < 40; i++) - { - r32 theta = random_series_next_unilateral(&rand) * r32_tau; - r32 phi = random_series_next_unilateral(&rand) * r32_tau; - // spherical to cartesian conversion - v3 end_p = { - radius * sinf(phi) * cosf(theta), - radius * sinf(phi) * sinf(theta), - radius * cosf(phi) - }; - - r32 down = HMM_DotVec3(HMM_NormalizeVec3(end_p), (v3){0, -1, 0}); - if (down > 0.7f || down < -0.9f) continue; - - Assembly_Strip* strip = assembly_add_strip(&state->assemblies, ah, 123); - strip->output_kind = OutputData_NetworkSACN; - strip->sacn_universe = i; - - - - - assembly_strip_create_leds(&state->assemblies, ah, strip, start_p, end_p, 123); - i++; - } - - r32 rad = 0.05f; - sculpture_updated(state, 5, rad); - scratch_release(scratch); -} - -internal void -incenter_frame_prepare(App_State* state) -{ - -} - -internal void -incenter_frame(App_State* state) -{ - -} - -internal void -incenter_cleanup(App_State* state) -{ - -} \ No newline at end of file diff --git a/src_v2/user_space/user_space_incenter.h b/src_v2/user_space/user_space_incenter.h new file mode 100644 index 0000000..95af009 --- /dev/null +++ b/src_v2/user_space/user_space_incenter.h @@ -0,0 +1,447 @@ +typedef struct +{ + u32* city_to_strip_index; + u32 city_to_strip_index_len; +} Incenter_State; + +enum { + city_black_rock = 0, + + city_kiev = 1, + city_buenos_aires, + city_canberra, + city_yerevan, + city_bishkek, + city_dhaka, + city_sucre, + city_brasilia, + city_ottawa, + city_santiago, + city_beijing, + city_bogota, + city_nicosia, + city_quito, + city_cairo, + city_addis_ababa, + city_berlin, + city_athens, + city_guatemala_city, + city_jakarta, + city_tehran, + city_baghdad, + city_tokyo, + city_amman, + city_nairobi, + city_beirut, + city_tripoli, + city_kuala_lumpur, + city_male, + city_mexico_city, + city_ulan_bator, + city_rabat, + city_amsterdam, + city_wellington, + city_managua, + city_abuja, + city_islamabad, + city_lima, + city_bucharest, + city_moscow, + city_belgrade, + city_singapore, + city_seoul, + city_tunis, + city_bangkok, + city_washington_dc, + city_hanoi, + city_harare, + city_ankara, + + city_count, +}; +typedef u32 Incenter_City_Id; + +enum { + MONTH_Jan, + MONTH_Feb, + MONTH_Mar, + MONTH_Apr, + MONTH_May, + MONTH_Jun, + MONTH_Jul, + MONTH_Aug, + MONTH_Sep, + MONTH_Oct, + MONTH_Nov, + MONTH_Dec, +}; +typedef u32 Incenter_Month_Id; + +typedef struct +{ + Incenter_City_Id id; + + r32 lat; + r32 lon; + + u32 sacn_universe; + + // TODO: Some way to access this cities strip of leds +} Incenter_City_Desc; + +global Incenter_City_Desc city_descs[] = { + [city_kiev] = { + .id = city_kiev, + .lat = 50.4501f, + .lon = 30.523399f, + .sacn_universe = city_kiev, + }, + [city_buenos_aires] = { + .id = city_buenos_aires, + .lat = -58.381593f, + .lon = -34.603723f, + .sacn_universe = city_buenos_aires, + }, + [city_canberra] = { + .id = city_canberra, + .lat = 149.128684f, + .lon = -35.282000f, + .sacn_universe = city_canberra, + }, + [city_yerevan] = { + .id = city_yerevan, + .lat = 44.516667f, + .lon = 40.183333f, + .sacn_universe = city_yerevan, + }, + [city_bishkek] = { + .id = city_bishkek, + .lat = 74.612222f, + .lon = 42.874722f, + .sacn_universe = city_bishkek, + }, + [city_dhaka] = { + .id = city_dhaka, + .lat = 90.412518f, + .lon = 23.810332f, + .sacn_universe = city_dhaka, + }, + [city_sucre] = { + .id = city_sucre, + .lat = -65.261961f, + .lon = -19.019585f, + .sacn_universe = city_sucre, + }, + [city_brasilia] = { + .id = city_brasilia, + .lat = -75.697193f, + .lon = 45.421530f, + .sacn_universe = city_brasilia, + }, + [city_ottawa] = { + .id = city_ottawa, + .lat = -75.697193f, + .lon = 45.421530f, + .sacn_universe = city_ottawa, + }, + [city_santiago] = { + .id = city_santiago, + .lat = -70.641997f, + .lon = -33.469120f, + .sacn_universe = city_santiago, + }, + [city_beijing] = { + .id = city_beijing, + .lat = 116.407395f, + .lon = 39.904211f, + .sacn_universe = city_beijing, + }, + [city_bogota] = { + .id = city_bogota, + .lat = 33.382988f, + .lon = 35.188336f, + .sacn_universe = city_bogota, + }, + [city_nicosia] = { + .id = city_nicosia, + .lat = 33.382988f, + .lon = 35.188336f, + .sacn_universe = city_nicosia, + }, + [city_quito] = { + .id = city_quito, + .lat = -78.467838f, + .lon = -0.180653f, + .sacn_universe = city_quito, + }, + [city_cairo] = { + .id = city_cairo, + .lat = 31.235712f, + .lon = 30.044420f, + .sacn_universe = city_cairo, + }, + [city_addis_ababa] = { + .id = city_addis_ababa, + .lat = 38.757761f, + .lon = 8.980603f, + .sacn_universe = city_addis_ababa, + }, + [city_berlin] = { + .id = city_berlin, + .lat = 13.404954f, + .lon = 52.520007f, + .sacn_universe = city_berlin, + }, + [city_athens] = { + .id = city_athens, + .lat = 23.729360f, + .lon = 37.983917f, + .sacn_universe = city_athens, + }, + [city_guatemala_city] = { + .id = city_guatemala_city, + .lat = -90.506882f, + .lon = 14.634915f, + .sacn_universe = city_guatemala_city, + }, + [city_jakarta] = { + .id = city_jakarta, + .lat = 106.845599f, + .lon = -6.208763f, + .sacn_universe = city_jakarta, + }, + [city_tehran] = { + .id = city_tehran, + .lat = 35.69439f, + .lon = 51.42151f, + .sacn_universe = city_tehran, + }, + [city_baghdad] = { + .id = city_baghdad, + .lat = 33.3302946f, + .lon = 44.391758f, + .sacn_universe = city_baghdad, + }, + [city_tokyo] = { + .id = city_tokyo, + .lat = 35.689506f, + .lon = 139.6917f, + .sacn_universe = city_tokyo, + }, + [city_amman] = { + .id = city_amman, + .lat = 35.945695f, + .lon = 31.956578f, + .sacn_universe = city_amman, + }, + [city_nairobi] = { + .id = city_nairobi, + .lat = 36.821946f, + .lon = -1.292066f, + .sacn_universe = city_nairobi, + }, + [city_beirut] = { + .id = city_beirut, + .lat = 35.495479f, + .lon = 33.888629f, + .sacn_universe = city_beirut, + }, + [city_tripoli] = { + .id = city_tripoli, + .lat = 13.191338f, + .lon = 32.887209f, + .sacn_universe = city_tripoli, + }, + [city_kuala_lumpur] = { + .id = city_kuala_lumpur, + .lat = 101.686855f, + .lon = 3.139003f, + .sacn_universe = city_kuala_lumpur, + }, + [city_male] = { + .id = city_male, + .lat = 4.1750931f, + .lon = 73.5097742f, + .sacn_universe = city_male, + }, + [city_mexico_city] = { + .id = city_mexico_city, + .lat = -99.133208f, + .lon = 19.432608f, + .sacn_universe = city_mexico_city, + }, + [city_ulan_bator] = { + .id = city_ulan_bator, + .lat = 106.905744f, + .lon = 47.886399f, + .sacn_universe = city_ulan_bator, + }, + [city_rabat] = { + .id = city_rabat, + .lat = -6.849813f, + .lon = 33.971590f, + .sacn_universe = city_rabat, + }, + [city_amsterdam] = { + .id = city_amsterdam, + .lat = 4.895168f, + .lon = 52.370216f, + .sacn_universe = city_amsterdam, + }, + [city_wellington] = { + .id = city_wellington, + .lat = 174.776236f, + .lon = 41.286460f, + .sacn_universe = city_wellington, + }, + [city_managua] = { + .id = city_managua, + .lat = -86.251389f, + .lon = 12.136389f, + .sacn_universe = city_managua, + }, + [city_abuja] = { + .id = city_abuja, + .lat = 7.483333f, + .lon = 9.066667f, + .sacn_universe = city_abuja, + }, + [city_islamabad] = { + .id = city_islamabad, + .lat = 73.093146f, + .lon = 33.729388f, + .sacn_universe = city_islamabad, + }, + [city_lima] = { + .id = city_lima, + .lat = -77.042793f, + .lon = -12.046374f, + .sacn_universe = city_lima, + }, + [city_bucharest] = { + .id = city_bucharest, + .lat = 26.102538f, + .lon = 44.426767f, + .sacn_universe = city_bucharest, + }, + [city_moscow] = { + .id = city_moscow, + .lat = 37.617300f, + .lon = 55.755826f, + .sacn_universe = city_moscow, + }, + [city_belgrade] = { + .id = city_belgrade, + .lat = 20.448922f, + .lon = 44.786568f, + .sacn_universe = city_belgrade, + }, + [city_singapore] = { + .id = city_singapore, + .lat = 103.819836f, + .lon = 1.352083f, + .sacn_universe = city_singapore, + }, + [city_seoul] = { + .id = city_seoul, + .lat = 126.977969f, + .lon = 37.566535f, + .sacn_universe = city_seoul, + }, + [city_tunis] = { + .id = city_tunis, + .lat = 9.537499f, + .lon = 33.886917f, + .sacn_universe = city_tunis, + }, + [city_bangkok] = { + .id = city_bangkok, + .lat = 100.501765f, + .lon = 13.756331f, + .sacn_universe = city_bangkok, + }, + [city_washington_dc] = { + .id = city_washington_dc, + .lat = 38.907192f, + .lon = -77.036873f, + .sacn_universe = city_washington_dc, + }, + [city_hanoi] = { + .id = city_hanoi, + .lat = 21.027763f, + .lon = 105.834160f, + .sacn_universe = city_hanoi, + }, + [city_harare] = { + .id = city_harare, + .lat = -17.825167f, + .lon = 31.033510f, + .sacn_universe = city_harare, + }, + [city_ankara] = { + .id = city_ankara, + .lat = 39.933365f, + .lon = 32.859741f, + .sacn_universe = city_ankara, + }, + + [city_black_rock] = { + .id = city_black_rock, + .lat = -90.0f, + .lon = 0, + .sacn_universe = city_black_rock, + }, +}; + +global char* city_strings[] = { + "city_black_rock", + "city_kiev", + "city_buenos_aires", + "city_canberra", + "city_yerevan", + "city_bishkek", + "city_dhaka", + "city_sucre", + "city_brasilia", + "city_ottawa", + "city_santiago", + "city_beijing", + "city_bogota", + "city_nicosia", + "city_quito", + "city_cairo", + "city_addis_ababa", + "city_berlin", + "city_athens", + "city_guatemala_city", + "city_jakarta", + "city_tehran", + "city_baghdad", + "city_tokyo", + "city_amman", + "city_nairobi", + "city_beirut", + "city_tripoli", + "city_kuala_lumpur", + "city_male", + "city_mexico_city", + "city_ulan_bator", + "city_rabat", + "city_amsterdam", + "city_wellington", + "city_managua", + "city_abuja", + "city_islamabad", + "city_lima", + "city_bucharest", + "city_moscow", + "city_belgrade", + "city_singapore", + "city_seoul", + "city_tunis", + "city_bangkok", + "city_washington_dc", + "city_hanoi", + "city_harare", + "city_ankara", +}; \ No newline at end of file