sapor 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. checksums.yaml +7 -0
  2. data/Area Class Diagram.dia +0 -0
  3. data/Area Class Diagram.png +0 -0
  4. data/Class Diagram.dia +0 -0
  5. data/Class Diagram.png +0 -0
  6. data/Example-Catalonia.md +361 -0
  7. data/Example-Flanders.md +486 -0
  8. data/Example-Greece.md +25 -0
  9. data/Example-Oslo.md +678 -0
  10. data/Example-UnitedKingdom-Referendum.md +132 -0
  11. data/Examples.md +15 -0
  12. data/LICENSE +674 -0
  13. data/README.md +103 -0
  14. data/Rakefile +18 -0
  15. data/Technical Documentation.md +14 -0
  16. data/bin/create_installation_package.sh +49 -0
  17. data/bin/install.sh +45 -0
  18. data/bin/sapor.rb +24 -0
  19. data/bin/sapor.sh +106 -0
  20. data/data/hu/hungary-2014.txt +1680 -0
  21. data/data/hu/hungary_2014_screen_scraper.rb +48 -0
  22. data/data/hu/hungary_2014_to_psv.rb +80 -0
  23. data/data/hu/index-2014.txt +106 -0
  24. data/data/pl/2015-gl-lis-okr.csv +42 -0
  25. data/data/pl/poland_2015_to_psv.rb +79 -0
  26. data/data/pl/poland_2015_to_psv_with_ko_and_rsw.rb +94 -0
  27. data/data/pl/poland_2015_to_psv_with_ko_konf_kp_l_and_zp.rb +100 -0
  28. data/data/pl/poland_2015_to_psv_with_ko_sld_and_wi.rb +92 -0
  29. data/data/pl/poland_2015_to_psv_with_sld.rb +84 -0
  30. data/data/pl/poland_2015_to_psv_with_sld_and_wi.rb +85 -0
  31. data/data/uk/inject_ukip_2015_as_brexit_2019_in_2017.rb +54 -0
  32. data/data/uk/united_kingdom_2015.txt +651 -0
  33. data/data/uk/united_kingdom_2015_to_psv.rb +104 -0
  34. data/data/uk/united_kingdom_2017.txt +651 -0
  35. data/data/uk/united_kingdom_2017_to_psv.rb +104 -0
  36. data/data/uk/united_kingdom_2017_to_psv_with_brexit_and_chuk.rb +113 -0
  37. data/data/uk/united_kingdom_2017_to_psv_with_tig.rb +111 -0
  38. data/lib/sapor.rb +150 -0
  39. data/lib/sapor/binomials_cache.rb +45 -0
  40. data/lib/sapor/combinations_distribution.rb +222 -0
  41. data/lib/sapor/denominators.rb +67 -0
  42. data/lib/sapor/dichotomies.rb +138 -0
  43. data/lib/sapor/dichotomy.rb +164 -0
  44. data/lib/sapor/first_past_the_post.rb +82 -0
  45. data/lib/sapor/largest_remainder.rb +118 -0
  46. data/lib/sapor/log4r_logger.rb +49 -0
  47. data/lib/sapor/log_facade.rb +40 -0
  48. data/lib/sapor/multi_district_leveled_proportional.rb +64 -0
  49. data/lib/sapor/multi_district_proportional.rb +123 -0
  50. data/lib/sapor/multi_district_variable_threshold_proportional.rb +128 -0
  51. data/lib/sapor/number_formatter.rb +45 -0
  52. data/lib/sapor/options.rb +73 -0
  53. data/lib/sapor/poll.rb +286 -0
  54. data/lib/sapor/polychotomy.rb +200 -0
  55. data/lib/sapor/pseudorandom_multirange_enumerator.rb +87 -0
  56. data/lib/sapor/referendum_polychotomy.rb +165 -0
  57. data/lib/sapor/regional_data/area.rb +82 -0
  58. data/lib/sapor/regional_data/austria.rb +84 -0
  59. data/lib/sapor/regional_data/belgium-brussels-2014.psv +46 -0
  60. data/lib/sapor/regional_data/belgium-brussels-20190526.psv +33 -0
  61. data/lib/sapor/regional_data/belgium-flanders-2014.psv +80 -0
  62. data/lib/sapor/regional_data/belgium-flanders-20190526.psv +74 -0
  63. data/lib/sapor/regional_data/belgium-wallonia-2014.psv +114 -0
  64. data/lib/sapor/regional_data/belgium-wallonia-20190526.psv +93 -0
  65. data/lib/sapor/regional_data/belgium.rb +97 -0
  66. data/lib/sapor/regional_data/belgium_brussels.rb +62 -0
  67. data/lib/sapor/regional_data/belgium_flanders.rb +64 -0
  68. data/lib/sapor/regional_data/belgium_wallonia.rb +63 -0
  69. data/lib/sapor/regional_data/catalonia-2012-2015.psv +100 -0
  70. data/lib/sapor/regional_data/catalonia-2012.psv +87 -0
  71. data/lib/sapor/regional_data/catalonia-2015-jxcat.psv +68 -0
  72. data/lib/sapor/regional_data/catalonia-2015-no-jxsi.psv +68 -0
  73. data/lib/sapor/regional_data/catalonia-2015.psv +63 -0
  74. data/lib/sapor/regional_data/catalonia-jxcat.rb +109 -0
  75. data/lib/sapor/regional_data/catalonia-no-jxsi.rb +96 -0
  76. data/lib/sapor/regional_data/catalonia.rb +96 -0
  77. data/lib/sapor/regional_data/denmark-20150618-with-e-and-p.psv +164 -0
  78. data/lib/sapor/regional_data/denmark-20150618-with-e.psv +153 -0
  79. data/lib/sapor/regional_data/denmark-20150618-with-p.psv +153 -0
  80. data/lib/sapor/regional_data/denmark-20150618.psv +142 -0
  81. data/lib/sapor/regional_data/denmark.rb +128 -0
  82. data/lib/sapor/regional_data/denmark_with_e.rb +128 -0
  83. data/lib/sapor/regional_data/denmark_with_e_and_p.rb +128 -0
  84. data/lib/sapor/regional_data/denmark_with_p.rb +128 -0
  85. data/lib/sapor/regional_data/estonia.rb +88 -0
  86. data/lib/sapor/regional_data/european-union-great-britain-20140522-brexit-chuk.psv +172 -0
  87. data/lib/sapor/regional_data/european-union-great-britain-20140522.psv +146 -0
  88. data/lib/sapor/regional_data/european-union-great-britain-20190523.psv +141 -0
  89. data/lib/sapor/regional_data/european-union-ireland-2014-ia-ri-sd.psv +64 -0
  90. data/lib/sapor/regional_data/european-union-ireland-2014-ia-sd.psv +60 -0
  91. data/lib/sapor/regional_data/european-union-ireland-2014-ia.psv +56 -0
  92. data/lib/sapor/regional_data/european-union-ireland-2014-sd.psv +56 -0
  93. data/lib/sapor/regional_data/european-union-ireland-2014.psv +50 -0
  94. data/lib/sapor/regional_data/european-union-ireland-20190524-ia.psv +58 -0
  95. data/lib/sapor/regional_data/european-union-ireland-20190524.psv +52 -0
  96. data/lib/sapor/regional_data/european_union_27_austria.rb +76 -0
  97. data/lib/sapor/regional_data/european_union_27_croatia.rb +81 -0
  98. data/lib/sapor/regional_data/european_union_27_denmark.rb +77 -0
  99. data/lib/sapor/regional_data/european_union_27_estonia.rb +74 -0
  100. data/lib/sapor/regional_data/european_union_27_finland.rb +74 -0
  101. data/lib/sapor/regional_data/european_union_27_ireland.rb +96 -0
  102. data/lib/sapor/regional_data/european_union_27_ireland_with_ia.rb +97 -0
  103. data/lib/sapor/regional_data/european_union_27_italy.rb +84 -0
  104. data/lib/sapor/regional_data/european_union_27_netherlands.rb +81 -0
  105. data/lib/sapor/regional_data/european_union_27_poland.rb +84 -0
  106. data/lib/sapor/regional_data/european_union_27_romania.rb +78 -0
  107. data/lib/sapor/regional_data/european_union_27_slovakia.rb +80 -0
  108. data/lib/sapor/regional_data/european_union_27_spain.rb +82 -0
  109. data/lib/sapor/regional_data/european_union_27_sweden.rb +76 -0
  110. data/lib/sapor/regional_data/european_union_austria.rb +76 -0
  111. data/lib/sapor/regional_data/european_union_bulgaria.rb +81 -0
  112. data/lib/sapor/regional_data/european_union_croatia.rb +81 -0
  113. data/lib/sapor/regional_data/european_union_cyprus.rb +72 -0
  114. data/lib/sapor/regional_data/european_union_czech_republic.rb +82 -0
  115. data/lib/sapor/regional_data/european_union_denmark.rb +77 -0
  116. data/lib/sapor/regional_data/european_union_estonia.rb +74 -0
  117. data/lib/sapor/regional_data/european_union_finland.rb +74 -0
  118. data/lib/sapor/regional_data/european_union_flanders.rb +74 -0
  119. data/lib/sapor/regional_data/european_union_france.rb +84 -0
  120. data/lib/sapor/regional_data/european_union_france_2019.rb +84 -0
  121. data/lib/sapor/regional_data/european_union_french_community_of_belgium.rb +73 -0
  122. data/lib/sapor/regional_data/european_union_germany.rb +86 -0
  123. data/lib/sapor/regional_data/european_union_great_britain.rb +98 -0
  124. data/lib/sapor/regional_data/european_union_greece.rb +77 -0
  125. data/lib/sapor/regional_data/european_union_hungary.rb +76 -0
  126. data/lib/sapor/regional_data/european_union_ireland.rb +96 -0
  127. data/lib/sapor/regional_data/european_union_ireland_with_ia.rb +97 -0
  128. data/lib/sapor/regional_data/european_union_italy.rb +84 -0
  129. data/lib/sapor/regional_data/european_union_latvia.rb +81 -0
  130. data/lib/sapor/regional_data/european_union_lithuania.rb +80 -0
  131. data/lib/sapor/regional_data/european_union_luxembourg.rb +75 -0
  132. data/lib/sapor/regional_data/european_union_malta.rb +71 -0
  133. data/lib/sapor/regional_data/european_union_netherlands.rb +81 -0
  134. data/lib/sapor/regional_data/european_union_northern_ireland.rb +75 -0
  135. data/lib/sapor/regional_data/european_union_poland.rb +84 -0
  136. data/lib/sapor/regional_data/european_union_portugal.rb +75 -0
  137. data/lib/sapor/regional_data/european_union_romania.rb +78 -0
  138. data/lib/sapor/regional_data/european_union_slovakia.rb +81 -0
  139. data/lib/sapor/regional_data/european_union_slovenia.rb +85 -0
  140. data/lib/sapor/regional_data/european_union_spain.rb +82 -0
  141. data/lib/sapor/regional_data/european_union_sweden.rb +76 -0
  142. data/lib/sapor/regional_data/finland-20150419-with-sin.psv +224 -0
  143. data/lib/sapor/regional_data/finland-20150419.psv +212 -0
  144. data/lib/sapor/regional_data/finland.rb +107 -0
  145. data/lib/sapor/regional_data/finland_with_sin.rb +107 -0
  146. data/lib/sapor/regional_data/flanders-2014.psv +96 -0
  147. data/lib/sapor/regional_data/flanders-20190526.psv +87 -0
  148. data/lib/sapor/regional_data/flanders.rb +115 -0
  149. data/lib/sapor/regional_data/france.rb +38 -0
  150. data/lib/sapor/regional_data/greece.rb +92 -0
  151. data/lib/sapor/regional_data/hungary-2014.psv +2104 -0
  152. data/lib/sapor/regional_data/hungary.rb +116 -0
  153. data/lib/sapor/regional_data/iceland-20161029-midflokkurinn.psv +94 -0
  154. data/lib/sapor/regional_data/iceland-20161029.psv +88 -0
  155. data/lib/sapor/regional_data/iceland-20171028.psv +85 -0
  156. data/lib/sapor/regional_data/iceland.rb +133 -0
  157. data/lib/sapor/regional_data/latvia-20141004-kpv-p-par.psv +109 -0
  158. data/lib/sapor/regional_data/latvia-20141004-kpv-par.psv +103 -0
  159. data/lib/sapor/regional_data/latvia-20141004-kpv.psv +97 -0
  160. data/lib/sapor/regional_data/latvia-20141004.psv +89 -0
  161. data/lib/sapor/regional_data/latvia.rb +112 -0
  162. data/lib/sapor/regional_data/latvia_kpv.rb +112 -0
  163. data/lib/sapor/regional_data/latvia_kpv_p_par.rb +112 -0
  164. data/lib/sapor/regional_data/latvia_kpv_par.rb +112 -0
  165. data/lib/sapor/regional_data/luxembourg-20131020.psv +76 -0
  166. data/lib/sapor/regional_data/luxembourg.rb +82 -0
  167. data/lib/sapor/regional_data/netherlands.rb +108 -0
  168. data/lib/sapor/regional_data/norway.rb +425 -0
  169. data/lib/sapor/regional_data/norwegian_municipality.rb +68 -0
  170. data/lib/sapor/regional_data/poland-20151025-with-ko-and-l-without-n-po-r-and-zl.psv +321 -0
  171. data/lib/sapor/regional_data/poland-20151025-with-ko-konf-kp-l-and-zp-without-k-k15-n-pis-po-psl-r-and-zl.psv +280 -0
  172. data/lib/sapor/regional_data/poland-20151025-with-ko-sld-and-wi-without-n-po-and-zl.psv +403 -0
  173. data/lib/sapor/regional_data/poland-20151025-with-sld-and-wi-without-zl.psv +444 -0
  174. data/lib/sapor/regional_data/poland-20151025-with-sld-without-zl.psv +403 -0
  175. data/lib/sapor/regional_data/poland-20151025.psv +403 -0
  176. data/lib/sapor/regional_data/poland.rb +125 -0
  177. data/lib/sapor/regional_data/poland_with_ko_and_l_without_n_po_r_and_zl.rb +122 -0
  178. data/lib/sapor/regional_data/poland_with_ko_konf_kp_l_and_zp_without_k_k15_n_pis_po_psl_r_and_zl.rb +123 -0
  179. data/lib/sapor/regional_data/poland_with_ko_sld_and_wi_without_n_po_and_zl.rb +125 -0
  180. data/lib/sapor/regional_data/poland_with_sld_and_wi_without_zl.rb +126 -0
  181. data/lib/sapor/regional_data/poland_with_sld_without_zl.rb +126 -0
  182. data/lib/sapor/regional_data/portugal-20151004-with-a-and-ch-without-paf.psv +438 -0
  183. data/lib/sapor/regional_data/portugal-20151004-with-a-and-il-without-paf.psv +438 -0
  184. data/lib/sapor/regional_data/portugal-20151004-with-a-ch-and-il-without-paf.psv +461 -0
  185. data/lib/sapor/regional_data/portugal-20151004-with-a-without-paf.psv +415 -0
  186. data/lib/sapor/regional_data/portugal-20151004-with-ch-and-il-without-paf.psv +438 -0
  187. data/lib/sapor/regional_data/portugal-20151004-without-paf.psv +392 -0
  188. data/lib/sapor/regional_data/portugal-20151004.psv +370 -0
  189. data/lib/sapor/regional_data/portugal.rb +101 -0
  190. data/lib/sapor/regional_data/portugal_with_a_and_ch_without_paf.rb +92 -0
  191. data/lib/sapor/regional_data/portugal_with_a_and_il_without_paf.rb +92 -0
  192. data/lib/sapor/regional_data/portugal_with_a_ch_and_il_without_paf.rb +92 -0
  193. data/lib/sapor/regional_data/portugal_with_a_without_paf.rb +92 -0
  194. data/lib/sapor/regional_data/portugal_with_ch_and_il_without_paf.rb +92 -0
  195. data/lib/sapor/regional_data/portugal_without_paf.rb +92 -0
  196. data/lib/sapor/regional_data/slovakia.rb +81 -0
  197. data/lib/sapor/regional_data/slovenia.rb +114 -0
  198. data/lib/sapor/regional_data/spain-20160626.psv +619 -0
  199. data/lib/sapor/regional_data/spain.rb +136 -0
  200. data/lib/sapor/regional_data/sweden.rb +92 -0
  201. data/lib/sapor/regional_data/sweden_20140914.rb +89 -0
  202. data/lib/sapor/regional_data/united_kingdom-2015.psv +4358 -0
  203. data/lib/sapor/regional_data/united_kingdom-20170608-brexit-chuk.psv +5154 -0
  204. data/lib/sapor/regional_data/united_kingdom-20170608-brexit.psv +4521 -0
  205. data/lib/sapor/regional_data/united_kingdom-20170608-tig.psv +4529 -0
  206. data/lib/sapor/regional_data/united_kingdom-20170608.psv +3894 -0
  207. data/lib/sapor/regional_data/united_kingdom.rb +94 -0
  208. data/lib/sapor/regional_data/united_kingdom_with_brexit.rb +110 -0
  209. data/lib/sapor/regional_data/united_kingdom_with_brexit_and_chuk.rb +111 -0
  210. data/lib/sapor/regional_data/united_kingdom_with_tig.rb +111 -0
  211. data/lib/sapor/regional_data/utopia.rb +66 -0
  212. data/lib/sapor/regional_data/wallonia-2014.psv +101 -0
  213. data/lib/sapor/regional_data/wallonia-20190526.psv +88 -0
  214. data/lib/sapor/regional_data/wallonia.rb +112 -0
  215. data/lib/sapor/representatives_polychotomy.rb +338 -0
  216. data/lib/sapor/single_district_proportional.rb +75 -0
  217. data/sapor.gemspec +35 -0
  218. data/spec/integration/area_spec.rb +28 -0
  219. data/spec/integration/poll_spec.rb +112 -0
  220. data/spec/integration/sample.poll +8 -0
  221. data/spec/spec_helper.rb +31 -0
  222. data/spec/unit/area_spec.rb +115 -0
  223. data/spec/unit/austria_spec.rb +76 -0
  224. data/spec/unit/belgium_brussels_spec.rb +58 -0
  225. data/spec/unit/belgium_flanders_spec.rb +62 -0
  226. data/spec/unit/belgium_spec.rb +26 -0
  227. data/spec/unit/belgium_wallonia_spec.rb +65 -0
  228. data/spec/unit/binomials_cache_spec.rb +34 -0
  229. data/spec/unit/catalonia_spec.rb +74 -0
  230. data/spec/unit/combinations_distribution_spec.rb +241 -0
  231. data/spec/unit/denmark_spec.rb +56 -0
  232. data/spec/unit/denmark_with_e_and_p_spec.rb +58 -0
  233. data/spec/unit/denmark_with_e_spec.rb +57 -0
  234. data/spec/unit/denmark_with_p_spec.rb +57 -0
  235. data/spec/unit/denominators_spec.rb +40 -0
  236. data/spec/unit/dichotomies_spec.rb +154 -0
  237. data/spec/unit/dichotomy_spec.rb +320 -0
  238. data/spec/unit/estonia_spec.rb +65 -0
  239. data/spec/unit/european_union_27_austria_spec.rb +61 -0
  240. data/spec/unit/european_union_27_croatia_spec.rb +60 -0
  241. data/spec/unit/european_union_27_denmark_spec.rb +62 -0
  242. data/spec/unit/european_union_27_estonia_spec.rb +94 -0
  243. data/spec/unit/european_union_27_finland_spec.rb +75 -0
  244. data/spec/unit/european_union_27_ireland_spec.rb +72 -0
  245. data/spec/unit/european_union_27_ireland_with_ia_spec.rb +74 -0
  246. data/spec/unit/european_union_27_italy_spec.rb +69 -0
  247. data/spec/unit/european_union_27_netherlands_spec.rb +81 -0
  248. data/spec/unit/european_union_27_poland_spec.rb +69 -0
  249. data/spec/unit/european_union_27_romania_spec.rb +67 -0
  250. data/spec/unit/european_union_27_slovakia_spec.rb +111 -0
  251. data/spec/unit/european_union_27_spain_spec.rb +130 -0
  252. data/spec/unit/european_union_27_sweden_spec.rb +89 -0
  253. data/spec/unit/european_union_austria_spec.rb +61 -0
  254. data/spec/unit/european_union_bulgaria_spec.rb +97 -0
  255. data/spec/unit/european_union_croatia_spec.rb +59 -0
  256. data/spec/unit/european_union_cyprus_spec.rb +65 -0
  257. data/spec/unit/european_union_czech_republic_spec.rb +125 -0
  258. data/spec/unit/european_union_denmark_spec.rb +61 -0
  259. data/spec/unit/european_union_estonia_spec.rb +93 -0
  260. data/spec/unit/european_union_finland_spec.rb +75 -0
  261. data/spec/unit/european_union_flanders_spec.rb +56 -0
  262. data/spec/unit/european_union_france_2019_spec.rb +73 -0
  263. data/spec/unit/european_union_france_spec.rb +73 -0
  264. data/spec/unit/european_union_french_community_of_belgium_spec.rb +61 -0
  265. data/spec/unit/european_union_germany_spec.rb +90 -0
  266. data/spec/unit/european_union_great_britain_spec.rb +87 -0
  267. data/spec/unit/european_union_greece_spec.rb +148 -0
  268. data/spec/unit/european_union_hungary_spec.rb +57 -0
  269. data/spec/unit/european_union_ireland_spec.rb +72 -0
  270. data/spec/unit/european_union_ireland_with_ia_spec.rb +74 -0
  271. data/spec/unit/european_union_italy_spec.rb +69 -0
  272. data/spec/unit/european_union_latvia_spec.rb +76 -0
  273. data/spec/unit/european_union_lithuania_spec.rb +68 -0
  274. data/spec/unit/european_union_luxembourg_spec.rb +63 -0
  275. data/spec/unit/european_union_malta_spec.rb +60 -0
  276. data/spec/unit/european_union_netherlands_spec.rb +81 -0
  277. data/spec/unit/european_union_northern_ireland_spec.rb +66 -0
  278. data/spec/unit/european_union_poland_spec.rb +69 -0
  279. data/spec/unit/european_union_portugal_spec.rb +77 -0
  280. data/spec/unit/european_union_romania_spec.rb +67 -0
  281. data/spec/unit/european_union_slovakia_spec.rb +111 -0
  282. data/spec/unit/european_union_slovenia_spec.rb +77 -0
  283. data/spec/unit/european_union_spain_spec.rb +129 -0
  284. data/spec/unit/european_union_sweden_spec.rb +89 -0
  285. data/spec/unit/finland_spec.rb +65 -0
  286. data/spec/unit/finland_with_sin_spec.rb +67 -0
  287. data/spec/unit/first_past_the_post_spec.rb +54 -0
  288. data/spec/unit/flanders_spec.rb +70 -0
  289. data/spec/unit/france_spec.rb +32 -0
  290. data/spec/unit/greece_spec.rb +118 -0
  291. data/spec/unit/hungary_spec.rb +132 -0
  292. data/spec/unit/iceland_spec.rb +57 -0
  293. data/spec/unit/largest_remainder_spec.rb +79 -0
  294. data/spec/unit/latvia_kpv_p_par_spec.rb +38 -0
  295. data/spec/unit/latvia_kpv_par_spec.rb +38 -0
  296. data/spec/unit/latvia_kpv_spec.rb +38 -0
  297. data/spec/unit/latvia_spec.rb +60 -0
  298. data/spec/unit/luxembourg_spec.rb +54 -0
  299. data/spec/unit/multi_district_leveled_proportional_spec.rb +49 -0
  300. data/spec/unit/multi_district_proportional_spec.rb +81 -0
  301. data/spec/unit/netherlands_spec.rb +107 -0
  302. data/spec/unit/norway_spec.rb +64 -0
  303. data/spec/unit/norwegian_municipality_spec.rb +89 -0
  304. data/spec/unit/number_formatter_spec.rb +173 -0
  305. data/spec/unit/poland_spec.rb +62 -0
  306. data/spec/unit/poland_with_ko_and_l_without_n_po_r_and_zl_spec.rb +60 -0
  307. data/spec/unit/poland_with_ko_konf_kp_l_and_zp_without_k_k15_n_pis_po_psl_r_and_zl_spec.rb +59 -0
  308. data/spec/unit/poland_with_ko_sld_and_wi_without_n_po_and_zl_spec.rb +62 -0
  309. data/spec/unit/poland_with_sld_and_wi_without_zl_spec.rb +63 -0
  310. data/spec/unit/poland_with_sld_without_zl_spec.rb +62 -0
  311. data/spec/unit/poll_spec.rb +110 -0
  312. data/spec/unit/portugal_spec.rb +66 -0
  313. data/spec/unit/portugal_with_a_and_ch_without_paf_spec.rb +68 -0
  314. data/spec/unit/portugal_with_a_and_il_without_paf_spec.rb +68 -0
  315. data/spec/unit/portugal_with_a_ch_and_il_without_paf_spec.rb +69 -0
  316. data/spec/unit/portugal_with_a_without_paf_spec.rb +67 -0
  317. data/spec/unit/portugal_with_ch_and_il_without_paf_spec.rb +68 -0
  318. data/spec/unit/portugal_without_paf_spec.rb +66 -0
  319. data/spec/unit/pseudorandom_multirange_enumerator_spec.rb +82 -0
  320. data/spec/unit/referendum_polychotomy_spec.rb +289 -0
  321. data/spec/unit/representatives_polychotomy_spec.rb +332 -0
  322. data/spec/unit/slovakia_spec.rb +99 -0
  323. data/spec/unit/slovenia_spec.rb +80 -0
  324. data/spec/unit/spain_spec.rb +101 -0
  325. data/spec/unit/sweden_20140914_spec.rb +112 -0
  326. data/spec/unit/sweden_spec.rb +113 -0
  327. data/spec/unit/united_kingdom_spec.rb +65 -0
  328. data/spec/unit/united_kingdom_with_brexit_and_chuk_spec.rb +67 -0
  329. data/spec/unit/united_kingdom_with_brexit_spec.rb +66 -0
  330. data/spec/unit/united_kingdom_with_tig_spec.rb +66 -0
  331. data/spec/unit/wallonia_spec.rb +70 -0
  332. metadata +490 -0
@@ -0,0 +1,82 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
5
+ #
6
+ # This file is part of SAPoR.
7
+ #
8
+ # SAPoR is free software: you can redistribute it and/or modify it under the
9
+ # terms of the GNU General Public License as published by the Free Software
10
+ # Foundation, either version 3 of the License, or (at your option) any later
11
+ # version.
12
+ #
13
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
14
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16
+ #
17
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
18
+ #
19
+
20
+ module Sapor
21
+ #
22
+ # Superclass for any area (country, region, city, etc...) for which
23
+ # polls can be registered.
24
+ #
25
+ class Area
26
+ def threshold
27
+ nil
28
+ end
29
+
30
+ def lines_to_election_results(lines)
31
+ results = {}
32
+ lines.each_line { |line| add_line_to_election_results(results, line) }
33
+ results
34
+ end
35
+
36
+ def load_election_results(filename)
37
+ dirname = File.dirname(File.expand_path(__FILE__))
38
+ full_filename = File.expand_path(filename, dirname)
39
+ lines = File.read(full_filename)
40
+ lines_to_election_results(lines)
41
+ end
42
+
43
+ def summarize_election_results(election_results)
44
+ summary = {}
45
+ election_results.each_value do |local_results|
46
+ add_local_results_to_summary(summary, local_results)
47
+ end
48
+ summary
49
+ end
50
+
51
+ private
52
+
53
+ def add_line_to_election_results(results, line)
54
+ return if line.strip.empty? || line.strip.start_with?('#')
55
+ values = line.split('|')
56
+ fail(ArgumentError, "Broken line: #{line}.") unless values.size.equal?(3)
57
+ add_line_values_to_election_results(results, values)
58
+ end
59
+
60
+ def add_line_values_to_election_results(results, values)
61
+ constituency = values[0].strip
62
+ results[constituency] = {} unless results.key?(constituency)
63
+ choice = values[1].strip
64
+ votes = values[2].gsub(',', '').to_i
65
+ if results[constituency].key?(choice)
66
+ fail(ArgumentError, "Choice #{choice} appeared twice in " \
67
+ "constituency #{constituency}.")
68
+ end
69
+ results[constituency][choice] = votes
70
+ end
71
+
72
+ def add_local_results_to_summary(summary, local_results)
73
+ local_results.each_pair do |choice, votes|
74
+ if summary.key?(choice)
75
+ summary[choice] += votes
76
+ else
77
+ summary[choice] = votes
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,84 @@
1
+ #
2
+ # Statistical Analysis of Polling Results (SAPoR)
3
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
4
+ #
5
+ # This file is part of SAPoR.
6
+ #
7
+ # SAPoR is free software: you can redistribute it and/or modify it under the
8
+ # terms of the GNU General Public License as published by the Free Software
9
+ # Foundation, either version 3 of the License, or (at your option) any later
10
+ # version.
11
+ #
12
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
13
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
+ #
16
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
17
+ #
18
+
19
+ module Sapor
20
+ #
21
+ # The regional data for Austria.
22
+ #
23
+ class Austria < Area
24
+ include Singleton
25
+
26
+ def area_code
27
+ 'AT'
28
+ end
29
+
30
+ def coalitions
31
+ COALITIONS
32
+ end
33
+
34
+ def no_of_seats
35
+ NO_OF_SEATS
36
+ end
37
+
38
+ def population_size
39
+ POPULATION_SIZE
40
+ end
41
+
42
+ def seats(simulation)
43
+ electoral_system.project(simulation)
44
+ end
45
+
46
+ private
47
+
48
+ FPO_PARTY = 'Freiheitliche Partei Österreichs'.freeze
49
+ GRUENE_PARTY = 'Die Grünen–Die Grüne Alternative'.freeze
50
+ NEOS_PARTY = 'NEOS–Das Neue Österreich und Liberales Forum'.freeze
51
+ OVP_PARTY = 'Österreichische Volkspartei'.freeze
52
+ SPO_PARTY = 'Sozialdemokratische Partei Österreichs'.freeze
53
+
54
+ COALITIONS = [[FPO_PARTY, OVP_PARTY],
55
+ [FPO_PARTY, SPO_PARTY],
56
+ [GRUENE_PARTY, NEOS_PARTY, OVP_PARTY],
57
+ [GRUENE_PARTY, NEOS_PARTY, SPO_PARTY],
58
+ [GRUENE_PARTY, OVP_PARTY],
59
+ [GRUENE_PARTY, SPO_PARTY],
60
+ [NEOS_PARTY, OVP_PARTY],
61
+ [OVP_PARTY],
62
+ [OVP_PARTY, SPO_PARTY],
63
+ [SPO_PARTY]].freeze
64
+
65
+ NO_OF_SEATS = 183
66
+
67
+ # Voter turnout on 15 October 2017
68
+ # Source: Web page with the official results of the elections of 15 October
69
+ # 2017, downloaded on 29 May 2019,
70
+ # https://en.wikipedia.org/wiki/2017_Austrian_legislative_election
71
+ POPULATION_SIZE = 5_069_929
72
+
73
+ THRESHOLD = 0.04
74
+
75
+ def electoral_system
76
+ if @electoral_system.nil?
77
+ @electoral_system = SingleDistrictProportional.new(
78
+ NO_OF_SEATS, DhondtDenominators, THRESHOLD
79
+ )
80
+ end
81
+ @electoral_system
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,46 @@
1
+ # Statistical Analysis of Polling Results (SAPoR)
2
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
3
+ #
4
+ # This file is part of SAPoR.
5
+ #
6
+ # SAPoR is free software: you can redistribute it and/or modify it under the
7
+ # terms of the GNU General Public License as published by the Free Software
8
+ # Foundation, either version 3 of the License, or (at your option) any later
9
+ # version.
10
+ #
11
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
12
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ #
15
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
16
+ #
17
+
18
+ # Source: Web page with the official results of the elections of 25 May 2014,
19
+ # downloaded on 3 November 2016,
20
+ # URL: http://verkiezingen2014.belgium.be/nl/cha/results/results_tab_CKR00000.html
21
+
22
+ # Replaced FDF with DéFI
23
+ # Replaced PTB-GO! with PTB
24
+
25
+ Bruxelles-Capitale / Brussel-Hoofdstad | PS | 123,985
26
+ Bruxelles-Capitale / Brussel-Hoofdstad | MR | 115,038
27
+ Bruxelles-Capitale / Brussel-Hoofdstad | DéFI | 55,306
28
+ Bruxelles-Capitale / Brussel-Hoofdstad | Ecolo | 51,133
29
+ Bruxelles-Capitale / Brussel-Hoofdstad | cdH | 46,441
30
+ Bruxelles-Capitale / Brussel-Hoofdstad | PTB | 19,135
31
+ Bruxelles-Capitale / Brussel-Hoofdstad | Open Vld | 13,283
32
+ Bruxelles-Capitale / Brussel-Hoofdstad | N-VA | 13,223
33
+ Bruxelles-Capitale / Brussel-Hoofdstad | Debout les Belges | 11,112
34
+ Bruxelles-Capitale / Brussel-Hoofdstad | sp.a | 9,613
35
+ Bruxelles-Capitale / Brussel-Hoofdstad | ISLAM | 9,387
36
+ Bruxelles-Capitale / Brussel-Hoofdstad | Parti Populaire | 8,641
37
+ Bruxelles-Capitale / Brussel-Hoofdstad | CD&V | 8,173
38
+ Bruxelles-Capitale / Brussel-Hoofdstad | Vlaams Belang | 5,157
39
+ Bruxelles-Capitale / Brussel-Hoofdstad | La Droite | 2,165
40
+ Bruxelles-Capitale / Brussel-Hoofdstad | NATION | 1,623
41
+ Bruxelles-Capitale / Brussel-Hoofdstad | GAUCHES COMMUNES | 1,445
42
+ Bruxelles-Capitale / Brussel-Hoofdstad | Égalitaires! | 953
43
+ Bruxelles-Capitale / Brussel-Hoofdstad | PARTI LIBERTARIEN | 750
44
+ Bruxelles-Capitale / Brussel-Hoofdstad | MG | 567
45
+ Bruxelles-Capitale / Brussel-Hoofdstad | Agora Erasmus | 382
46
+ Bruxelles-Capitale / Brussel-Hoofdstad | LaLutte-DeStrijd | 213
@@ -0,0 +1,33 @@
1
+ # Statistical Analysis of Polling Results (SAPoR)
2
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
3
+ #
4
+ # This file is part of SAPoR.
5
+ #
6
+ # SAPoR is free software: you can redistribute it and/or modify it under the
7
+ # terms of the GNU General Public License as published by the Free Software
8
+ # Foundation, either version 3 of the License, or (at your option) any later
9
+ # version.
10
+ #
11
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
12
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ #
15
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
16
+ #
17
+
18
+ # Source: Web page with the official results of the elections of 26 May 2019,
19
+ # downloaded on 6 August 2019,
20
+ # URL: https://verkiezingen2019.belgium.be/nl/resultaten-cijfers?el=CK&id=CKC21004
21
+
22
+ Bruxelles-Capitale / Brussel-Hoofdstad | Ecolo | 108,144
23
+ Bruxelles-Capitale / Brussel-Hoofdstad | Parti Socialiste | 100,195
24
+ Bruxelles-Capitale / Brussel-Hoofdstad | Mouvement Réformateur | 87,594
25
+ Bruxelles-Capitale / Brussel-Hoofdstad | Parti du Travail de Belgique | 61,589
26
+ Bruxelles-Capitale / Brussel-Hoofdstad | DéFI | 51,544
27
+ Bruxelles-Capitale / Brussel-Hoofdstad | Centre démocrate humaniste | 29,161
28
+ Bruxelles-Capitale / Brussel-Hoofdstad | Nieuw-Vlaamse Alliantie | 15,983
29
+ Bruxelles-Capitale / Brussel-Hoofdstad | Listes Destexhe | 12,879
30
+ Bruxelles-Capitale / Brussel-Hoofdstad | Open Vlaamse Liberalen en Democraten | 11,511
31
+ Bruxelles-Capitale / Brussel-Hoofdstad | Parti Populaire | 8,455
32
+ Bruxelles-Capitale / Brussel-Hoofdstad | Vlaams Belang | 7,824
33
+ Bruxelles-Capitale / Brussel-Hoofdstad | Christen-Democratisch en Vlaams | 6,580
@@ -0,0 +1,80 @@
1
+ # Statistical Analysis of Polling Results (SAPoR)
2
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
3
+ #
4
+ # This file is part of SAPoR.
5
+ #
6
+ # SAPoR is free software: you can redistribute it and/or modify it under the
7
+ # terms of the GNU General Public License as published by the Free Software
8
+ # Foundation, either version 3 of the License, or (at your option) any later
9
+ # version.
10
+ #
11
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
12
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ #
15
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
16
+ #
17
+
18
+ # Source: Web page with the official results of the elections of 25 May 2014,
19
+ # downloaded on 3 November 2016,
20
+ # URL: http://verkiezingen2014.belgium.be/nl/cha/results/results_tab_CKR00000.html
21
+
22
+ # Replaced FDF with DéFI
23
+
24
+ Antwerpen | N-VA | 449,531
25
+ Antwerpen | CD&V | 183,636
26
+ Antwerpen | sp.a | 132,096
27
+ Antwerpen | Open Vld | 116,892
28
+ Antwerpen | Groen | 112,477
29
+ Antwerpen | Vlaams Belang | 79,852
30
+ Antwerpen | PVDA | 51,638
31
+ Antwerpen | Piratenpartij | 11,136
32
+ Antwerpen | R.O.S.S.E.M. | 2,984
33
+ Antwerpen | B.U.B. | 1,299
34
+
35
+ Limburg | N-VA | 174,030
36
+ Limburg | CD&V | 125,962
37
+ Limburg | sp.a | 98,194
38
+ Limburg | Open Vld | 68,713
39
+ Limburg | Vlaams Belang | 34,020
40
+ Limburg | Groen | 33,244
41
+ Limburg | PVDA | 14,253
42
+ Limburg | Piratenpartij | 3,909
43
+ Limburg | R.O.S.S.E.M. | 1,415
44
+ Limburg | B.U.B. | 714
45
+
46
+ Oost-Vlaanderen | N-VA | 306,650
47
+ Oost-Vlaanderen | Open Vld | 179,167
48
+ Oost-Vlaanderen | CD&V | 177,349
49
+ Oost-Vlaanderen | sp.a | 131,903
50
+ Oost-Vlaanderen | Groen | 90,473
51
+ Oost-Vlaanderen | Vlaams Belang | 61,620
52
+ Oost-Vlaanderen | PVDA | 26,381
53
+ Oost-Vlaanderen | Piratenpartij | 8,124
54
+ Oost-Vlaanderen | R.O.S.S.E.M. | 2,557
55
+ Oost-Vlaanderen | SD&P | 2,298
56
+ Oost-Vlaanderen | B.U.B. | 1,366
57
+ Oost-Vlaanderen | PVGW | 932
58
+
59
+ Vlaams-Brabant | N-VA | 192,698
60
+ Vlaams-Brabant | Open Vld | 170,128
61
+ Vlaams-Brabant | CD&V | 112,251
62
+ Vlaams-Brabant | sp.a | 81,254
63
+ Vlaams-Brabant | Groen | 59,096
64
+ Vlaams-Brabant | Vlaams Belang | 28,857
65
+ Vlaams-Brabant | DéFI | 15,405
66
+ Vlaams-Brabant | PVDA | 12,664
67
+ Vlaams-Brabant | B.U.B. | 2,577
68
+ Vlaams-Brabant | Piratenpartij | 2,281
69
+ Vlaams-Brabant | R.O.S.S.E.M. | 1,914
70
+
71
+ West-Vlaanderen | N-VA | 230,265
72
+ West-Vlaanderen | CD&V | 175,669
73
+ West-Vlaanderen | sp.a | 142,406
74
+ West-Vlaanderen | Open Vld | 111,388
75
+ West-Vlaanderen | Groen | 63,657
76
+ West-Vlaanderen | Vlaams Belang | 38,232
77
+ West-Vlaanderen | PVDA | 13,397
78
+ West-Vlaanderen | R.O.S.S.E.M. | 2,810
79
+ West-Vlaanderen | B.U.B. | 1,691
80
+ West-Vlaanderen | Lijst Dedecker | 28,414
@@ -0,0 +1,74 @@
1
+ # Statistical Analysis of Polling Results (SAPoR)
2
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
3
+ #
4
+ # This file is part of SAPoR.
5
+ #
6
+ # SAPoR is free software: you can redistribute it and/or modify it under the
7
+ # terms of the GNU General Public License as published by the Free Software
8
+ # Foundation, either version 3 of the License, or (at your option) any later
9
+ # version.
10
+ #
11
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
12
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ #
15
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
16
+ #
17
+
18
+ # Source: Web page with the official results of the elections of 26 May 2019,
19
+ # downloaded on 7 August 2019,
20
+ # URL: https://verkiezingen2019.belgium.be/nl/verkiezingen?el=CK
21
+
22
+ Antwerpen | Nieuw-Vlaamse Alliantie | 361,022
23
+ Antwerpen | Vlaams Belang | 217,333
24
+ Antwerpen | Christen-Democratisch en Vlaams | 128,036
25
+ Antwerpen | Groen | 127,131
26
+ Antwerpen | Open Vlaamse Liberalen en Democraten | 111,505
27
+ Antwerpen | Socialistische Partij Anders | 93,114
28
+ Antwerpen | Partij van de Arbeid van België | 88,430
29
+ Antwerpen | DierAnimal | 13,544
30
+ Antwerpen | Piratenpartij | 7,521
31
+ Antwerpen | Democratisch-Solidair Appèl | 3,605
32
+ Antwerpen | Partij Vrede en Solidariteit | 3,217
33
+ Antwerpen | Volt | 1,669
34
+
35
+ Limburg | Nieuw-Vlaamse Alliantie | 125,273
36
+ Limburg | Vlaams Belang | 109,499
37
+ Limburg | Christen-Democratisch en Vlaams | 103,625
38
+ Limburg | Socialistische Partij Anders | 76,614
39
+ Limburg | Open Vlaamse Liberalen en Democraten | 66,602
40
+ Limburg | Groen | 38,154
41
+ Limburg | Partij van de Arbeid van België | 31,037
42
+ Limburg | Democratisch-Solidair Appèl | 2,344
43
+ Limburg | PRO | 1,690
44
+
45
+ Oost-Vlaanderen | Nieuw-Vlaamse Alliantie | 218,023
46
+ Oost-Vlaanderen | Vlaams Belang | 200,173
47
+ Oost-Vlaanderen | Open Vlaamse Liberalen en Democraten | 178,349
48
+ Oost-Vlaanderen | Christen-Democratisch en Vlaams | 127,024
49
+ Oost-Vlaanderen | Groen | 103,061
50
+ Oost-Vlaanderen | Socialistische Partij Anders | 101,447
51
+ Oost-Vlaanderen | Partij van de Arbeid van België | 55,209
52
+ Oost-Vlaanderen | DierAnimal | 11,801
53
+ Oost-Vlaanderen | Belgische Unie – Union Belge | 2,092
54
+ Oost-Vlaanderen | de coöperatie | 1,732
55
+
56
+ Vlaams-Brabant | Nieuw-Vlaamse Alliantie | 193,735
57
+ Vlaams-Brabant | Open Vlaamse Liberalen en Democraten | 106,175
58
+ Vlaams-Brabant | Christen-Democratisch en Vlaams | 94,743
59
+ Vlaams-Brabant | Vlaams Belang | 92,844
60
+ Vlaams-Brabant | Groen | 81,620
61
+ Vlaams-Brabant | Socialistische Partij Anders | 65,347
62
+ Vlaams-Brabant | Partij van de Arbeid van België | 33,016
63
+ Vlaams-Brabant | DéFI | 14,043
64
+ Vlaams-Brabant | Belgische Unie – Union Belge | 4,513
65
+ Vlaams-Brabant | PRO | 3,992
66
+
67
+ West-Vlaanderen | Nieuw-Vlaamse Alliantie | 172,751
68
+ West-Vlaanderen | Vlaams Belang | 164,427
69
+ West-Vlaanderen | Christen-Democratisch en Vlaams | 142,512
70
+ West-Vlaanderen | Socialistische Partij Anders | 118,512
71
+ West-Vlaanderen | Open Vlaamse Liberalen en Democraten | 105,192
72
+ West-Vlaanderen | Groen | 63,870
73
+ West-Vlaanderen | Partij van de Arbeid van België | 29,205
74
+ West-Vlaanderen | DierAnimal | 9,926
@@ -0,0 +1,114 @@
1
+ # Statistical Analysis of Polling Results (SAPoR)
2
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
3
+ #
4
+ # This file is part of SAPoR.
5
+ #
6
+ # SAPoR is free software: you can redistribute it and/or modify it under the
7
+ # terms of the GNU General Public License as published by the Free Software
8
+ # Foundation, either version 3 of the License, or (at your option) any later
9
+ # version.
10
+ #
11
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
12
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ #
15
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
16
+ #
17
+
18
+ # Source: Web page with the official results of the elections of 25 May 2014,
19
+ # downloaded on 3 November 2016,
20
+ # URL: http://verkiezingen2014.belgium.be/nl/cha/results/results_tab_CKR00000.html
21
+
22
+ # Replaced FDF with DéFI
23
+ # Replaced PTB-GO! with PTB
24
+
25
+ Brabant wallon | MR | 97,741
26
+ Brabant wallon | PS | 51,359
27
+ Brabant wallon | Ecolo | 27,356
28
+ Brabant wallon | cdH | 26,335
29
+ Brabant wallon | DéFI | 11,198
30
+ Brabant wallon | Parti Populaire | 9,544
31
+ Brabant wallon | PTB | 6,449
32
+ Brabant wallon | Debout les Belges | 3,342
33
+ Brabant wallon | La Droite | 2,337
34
+ Brabant wallon | R.W.F. | 1,102
35
+ Brabant wallon | B.U.B. | 961
36
+ Brabant wallon | NATION | 908
37
+ Brabant wallon | NWA | 442
38
+ Brabant wallon | MOVE | 400
39
+ Brabant wallon | VLC | 208
40
+ Brabant wallon | MG | 187
41
+
42
+ Hainaut | PS | 303,085
43
+ Hainaut | MR | 153,301
44
+ Hainaut | cdH | 76,812
45
+ Hainaut | Ecolo | 43,488
46
+ Hainaut | PTB | 38,194
47
+ Hainaut | Parti Populaire | 32,158
48
+ Hainaut | Debout les Belges | 24,634
49
+ Hainaut | Faire place Nette | 15,467
50
+ Hainaut | DéFI | 14,382
51
+ Hainaut | La Droite | 6,804
52
+ Hainaut | PIRATE | 5,907
53
+ Hainaut | Wallonie d’Abord | 4,926
54
+ Hainaut | NATION | 3,767
55
+ Hainaut | Lutte Ouvrière | 3,539
56
+ Hainaut | P+ | 2,254
57
+ Hainaut | R.W.F. | 2,058
58
+ Hainaut | NWA | 1,673
59
+ Hainaut | MG | 1,662
60
+ Hainaut | FW | 1,633
61
+ Hainaut | RassemblementWalon | 1,598
62
+ Hainaut | B.U.B. | 688
63
+ Hainaut | MGJOD | 460
64
+
65
+ Liège | PS | 187,897
66
+ Liège | MR | 158,046
67
+ Liège | cdH | 81,759
68
+ Liège | Ecolo | 56,890
69
+ Liège | PTB | 50,603
70
+ Liège | Parti Populaire | 32,229
71
+ Liège | DéFI | 13,915
72
+ Liège | Debout les Belges | 9,381
73
+ Liège | La Droite | 8,714
74
+ Liège | Wallonie d’Abord | 6,295
75
+ Liège | ISLAM | 4,332
76
+ Liège | PIRATE | 3,938
77
+ Liège | PP PARTIPENSIONNES | 3,178
78
+ Liège | NATION | 2,342
79
+ Liège | VLC | 1,820
80
+ Liège | R.W.F. | 1,622
81
+ Liège | B.U.B. | 1,198
82
+ Liège | MG | 1,024
83
+ Liège | FW | 752
84
+ Liège | CIM | 430
85
+
86
+ Luxembourg | cdH | 56,702
87
+ Luxembourg | MR | 41,346
88
+ Luxembourg | PS | 37,371
89
+ Luxembourg | Ecolo | 13,471
90
+ Luxembourg | Parti Populaire | 6,980
91
+ Luxembourg | PTB | 4,003
92
+ Luxembourg | Debout les Belges | 2,958
93
+ Luxembourg | DéFI | 2,811
94
+ Luxembourg | La Droite | 2,012
95
+ Luxembourg | B.U.B. | 752
96
+ Luxembourg | MG | 666
97
+ Luxembourg | R.W.F. | 645
98
+
99
+ Namur | MR | 84,788
100
+ Namur | PS | 83,361
101
+ Namur | cdH | 48,135
102
+ Namur | Ecolo | 29,186
103
+ Namur | PTB | 14,559
104
+ Namur | Parti Populaire | 13,029
105
+ Namur | DéFI | 8,367
106
+ Namur | Debout les Belges | 6,616
107
+ Namur | La Droite | 4,003
108
+ Namur | R.W.F. | 1,967
109
+ Namur | NATION | 1,576
110
+ Namur | Vox Populi Belgica | 1,280
111
+ Namur | B.U.B. | 857
112
+ Namur | FW | 695
113
+ Namur | NWA | 670
114
+ Namur | MG | 423