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,116 @@
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
+ # The regional data for Hungary.
23
+ #
24
+ class Hungary < Area
25
+ include Singleton
26
+
27
+ def area_code
28
+ 'HU'
29
+ end
30
+
31
+ def coalitions
32
+ COALITIONS
33
+ end
34
+
35
+ def individual_constituencies_seats(simulation)
36
+ individual_constituencies_electoral_system.project(simulation)
37
+ end
38
+
39
+ def no_of_seats
40
+ NO_OF_PROPORTIONAL_SEATS + \
41
+ individual_constituencies_election_results_of_2014.size
42
+ end
43
+
44
+ def overall_individual_constituencies_election_results_of_2014
45
+ if @overall_individual_constituencies_election_results_of_2014.nil?
46
+ @overall_individual_constituencies_election_results_of_2014 = \
47
+ summarize_election_results( \
48
+ individual_constituencies_election_results_of_2014
49
+ )
50
+ end
51
+ @overall_individual_constituencies_election_results_of_2014
52
+ end
53
+
54
+ def party_list_seats(simulation)
55
+ PARTY_LIST_ELECTORAL_SYSTEM.project(simulation)
56
+ end
57
+
58
+ def population_size
59
+ # Voter turnout on 6 April 2014
60
+ # Source: Wikipedia, Hungarian parliamentary election, 2014, downloaded
61
+ # on 10 November 2017,
62
+ # https://en.wikipedia.org/wiki/Hungarian_parliamentary_election,_2014
63
+ 5_047_363
64
+ end
65
+
66
+ def seats(simulation)
67
+ individual_seats = individual_constituencies_seats(simulation)
68
+ party_seats = party_list_seats(simulation)
69
+ join_seats(individual_seats, party_seats)
70
+ end
71
+
72
+ def threshold
73
+ THRESHOLD
74
+ end
75
+
76
+ private
77
+
78
+ NO_OF_PROPORTIONAL_SEATS = 93
79
+ THRESHOLD = 0.05
80
+ PARTY_LIST_ELECTORAL_SYSTEM = SingleDistrictProportional.new(\
81
+ NO_OF_PROPORTIONAL_SEATS, DhondtDenominators, THRESHOLD
82
+ )
83
+
84
+ COALITIONS = [%w(DK Együtt MLP MSZP Párbeszéd), ['Fidesz–KDNP']].freeze
85
+
86
+ def individual_constituencies_election_results_of_2014
87
+ if @individual_constituencies_election_results_of_2014.nil?
88
+ @individual_constituencies_election_results_of_2014 = \
89
+ load_election_results('hungary-2014.psv')
90
+ end
91
+ @individual_constituencies_election_results_of_2014
92
+ end
93
+
94
+ def individual_constituencies_electoral_system
95
+ if @individual_constituencies_electoral_system.nil?
96
+ @individual_constituencies_electoral_system = FirstPastThePost.new(
97
+ overall_individual_constituencies_election_results_of_2014,
98
+ individual_constituencies_election_results_of_2014
99
+ )
100
+ end
101
+ @individual_constituencies_electoral_system
102
+ end
103
+
104
+ def join_seats(seats1, seats2)
105
+ results = seats1.dup
106
+ seats2.each_pair do |party, result|
107
+ if results.key?(party)
108
+ results[party] += result
109
+ else
110
+ results[party] = result
111
+ end
112
+ end
113
+ results
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,94 @@
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 29 October
19
+ # 2016, downloaded on 17 September 2017,
20
+ # URL: http://icelandmonitor.mbl.is/elections2016/
21
+
22
+ Norðaustur | Sjálfstæðisflokkurinn | 6,014
23
+ Norðaustur | Framsóknarflokkurinn | 2,271
24
+ Norðaustur | Miðflokkurinn | 2,271
25
+ Norðaustur | Vinstrihreyfingin – grænt framboð | 4,539
26
+ Norðaustur | Píratar | 2,265
27
+ Norðaustur | Samfylkingin | 1,816
28
+ Norðaustur | Viðreisn | 1,482
29
+ Norðaustur | Björt framtíð | 774
30
+ Norðaustur | Flokkur fólksins | 645
31
+ Norðaustur | Dögun | 415
32
+ Norðaustur | Alþýðufylkingin | 211
33
+
34
+ Norðvestur | Sjálfstæðisflokkurinn | 4,951
35
+ Norðvestur | Framsóknarflokkurinn | 1,741
36
+ Norðvestur | Miðflokkurinn | 1,741
37
+ Norðvestur | Vinstrihreyfingin – grænt framboð | 3,032
38
+ Norðvestur | Píratar | 1,823
39
+ Norðvestur | Samfylkingin | 1,054
40
+ Norðvestur | Viðreisn | 1,044
41
+ Norðvestur | Björt framtíð | 590
42
+ Norðvestur | Flokkur fólksins | 412
43
+ Norðvestur | Dögun | 282
44
+ Norðvestur | Íslenska þjóðfylkingin | 90
45
+
46
+ Reykjavík norður | Sjálfstæðisflokkurinn | 8,538
47
+ Reykjavík norður | Vinstrihreyfingin – grænt framboð | 7,318
48
+ Reykjavík norður | Píratar | 6,655
49
+ Reykjavík norður | Viðreisn | 4,064
50
+ Reykjavík norður | Björt framtíð | 2,673
51
+ Reykjavík norður | Framsóknarflokkurinn | 994
52
+ Reykjavík norður | Miðflokkurinn | 993
53
+ Reykjavík norður | Samfylkingin | 1,822
54
+ Reykjavík norður | Flokkur fólksins | 1,321
55
+ Reykjavík norður | Dögun | 496
56
+ Reykjavík norður | Alþýðufylkingin | 104
57
+
58
+ Reykjavík suður | Sjálfstæðisflokkurinn | 8,929
59
+ Reykjavík suður | Vinstrihreyfingin – grænt framboð | 6,148
60
+ Reykjavík suður | Píratar | 6,021
61
+ Reykjavík suður | Viðreisn | 4,440
62
+ Reykjavík suður | Framsóknarflokkurinn | 1,282
63
+ Reykjavík suður | Miðflokkurinn | 1,282
64
+ Reykjavík suður | Björt framtíð | 2,518
65
+ Reykjavík suður | Samfylkingin | 1,944
66
+ Reykjavík suður | Flokkur fólksins | 1,614
67
+ Reykjavík suður | Dögun | 578
68
+ Reykjavík suður | Alþýðufylkingin | 79
69
+ Reykjavík suður | Húmanistaflokkurinn | 33
70
+
71
+ Suðvestur | Sjálfstæðisflokkurinn | 18,049
72
+ Suðvestur | Píratar | 7,227
73
+ Suðvestur | Viðreisn | 6,857
74
+ Suðvestur | Vinstrihreyfingin – grænt framboð | 6,378
75
+ Suðvestur | Björt framtíð | 5,458
76
+ Suðvestur | Framsóknarflokkurinn | 2,031
77
+ Suðvestur | Miðflokkurinn | 2,031
78
+ Suðvestur | Samfylkingin | 2,532
79
+ Suðvestur | Flokkur fólksins | 1,742
80
+ Suðvestur | Dögun | 893
81
+ Suðvestur | Alþýðufylkingin | 103
82
+
83
+ Suður | Sjálfstæðisflokkurinn | 8,509
84
+ Suður | Framsóknarflokkurinn | 2,577
85
+ Suður | Miðflokkurinn | 2,577
86
+ Suður | Píratar | 3,458
87
+ Suður | Vinstrihreyfingin – grænt framboð | 2,751
88
+ Suður | Viðreisn | 1,983
89
+ Suður | Samfylkingin | 1,725
90
+ Suður | Björt framtíð | 1,565
91
+ Suður | Flokkur fólksins | 973
92
+ Suður | Dögun | 611
93
+ Suður | Íslenska þjóðfylkingin | 213
94
+ Suður | Alþýðufylkingin | 78
@@ -0,0 +1,88 @@
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 29 October
19
+ # 2016, downloaded on 17 September 2017,
20
+ # URL: http://icelandmonitor.mbl.is/elections2016/
21
+
22
+ Norðaustur | Sjálfstæðisflokkurinn | 6,014
23
+ Norðaustur | Framsóknarflokkurinn | 4,542
24
+ Norðaustur | Vinstrihreyfingin – grænt framboð | 4,539
25
+ Norðaustur | Píratar | 2,265
26
+ Norðaustur | Samfylkingin | 1,816
27
+ Norðaustur | Viðreisn | 1,482
28
+ Norðaustur | Björt framtíð | 774
29
+ Norðaustur | Flokkur fólksins | 645
30
+ Norðaustur | Dögun | 415
31
+ Norðaustur | Alþýðufylkingin | 211
32
+
33
+ Norðvestur | Sjálfstæðisflokkurinn | 4,951
34
+ Norðvestur | Framsóknarflokkurinn | 3,482
35
+ Norðvestur | Vinstrihreyfingin – grænt framboð | 3,032
36
+ Norðvestur | Píratar | 1,823
37
+ Norðvestur | Samfylkingin | 1,054
38
+ Norðvestur | Viðreisn | 1,044
39
+ Norðvestur | Björt framtíð | 590
40
+ Norðvestur | Flokkur fólksins | 412
41
+ Norðvestur | Dögun | 282
42
+ Norðvestur | Íslenska þjóðfylkingin | 90
43
+
44
+ Reykjavík norður | Sjálfstæðisflokkurinn | 8,538
45
+ Reykjavík norður | Vinstrihreyfingin – grænt framboð | 7,318
46
+ Reykjavík norður | Píratar | 6,655
47
+ Reykjavík norður | Viðreisn | 4,064
48
+ Reykjavík norður | Björt framtíð | 2,673
49
+ Reykjavík norður | Framsóknarflokkurinn | 1,987
50
+ Reykjavík norður | Samfylkingin | 1,822
51
+ Reykjavík norður | Flokkur fólksins | 1,321
52
+ Reykjavík norður | Dögun | 496
53
+ Reykjavík norður | Alþýðufylkingin | 104
54
+
55
+ Reykjavík suður | Sjálfstæðisflokkurinn | 8,929
56
+ Reykjavík suður | Vinstrihreyfingin – grænt framboð | 6,148
57
+ Reykjavík suður | Píratar | 6,021
58
+ Reykjavík suður | Viðreisn | 4,440
59
+ Reykjavík suður | Framsóknarflokkurinn | 2,564
60
+ Reykjavík suður | Björt framtíð | 2,518
61
+ Reykjavík suður | Samfylkingin | 1,944
62
+ Reykjavík suður | Flokkur fólksins | 1,614
63
+ Reykjavík suður | Dögun | 578
64
+ Reykjavík suður | Alþýðufylkingin | 79
65
+ Reykjavík suður | Húmanistaflokkurinn | 33
66
+
67
+ Suðvestur | Sjálfstæðisflokkurinn | 18,049
68
+ Suðvestur | Píratar | 7,227
69
+ Suðvestur | Viðreisn | 6,857
70
+ Suðvestur | Vinstrihreyfingin – grænt framboð | 6,378
71
+ Suðvestur | Björt framtíð | 5,458
72
+ Suðvestur | Framsóknarflokkurinn | 4,062
73
+ Suðvestur | Samfylkingin | 2,532
74
+ Suðvestur | Flokkur fólksins | 1,742
75
+ Suðvestur | Dögun | 893
76
+ Suðvestur | Alþýðufylkingin | 103
77
+
78
+ Suður | Sjálfstæðisflokkurinn | 8,509
79
+ Suður | Framsóknarflokkurinn | 5,154
80
+ Suður | Píratar | 3,458
81
+ Suður | Vinstrihreyfingin – grænt framboð | 2,751
82
+ Suður | Viðreisn | 1,983
83
+ Suður | Samfylkingin | 1,725
84
+ Suður | Björt framtíð | 1,565
85
+ Suður | Flokkur fólksins | 973
86
+ Suður | Dögun | 611
87
+ Suður | Íslenska þjóðfylkingin | 213
88
+ Suður | Alþýðufylkingin | 78
@@ -0,0 +1,85 @@
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 28 October
19
+ # 2017, downloaded on 20 November 2017,
20
+ # URL: http://icelandmonitor.mbl.is/elections2017/
21
+
22
+ Norðaustur | Sjálfstæðisflokkurinn | 4,787
23
+ Norðaustur | Vinstrihreyfingin – grænt framboð | 4,699
24
+ Norðaustur | Miðflokkurinn | 4,388
25
+ Norðaustur | Framsóknarflokkurinn | 3,386
26
+ Norðaustur | Samfylkingin | 3,275
27
+ Norðaustur | Píratar | 1,295
28
+ Norðaustur | Flokkur fólksins | 1,005
29
+ Norðaustur | Viðreisn | 495
30
+ Norðaustur | Björt framtíð | 169
31
+ Norðaustur | Alþýðufylkingin | 110
32
+
33
+ Norðvestur | Sjálfstæðisflokkurinn | 4,233
34
+ Norðvestur | Framsóknarflokkurinn | 3,177
35
+ Norðvestur | Vinstrihreyfingin – grænt framboð | 3,067
36
+ Norðvestur | Miðflokkurinn | 2,456
37
+ Norðvestur | Samfylkingin | 1,681
38
+ Norðvestur | Píratar | 1,169
39
+ Norðvestur | Flokkur fólksins | 911
40
+ Norðvestur | Viðreisn | 423
41
+ Norðvestur | Björt framtíð | 135
42
+
43
+ Reykjavík norður | Sjálfstæðisflokkurinn | 8,108
44
+ Reykjavík norður | Vinstrihreyfingin – grænt framboð | 7,727
45
+ Reykjavík norður | Píratar | 4,885
46
+ Reykjavík norður | Samfylkingin | 4,575
47
+ Reykjavík norður | Viðreisn | 3,013
48
+ Reykjavík norður | Flokkur fólksins | 2,547
49
+ Reykjavík norður | Miðflokkurinn | 2,509
50
+ Reykjavík norður | Framsóknarflokkurinn | 1,901
51
+ Reykjavík norður | Björt framtíð | 506
52
+ Reykjavík norður | Alþýðufylkingin | 105
53
+
54
+ Reykjavík suður | Sjálfstæðisflokkurinn | 8,143
55
+ Reykjavík suður | Vinstrihreyfingin – grænt framboð | 6,750
56
+ Reykjavík suður | Samfylkingin | 4,661
57
+ Reykjavík suður | Píratar | 4,076
58
+ Reykjavík suður | Viðreisn | 3,043
59
+ Reykjavík suður | Flokkur fólksins | 2,914
60
+ Reykjavík suður | Framsóknarflokkurinn | 2,897
61
+ Reykjavík suður | Miðflokkurinn | 2,701
62
+ Reykjavík suður | Björt framtíð | 449
63
+ Reykjavík suður | Alþýðufylkingin | 85
64
+
65
+ Suður | Sjálfstæðisflokkurinn | 7,056
66
+ Suður | Framsóknarflokkurinn | 5,230
67
+ Suður | Miðflokkurinn | 3,999
68
+ Suður | Vinstrihreyfingin – grænt framboð | 3,321
69
+ Suður | Samfylkingin | 2,689
70
+ Suður | Flokkur fólksins | 2,509
71
+ Suður | Píratar | 1,985
72
+ Suður | Viðreisn | 871
73
+ Suður | Björt framtíð | 289
74
+ Suður | Dögun | 101
75
+
76
+ Suðvestur | Sjálfstæðisflokkurinn | 17,216
77
+ Suðvestur | Vinstrihreyfingin – grænt framboð | 7,591
78
+ Suðvestur | Samfylkingin | 6,771
79
+ Suðvestur | Miðflokkurinn | 5,282
80
+ Suðvestur | Viðreisn | 5,277
81
+ Suðvestur | Píratar | 4,641
82
+ Suðvestur | Framsóknarflokkurinn | 4,425
83
+ Suðvestur | Flokkur fólksins | 3,616
84
+ Suðvestur | Björt framtíð | 846
85
+ Suðvestur | Alþýðufylkingin | 75
@@ -0,0 +1,133 @@
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
+ # The regional data for Iceland.
23
+ #
24
+ class Iceland < Area
25
+ include Singleton
26
+
27
+ def area_code
28
+ 'IS'
29
+ end
30
+
31
+ def coalitions
32
+ COALITIONS
33
+ end
34
+
35
+ def no_of_seats
36
+ NO_OF_SEATS
37
+ end
38
+
39
+ def overall_election_results_of_2017
40
+ if @overall_election_results_of_2017.nil?
41
+ @overall_election_results_of_2017 = \
42
+ summarize_election_results(election_results_of_2017)
43
+ end
44
+ @overall_election_results_of_2017
45
+ end
46
+
47
+ def population_size
48
+ # Voter turnout on 28 October 2017
49
+ # Source: Wikipedia, Icelandic parliamentary election, 2017, downloaded
50
+ # on 20 November 2017,
51
+ # https://en.wikipedia.org/wiki/Icelandic_parliamentary_election,_2017
52
+ 196_246
53
+ end
54
+
55
+ def seat_distribution
56
+ SEAT_DISTRIBUTION
57
+ end
58
+
59
+ def seats(simulation)
60
+ electoral_system.project(simulation)
61
+ end
62
+
63
+ def threshold
64
+ LEVELING_THRESHOLD
65
+ end
66
+
67
+ private
68
+
69
+ COALITIONS = [['Björt framtíð', 'Píratar', 'Samfylkingin', 'Viðreisn',
70
+ 'Vinstrihreyfingin – grænt framboð'],
71
+ ['Björt framtíð', 'Píratar', 'Samfylkingin',
72
+ 'Vinstrihreyfingin – grænt framboð'],
73
+ ['Björt framtíð', 'Sjálfstæðisflokkurinn'],
74
+ ['Björt framtíð', 'Sjálfstæðisflokkurinn', 'Viðreisn'],
75
+ ['Framsóknarflokkurinn', 'Miðflokkurinn', 'Samfylkingin',
76
+ 'Vinstrihreyfingin – grænt framboð'],
77
+ %w(Framsóknarflokkurinn Miðflokkurinn Sjálfstæðisflokkurinn),
78
+ ['Framsóknarflokkurinn', 'Miðflokkurinn',
79
+ 'Vinstrihreyfingin – grænt framboð'],
80
+ ['Framsóknarflokkurinn', 'Samfylkingin',
81
+ 'Vinstrihreyfingin – grænt framboð'],
82
+ %w(Framsóknarflokkurinn Sjálfstæðisflokkurinn),
83
+ ['Framsóknarflokkurinn', 'Sjálfstæðisflokkurinn',
84
+ 'Vinstrihreyfingin – grænt framboð'],
85
+ ['Framsóknarflokkurinn', 'Vinstrihreyfingin – grænt framboð'],
86
+ ['Miðflokkurinn', 'Samfylkingin',
87
+ 'Vinstrihreyfingin – grænt framboð'],
88
+ %w(Miðflokkurinn Sjálfstæðisflokkurinn),
89
+ ['Miðflokkurinn', 'Vinstrihreyfingin – grænt framboð'],
90
+ %w(Samfylkingin Sjálfstæðisflokkurinn),
91
+ ['Píratar', 'Samfylkingin', 'Viðreisn',
92
+ 'Vinstrihreyfingin – grænt framboð'],
93
+ ['Píratar', 'Samfylkingin',
94
+ 'Vinstrihreyfingin – grænt framboð'],
95
+ ['Píratar', 'Vinstrihreyfingin – grænt framboð'],
96
+ ['Samfylkingin', 'Vinstrihreyfingin – grænt framboð'],
97
+ %w(Sjálfstæðisflokkurinn Viðreisn),
98
+ ['Sjálfstæðisflokkurinn',
99
+ 'Vinstrihreyfingin – grænt framboð']].freeze
100
+
101
+ DIRECT_SEAT_DISTRIBUTION = { 'Norðaustur' => 9, 'Norðvestur' => 9,
102
+ 'Reykjavík norður' => 9,
103
+ 'Reykjavík suður' => 9, 'Suðvestur' => 9,
104
+ 'Suður' => 9 }.freeze
105
+
106
+ NO_OF_LEVELING_SEATS = 9
107
+
108
+ LEVELING_THRESHOLD = 0.05
109
+
110
+ NO_OF_SEATS = NO_OF_LEVELING_SEATS + \
111
+ DIRECT_SEAT_DISTRIBUTION.values.inject(:+)
112
+
113
+ def election_results_of_2017
114
+ if @election_results_of_2017.nil?
115
+ @election_results_of_2017 = load_election_results(
116
+ 'iceland-20171028.psv'
117
+ )
118
+ end
119
+ @election_results_of_2017
120
+ end
121
+
122
+ def electoral_system
123
+ if @electoral_system.nil?
124
+ @electoral_system = MultiDistrictLeveledProportional.new(
125
+ overall_election_results_of_2017, election_results_of_2017,
126
+ DIRECT_SEAT_DISTRIBUTION, NO_OF_LEVELING_SEATS, LEVELING_THRESHOLD,
127
+ DhondtDenominators
128
+ )
129
+ end
130
+ @electoral_system
131
+ end
132
+ end
133
+ end