sapor 0.3.4

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 +82 -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,212 @@
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: "Eduskuntavaalit 2015". Retrieved on 30 October 2018.
19
+ # URL: https://tulospalvelu.vaalit.fi/E-2015/fi/lasktila.html
20
+
21
+ 01 Helsinki | Kansallinen Kokoomus | 93,392
22
+ 01 Helsinki | Vihreä liitto | 67,806
23
+ 01 Helsinki | Suomen Sosialidemokraattinen Puolue | 55,874
24
+ 01 Helsinki | Perussuomalaiset | 40,583
25
+ 01 Helsinki | Vasemmistoliitto | 35,435
26
+ 01 Helsinki | Suomen Keskusta | 25,947
27
+ 01 Helsinki | Svenska folkpartiet i Finland | 24,645
28
+ 01 Helsinki | Kristillisdemokraatit | 6,407
29
+ 01 Helsinki | Piraattipuolue | 5,119
30
+ 01 Helsinki | Suomen Kommunistinen Puolue | 1,485
31
+ 01 Helsinki | Itsenäisyyspuolue | 1,242
32
+ 01 Helsinki | Muutos 2011 | 480
33
+ 01 Helsinki | Köyhien Asialla | 328
34
+ 01 Helsinki | Kristiina Kreisler | 314
35
+ 01 Helsinki | Suomen Työväenpuolue | 244
36
+ 01 Helsinki | Jani Leinonen | 168
37
+ 01 Helsinki | Kim Sjöström | 114
38
+ 01 Helsinki | Yakup Yilmaz | 93
39
+ 01 Helsinki | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 76
40
+ 01 Helsinki | Ville Punto | 73
41
+ 01 Helsinki | Jyrki Helminen | 38
42
+ 01 Helsinki | Jaakko Katajisto | 12
43
+
44
+ 02 Uusimaa | Kansallinen Kokoomus | 124,754
45
+ 02 Uusimaa | Perussuomalaiset | 93,411
46
+ 02 Uusimaa | Suomen Sosialidemokraattinen Puolue | 86,462
47
+ 02 Uusimaa | Suomen Keskusta | 59,749
48
+ 02 Uusimaa | Svenska folkpartiet i Finland | 53,232
49
+ 02 Uusimaa | Vihreä liitto | 52,034
50
+ 02 Uusimaa | Vasemmistoliitto | 22,698
51
+ 02 Uusimaa | Kristillisdemokraatit | 13,750
52
+ 02 Uusimaa | Piraattipuolue | 5,893
53
+ 02 Uusimaa | Muutos 2011 | 3,473
54
+ 02 Uusimaa | Itsenäisyyspuolue | 2,131
55
+ 02 Uusimaa | Suomen Kommunistinen Puolue | 1,189
56
+ 02 Uusimaa | Mika Vähäkangas | 522
57
+ 02 Uusimaa | Köyhien Asialla | 295
58
+ 02 Uusimaa | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 262
59
+ 02 Uusimaa | Suomen Työväenpuolue | 174
60
+ 02 Uusimaa | Joni Tikka | 90
61
+
62
+ 03 Varsinais-Suomi | Kansallinen Kokoomus | 55,355
63
+ 03 Varsinais-Suomi | Perussuomalaiset | 50,813
64
+ 03 Varsinais-Suomi | Suomen Keskusta | 42,763
65
+ 03 Varsinais-Suomi | Suomen Sosialidemokraattinen Puolue | 40,835
66
+ 03 Varsinais-Suomi | Vasemmistoliitto | 27,001
67
+ 03 Varsinais-Suomi | Vihreä liitto | 22,875
68
+ 03 Varsinais-Suomi | Svenska folkpartiet i Finland | 13,111
69
+ 03 Varsinais-Suomi | Kristillisdemokraatit | 6,319
70
+ 03 Varsinais-Suomi | Piraattipuolue | 2,008
71
+ 03 Varsinais-Suomi | Itsenäisyyspuolue | 963
72
+ 03 Varsinais-Suomi | Suomen Kommunistinen Puolue | 664
73
+ 03 Varsinais-Suomi | Kari Leppäjoki | 268
74
+ 03 Varsinais-Suomi | Suomen Työväenpuolue | 184
75
+ 03 Varsinais-Suomi | Muutos 2011 | 172
76
+ 03 Varsinais-Suomi | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 63
77
+
78
+ 04 Satakunta | Perussuomalaiset | 30,600
79
+ 04 Satakunta | Suomen Sosialidemokraattinen Puolue | 27,631
80
+ 04 Satakunta | Suomen Keskusta | 25,247
81
+ 04 Satakunta | Kansallinen Kokoomus | 18,377
82
+ 04 Satakunta | Vasemmistoliitto | 11,730
83
+ 04 Satakunta | Kristillisdemokraatit | 3,525
84
+ 04 Satakunta | Vihreä liitto | 3,335
85
+ 04 Satakunta | Itsenäisyyspuolue | 436
86
+ 04 Satakunta | Svenska folkpartiet i Finland | 426
87
+ 04 Satakunta | Muutos 2011 | 393
88
+ 04 Satakunta | Piraattipuolue | 388
89
+ 04 Satakunta | Suomen Kommunistinen Puolue | 127
90
+ 04 Satakunta | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 80
91
+ 04 Satakunta | Suomen Työväenpuolue | 39
92
+
93
+ 05 Ahvenanmaa | Åländsk samling | 10,910
94
+ 05 Ahvenanmaa | Liberalerna på Åland | 1,277
95
+
96
+ 06 Häme | Suomen Sosialidemokraattinen Puolue | 44,737
97
+ 06 Häme | Kansallinen Kokoomus | 43,544
98
+ 06 Häme | Perussuomalaiset | 39,537
99
+ 06 Häme | Suomen Keskusta | 36,020
100
+ 06 Häme | Kristillisdemokraatit | 12,412
101
+ 06 Häme | Vasemmistoliitto | 12,182
102
+ 06 Häme | Vihreä liitto | 10,350
103
+ 06 Häme | Piraattipuolue | 1,658
104
+ 06 Häme | Itsenäisyyspuolue | 742
105
+ 06 Häme | Muutos 2011 | 632
106
+ 06 Häme | Suomen Kommunistinen Puolue | 489
107
+ 06 Häme | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 143
108
+
109
+ 07 Pirkanmaa | Kansallinen Kokoomus | 54,648
110
+ 07 Pirkanmaa | Suomen Sosialidemokraattinen Puolue | 54,220
111
+ 07 Pirkanmaa | Perussuomalaiset | 49,551
112
+ 07 Pirkanmaa | Suomen Keskusta | 46,189
113
+ 07 Pirkanmaa | Vihreä liitto | 28,537
114
+ 07 Pirkanmaa | Vasemmistoliitto | 21,780
115
+ 07 Pirkanmaa | Kristillisdemokraatit | 13,553
116
+ 07 Pirkanmaa | Piraattipuolue | 3,037
117
+ 07 Pirkanmaa | Itsenäisyyspuolue | 2,289
118
+ 07 Pirkanmaa | Pirkanmaan Sitoutumattomat yhteislista | 2,469
119
+ 07 Pirkanmaa | Suomen Kommunistinen Puolue | 1,130
120
+ 07 Pirkanmaa | Muutos 2011 | 486
121
+ 07 Pirkanmaa | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 123
122
+ 07 Pirkanmaa | Suomen Työväenpuolue | 61
123
+
124
+ 08 Kaakkois-Suomi | Suomen Keskusta | 61,794
125
+ 08 Kaakkois-Suomi | Suomen Sosialidemokraattinen Puolue | 54,604
126
+ 08 Kaakkois-Suomi | Perussuomalaiset | 51,707
127
+ 08 Kaakkois-Suomi | Kansallinen Kokoomus | 38,947
128
+ 08 Kaakkois-Suomi | Vihreä liitto | 15,664
129
+ 08 Kaakkois-Suomi | Kristillisdemokraatit | 11,056
130
+ 08 Kaakkois-Suomi | Vasemmistoliitto | 7,336
131
+ 08 Kaakkois-Suomi | Itsenäisyyspuolue | 1,806
132
+ 08 Kaakkois-Suomi | Piraattipuolue | 1,085
133
+ 08 Kaakkois-Suomi | Svenska folkpartiet i Finland | 728
134
+ 08 Kaakkois-Suomi | Suomen Kommunistinen Puolue | 286
135
+ 08 Kaakkois-Suomi | Muutos 2011 | 199
136
+ 08 Kaakkois-Suomi | Valitsijayhdistys | 174
137
+ 08 Kaakkois-Suomi | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 106
138
+ 08 Kaakkois-Suomi | Suomen Työväenpuolue | 53
139
+
140
+ 09 Savo-Karjala | Suomen Keskusta | 70,573
141
+ 09 Savo-Karjala | Perussuomalaiset | 42,696
142
+ 09 Savo-Karjala | Suomen Sosialidemokraattinen Puolue | 34,629
143
+ 09 Savo-Karjala | Kansallinen Kokoomus | 24,980
144
+ 09 Savo-Karjala | Vihreä liitto | 14,599
145
+ 09 Savo-Karjala | Kristillisdemokraatit | 13,578
146
+ 09 Savo-Karjala | Vasemmistoliitto | 12,750
147
+ 09 Savo-Karjala | Piraattipuolue | 1,269
148
+ 09 Savo-Karjala | Itsenäisyyspuolue | 705
149
+ 09 Savo-Karjala | Suomen Kommunistinen Puolue | 639
150
+ 09 Savo-Karjala | Muutos 2011 | 277
151
+ 09 Savo-Karjala | Suomen Työväenpuolue | 130
152
+ 09 Savo-Karjala | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 55
153
+
154
+ 10 Vaasa | Suomen Keskusta | 67,333
155
+ 10 Vaasa | Svenska folkpartiet i Finland | 50,777
156
+ 10 Vaasa | Perussuomalaiset | 38,964
157
+ 10 Vaasa | Kansallinen Kokoomus | 29,195
158
+ 10 Vaasa | Suomen Sosialidemokraattinen Puolue | 29,024
159
+ 10 Vaasa | Kristillisdemokraatit | 14,076
160
+ 10 Vaasa | Vasemmistoliitto | 7,238
161
+ 10 Vaasa | Vihreä liitto | 6,136
162
+ 10 Vaasa | Itsenäisyyspuolue | 1,461
163
+ 10 Vaasa | Piraattipuolue | 933
164
+ 10 Vaasa | Muutos 2011 | 228
165
+ 10 Vaasa | Suomen Kommunistinen Puolue | 200
166
+ 10 Vaasa | Jani Pontus Toivanen | 131
167
+ 10 Vaasa | Suomen Työväenpuolue | 64
168
+ 10 Vaasa | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 57
169
+
170
+ 11 Keski-Suomi | Suomen Keskusta | 40,729
171
+ 11 Keski-Suomi | Perussuomalaiset | 29,142
172
+ 11 Keski-Suomi | Suomen Sosialidemokraattinen Puolue | 28,710
173
+ 11 Keski-Suomi | Kansallinen Kokoomus | 19,776
174
+ 11 Keski-Suomi | Vihreä liitto | 13,599
175
+ 11 Keski-Suomi | Vasemmistoliitto | 10,145
176
+ 11 Keski-Suomi | Kristillisdemokraatit | 6,656
177
+ 11 Keski-Suomi | Piraattipuolue | 1,264
178
+ 11 Keski-Suomi | Suomen Kommunistinen Puolue | 639
179
+ 11 Keski-Suomi | Itsenäisyyspuolue | 379
180
+ 11 Keski-Suomi | Muutos 2011 | 86
181
+ 11 Keski-Suomi | Tero Poikolainen | 61
182
+ 11 Keski-Suomi | Suomen Työväenpuolue STP | 35
183
+ 11 Keski-Suomi | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 31
184
+ 11 Keski-Suomi | Risto Hintikka | 17
185
+
186
+ 12 Oulu | Suomen Keskusta | 106,581
187
+ 12 Oulu | Perussuomalaiset | 40,429
188
+ 12 Oulu | Vasemmistoliitto | 29,580
189
+ 12 Oulu | Kansallinen Kokoomus | 27,089
190
+ 12 Oulu | Suomen Sosialidemokraattinen Puolue | 22,433
191
+ 12 Oulu | Vihreä liitto | 15,524
192
+ 12 Oulu | Kristillisdemokraatit | 2,690
193
+ 12 Oulu | Piraattipuolue | 1,614
194
+ 12 Oulu | Svenska folkpartiet i Finland | 1,413
195
+ 12 Oulu | Itsenäisyyspuolue | 1,038
196
+ 12 Oulu | Muutos 2011 | 797
197
+ 12 Oulu | Suomen Kommunistinen Puolue | 396
198
+ 12 Oulu | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 68
199
+
200
+ 13 Lappi | Suomen Keskusta | 43,293
201
+ 13 Lappi | Perussuomalaiset | 16,621
202
+ 13 Lappi | Vasemmistoliitto | 13,827
203
+ 13 Lappi | Suomen Sosialidemokraattinen Puolue | 10,943
204
+ 13 Lappi | Kansallinen Kokoomus | 10,155
205
+ 13 Lappi | Vihreä liitto | 2,643
206
+ 13 Lappi | Kristillisdemokraatit | 1,112
207
+ 13 Lappi | Piraattipuolue | 818
208
+ 13 Lappi | Svenska folkpartiet i Finland | 470
209
+ 13 Lappi | Itsenäisyyspuolue | 446
210
+ 13 Lappi | Suomen Kommunistinen Puolue | 285
211
+ 13 Lappi | Muutos 2011 | 219
212
+ 13 Lappi | Kommunistinen Työväenpuolue–Rauhan ja Sosialismin puolesta | 39
@@ -0,0 +1,107 @@
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 Finland.
22
+ #
23
+ class Finland < Area
24
+ include Singleton
25
+
26
+ def area_code
27
+ 'FI'
28
+ end
29
+
30
+ def coalitions
31
+ COALITIONS
32
+ end
33
+
34
+ def no_of_seats
35
+ SEAT_DISTRIBUTION.values.inject(:+)
36
+ end
37
+
38
+ def overall_election_results_of_2015
39
+ if @overall_election_results_of_2015.nil?
40
+ @overall_election_results_of_2015 = \
41
+ summarize_election_results(election_results_of_2015)
42
+ end
43
+ @overall_election_results_of_2015
44
+ end
45
+
46
+ def population_size
47
+ POPULATION_SIZE
48
+ end
49
+
50
+ def seats(simulation)
51
+ electoral_system.project(simulation)
52
+ end
53
+
54
+ private
55
+
56
+ KD_PARTY = 'Kristillisdemokraatit'.freeze
57
+ KESK_PARTY = 'Suomen Keskusta'.freeze
58
+ KOK_PARTY = 'Kansallinen Kokoomus'.freeze
59
+ PS_PARTY = 'Perussuomalaiset'.freeze
60
+ SDP_PARTY = 'Suomen Sosialidemokraattinen Puolue'.freeze
61
+ SFP_PARTY = 'Svenska folkpartiet i Finland'.freeze
62
+ SIN_PARTY = 'Sininen tulevaisuus'.freeze
63
+ VAS_PARTY = 'Vasemmistoliitto'.freeze
64
+ VIHR_PARTY = 'Vihreä liitto'.freeze
65
+
66
+ COALITIONS = [[KD_PARTY, KESK_PARTY, KOK_PARTY, SFP_PARTY],
67
+ [KD_PARTY, KOK_PARTY, SDP_PARTY, SFP_PARTY],
68
+ [KD_PARTY, KOK_PARTY, SDP_PARTY, SFP_PARTY, VAS_PARTY,
69
+ VIHR_PARTY],
70
+ [KD_PARTY, KOK_PARTY, SDP_PARTY, SFP_PARTY, VIHR_PARTY],
71
+ [KESK_PARTY, KOK_PARTY, PS_PARTY],
72
+ [KESK_PARTY, KOK_PARTY, SIN_PARTY],
73
+ [SDP_PARTY, SFP_PARTY, VAS_PARTY, VIHR_PARTY],
74
+ [SDP_PARTY, VAS_PARTY, VIHR_PARTY]].freeze
75
+
76
+ # Voter turnout on 19 April 2015
77
+ # https://en.wikipedia.org/wiki/Finnish_parliamentary_election,_2015
78
+ POPULATION_SIZE = 2_968_459
79
+
80
+ SEAT_DISTRIBUTION = { '01 Helsinki' => 22, '02 Uusimaa' => 36,
81
+ '03 Varsinais-Suomi' => 17, '04 Satakunta' => 8,
82
+ '05 Ahvenanmaa' => 1, '06 Häme' => 14,
83
+ '07 Pirkanmaa' => 19, '08 Kaakkois-Suomi' => 17,
84
+ '09 Savo-Karjala' => 15, '10 Vaasa' => 16,
85
+ '11 Keski-Suomi' => 10, '12 Oulu' => 18,
86
+ '13 Lappi' => 7 }.freeze
87
+
88
+ def election_results_of_2015
89
+ if @election_results_of_2015.nil?
90
+ @election_results_of_2015 = load_election_results(
91
+ 'finland-20150419.psv'
92
+ )
93
+ end
94
+ @election_results_of_2015
95
+ end
96
+
97
+ def electoral_system
98
+ if @electoral_system.nil?
99
+ @electoral_system = MultiDistrictProportional.new( \
100
+ overall_election_results_of_2015, election_results_of_2015,
101
+ SEAT_DISTRIBUTION, DhondtDenominators
102
+ )
103
+ end
104
+ @electoral_system
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,107 @@
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 Finland extended with SIN.
22
+ #
23
+ class FinlandWithSin < Area
24
+ include Singleton
25
+
26
+ def area_code
27
+ 'FI∪{SIN}'
28
+ end
29
+
30
+ def coalitions
31
+ COALITIONS
32
+ end
33
+
34
+ def no_of_seats
35
+ SEAT_DISTRIBUTION.values.inject(:+)
36
+ end
37
+
38
+ def overall_election_results_of_2015
39
+ if @overall_election_results_of_2015.nil?
40
+ @overall_election_results_of_2015 = \
41
+ summarize_election_results(election_results_of_2015)
42
+ end
43
+ @overall_election_results_of_2015
44
+ end
45
+
46
+ def population_size
47
+ POPULATION_SIZE
48
+ end
49
+
50
+ def seats(simulation)
51
+ electoral_system.project(simulation)
52
+ end
53
+
54
+ private
55
+
56
+ KD_PARTY = 'Kristillisdemokraatit'.freeze
57
+ KESK_PARTY = 'Suomen Keskusta'.freeze
58
+ KOK_PARTY = 'Kansallinen Kokoomus'.freeze
59
+ PS_PARTY = 'Perussuomalaiset'.freeze
60
+ SDP_PARTY = 'Suomen Sosialidemokraattinen Puolue'.freeze
61
+ SFP_PARTY = 'Svenska folkpartiet i Finland'.freeze
62
+ SIN_PARTY = 'Sininen tulevaisuus'.freeze
63
+ VAS_PARTY = 'Vasemmistoliitto'.freeze
64
+ VIHR_PARTY = 'Vihreä liitto'.freeze
65
+
66
+ COALITIONS = [[KD_PARTY, KESK_PARTY, KOK_PARTY, SFP_PARTY],
67
+ [KD_PARTY, KOK_PARTY, SDP_PARTY, SFP_PARTY],
68
+ [KD_PARTY, KOK_PARTY, SDP_PARTY, SFP_PARTY, VAS_PARTY,
69
+ VIHR_PARTY],
70
+ [KD_PARTY, KOK_PARTY, SDP_PARTY, SFP_PARTY, VIHR_PARTY],
71
+ [KESK_PARTY, KOK_PARTY, PS_PARTY],
72
+ [KESK_PARTY, KOK_PARTY, SIN_PARTY],
73
+ [SDP_PARTY, SFP_PARTY, VAS_PARTY, VIHR_PARTY],
74
+ [SDP_PARTY, VAS_PARTY, VIHR_PARTY]].freeze
75
+
76
+ # Voter turnout on 19 April 2015
77
+ # https://en.wikipedia.org/wiki/Finnish_parliamentary_election,_2015
78
+ POPULATION_SIZE = 2_968_459
79
+
80
+ SEAT_DISTRIBUTION = { '01 Helsinki' => 22, '02 Uusimaa' => 36,
81
+ '03 Varsinais-Suomi' => 17, '04 Satakunta' => 8,
82
+ '05 Ahvenanmaa' => 1, '06 Häme' => 14,
83
+ '07 Pirkanmaa' => 19, '08 Kaakkois-Suomi' => 17,
84
+ '09 Savo-Karjala' => 15, '10 Vaasa' => 16,
85
+ '11 Keski-Suomi' => 10, '12 Oulu' => 18,
86
+ '13 Lappi' => 7 }.freeze
87
+
88
+ def election_results_of_2015
89
+ if @election_results_of_2015.nil?
90
+ @election_results_of_2015 = load_election_results(
91
+ 'finland-20150419-with-sin.psv'
92
+ )
93
+ end
94
+ @election_results_of_2015
95
+ end
96
+
97
+ def electoral_system
98
+ if @electoral_system.nil?
99
+ @electoral_system = MultiDistrictProportional.new( \
100
+ overall_election_results_of_2015, election_results_of_2015,
101
+ SEAT_DISTRIBUTION, DhondtDenominators
102
+ )
103
+ end
104
+ @electoral_system
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,96 @@
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: Wikipedia page about the elections of 25 May 2014 in Flanders,
19
+ # downloaded on 19 March 2016,
20
+ # URL: https://nl.wikipedia.org/wiki/Vlaamse_verkiezingen_2014
21
+
22
+ Antwerpen | N-VA | 411,001
23
+ Antwerpen | CD&V | 225,891
24
+ Antwerpen | sp.a | 128,760
25
+ Antwerpen | Groen | 111,234
26
+ Antwerpen | Open Vld | 108,209
27
+ Antwerpen | Vlaams Belang | 79,588
28
+ Antwerpen | PVDA | 43,694
29
+ Antwerpen | Piratenpartij | 7,514
30
+ Antwerpen | GENOEG | 3,521
31
+ Antwerpen | MAMA | 3,227
32
+ Antwerpen | ROSSEM | 2,773
33
+ Antwerpen | ROEL | 1,306
34
+ Antwerpen | VCP | 682
35
+
36
+ Brussel | Open Vld | 12,461
37
+ Brussel | Groen | 10,660
38
+ Brussel | sp.a | 9,558
39
+ Brussel | N-VA | 9,508
40
+ Brussel | CD&V | 6,284
41
+ Brussel | Vlaams Belang | 2,960
42
+ Brussel | PENSIOEN PLUS | 488
43
+
44
+ Limburg | N-VA | 176,512
45
+ Limburg | CD&V | 127,656
46
+ Limburg | sp.a | 94,721
47
+ Limburg | Open Vld | 66,269
48
+ Limburg | Groen | 32,713
49
+ Limburg | Vlaams Belang | 32,392
50
+ Limburg | PVDA | 14,257
51
+ Limburg | GENOEG | 1,475
52
+ Limburg | ROSSEM | 1,259
53
+ Limburg | VCP | 979
54
+ Limburg | ROEL | 872
55
+
56
+ Oost-Vlaanderen | N-VA | 300,638
57
+ Oost-Vlaanderen | CD&V | 179,572
58
+ Oost-Vlaanderen | Open Vld | 169,726
59
+ Oost-Vlaanderen | sp.a | 139,640
60
+ Oost-Vlaanderen | Groen | 88,977
61
+ Oost-Vlaanderen | Vlaams Belang | 62,881
62
+ Oost-Vlaanderen | PVDA | 23,029
63
+ Oost-Vlaanderen | Piratenpartij | 7,142
64
+ Oost-Vlaanderen | SD&P | 2,853
65
+ Oost-Vlaanderen | ROSSEM | 2,236
66
+ Oost-Vlaanderen | GENOEG | 2,177
67
+ Oost-Vlaanderen | ROEL | 1,017
68
+ Oost-Vlaanderen | VCP | 909
69
+
70
+ Vlaams-Brabant | N-VA | 204,139
71
+ Vlaams-Brabant | Open Vld | 133,362
72
+ Vlaams-Brabant | CD&V | 118,669
73
+ Vlaams-Brabant | sp.a | 85,105
74
+ Vlaams-Brabant | Groen | 64,836
75
+ Vlaams-Brabant | UF | 34,741
76
+ Vlaams-Brabant | Vlaams Belang | 30,531
77
+ Vlaams-Brabant | PVDA | 12,212
78
+ Vlaams-Brabant | Piratenpartij | 5,572
79
+ Vlaams-Brabant | GENOEG | 1,398
80
+ Vlaams-Brabant | ROSSEM | 1,302
81
+ Vlaams-Brabant | VCP | 1,007
82
+ Vlaams-Brabant | ROEL | 674
83
+
84
+ West-Vlaanderen | N-VA | 238,148
85
+ West-Vlaanderen | CD&V | 202,622
86
+ West-Vlaanderen | sp.a | 130,119
87
+ West-Vlaanderen | Open Vld | 104,442
88
+ West-Vlaanderen | Groen | 57,361
89
+ West-Vlaanderen | Vlaams Belang | 40,488
90
+ West-Vlaanderen | PVDA | 12,922
91
+ West-Vlaanderen | Piratenpartij | 5,758
92
+ West-Vlaanderen | ROSSEM | 2,407
93
+ West-Vlaanderen | GENOEG | 2,041
94
+ West-Vlaanderen | VCP | 1,449
95
+ West-Vlaanderen | ROEL | 1,359
96
+ West-Vlaanderen | VITAL | 617