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,125 @@
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 Poland.
22
+ #
23
+ class Poland < Area
24
+ include Singleton
25
+
26
+ def area_code
27
+ 'PL'
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
+ def threshold
55
+ PARTY_LIST_THRESHOLD
56
+ end
57
+
58
+ private
59
+
60
+ MN_PARTY = 'Mniejszość Niemiecka'.freeze
61
+ N_PARTY = '.Nowoczesna'.freeze
62
+ PIS_PARTY = 'Prawo i Sprawiedliwość'.freeze
63
+ PO_PARTY = 'Platforma Obywatelska'.freeze
64
+ PSL_PARTY = 'Polskie Stronnictwo Ludowe'.freeze
65
+ R_PARTY = 'Lewica Razem'.freeze
66
+ SLD_PARTY = 'Sojusz Lewicy Demokratycznej'.freeze
67
+ ZL_PARTY = 'Zjednoczona Lewica'.freeze
68
+
69
+ COALITIONS = [[N_PARTY, PO_PARTY],
70
+ [N_PARTY, PO_PARTY, PSL_PARTY],
71
+ [N_PARTY, PO_PARTY, PSL_PARTY, R_PARTY, SLD_PARTY],
72
+ [N_PARTY, PO_PARTY, PSL_PARTY, SLD_PARTY],
73
+ [N_PARTY, PO_PARTY, SLD_PARTY],
74
+ [PIS_PARTY],
75
+ [PO_PARTY]].freeze
76
+
77
+ # Voter turnout on 25 October 2015
78
+ # Source: Web page with the official results of the elections of 25 October
79
+ # 2015, downloaded on 17 July 2019,
80
+ # https://en.wikipedia.org/wiki/2015_Polish_parliamentary_election
81
+ POPULATION_SIZE = 15_200_671
82
+
83
+ SEAT_DISTRIBUTION = { 'Legnica' => 12, 'Wałbrzych' => 8, 'Wrocław' => 14,
84
+ 'Bydgoszcz' => 12, 'Toruń' => 13, 'Lublin' => 15,
85
+ 'Chełm' => 12, 'Zielona Góra' => 12, 'Łódź' => 10,
86
+ 'Piotrków Trybunalski' => 9, 'Sieradz' => 12,
87
+ 'Kraków I (południe)' => 8,
88
+ 'Kraków II (północ)' => 14, 'Nowy Sącz' => 10,
89
+ 'Tarnów' => 9, 'Płock' => 10, 'Radom' => 9,
90
+ 'Siedlce' => 12, 'Warszawa I (miasto)' => 20,
91
+ 'Warszawa II (okręg)' => 12, 'Opole' => 12,
92
+ 'Krosno' => 11, 'Rzeszów' => 15, 'Białystok' => 14,
93
+ 'Gdańsk' => 12, 'Gdynia' => 14, 'Bielsko-Biała' => 9,
94
+ 'Częstochowa' => 7, 'Gliwice' => 9, 'Rybnik' => 9,
95
+ 'Katowice' => 12, 'Sosnowiec' => 9, 'Kielce' => 16,
96
+ 'Elbląg' => 8, 'Olsztyn' => 10, 'Kalisz' => 12,
97
+ 'Konin' => 9, 'Piła' => 9, 'Poznań' => 10,
98
+ 'Koszalin' => 8, 'Szczecin' => 12 }.freeze
99
+
100
+ PARTY_LIST_THRESHOLD = 0.05
101
+ COALITION_LIST_THRESHOLD = 0.08
102
+ COALITION_LISTS = [ZL_PARTY].freeze
103
+ MINORITY_LISTS = [MN_PARTY].freeze
104
+
105
+ def election_results_of_2015
106
+ if @election_results_of_2015.nil?
107
+ @election_results_of_2015 = load_election_results(
108
+ 'poland-20151025.psv'
109
+ )
110
+ end
111
+ @election_results_of_2015
112
+ end
113
+
114
+ def electoral_system
115
+ if @electoral_system.nil?
116
+ @electoral_system = MultiDistrictVariableThresholdProportional.new( \
117
+ overall_election_results_of_2015, election_results_of_2015,
118
+ SEAT_DISTRIBUTION, DhondtDenominators, PARTY_LIST_THRESHOLD,
119
+ COALITION_LIST_THRESHOLD, COALITION_LISTS, MINORITY_LISTS
120
+ )
121
+ end
122
+ @electoral_system
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,122 @@
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 Poland, without .Nowoczesna, Platforma Obywatelska and
22
+ # Zjednoczona Lewica but with Koalicja Obywatelska and Lewica.
23
+ #
24
+ class PolandWithKoAndLWithoutNPoRAndZl < Area
25
+ include Singleton
26
+
27
+ def area_code
28
+ 'PL∪{KO,L}\{N,PO,R,ZL}'
29
+ end
30
+
31
+ def coalitions
32
+ COALITIONS
33
+ end
34
+
35
+ def no_of_seats
36
+ SEAT_DISTRIBUTION.values.inject(:+)
37
+ end
38
+
39
+ def overall_election_results_of_2015
40
+ if @overall_election_results_of_2015.nil?
41
+ @overall_election_results_of_2015 = \
42
+ summarize_election_results(election_results_of_2015)
43
+ end
44
+ @overall_election_results_of_2015
45
+ end
46
+
47
+ def population_size
48
+ POPULATION_SIZE
49
+ end
50
+
51
+ def seats(simulation)
52
+ electoral_system.project(simulation)
53
+ end
54
+
55
+ def threshold
56
+ PARTY_LIST_THRESHOLD
57
+ end
58
+
59
+ private
60
+
61
+ KO_PARTY = 'Koalicja Obywatelska'.freeze
62
+ L_PARTY = 'Lewica'.freeze
63
+ MN_PARTY = 'Mniejszość Niemiecka'.freeze
64
+ PIS_PARTY = 'Prawo i Sprawiedliwość'.freeze
65
+ PSL_PARTY = 'Polskie Stronnictwo Ludowe'.freeze
66
+ ZL_PARTY = 'Zjednoczona Lewica'.freeze
67
+
68
+ COALITIONS = [[KO_PARTY],
69
+ [KO_PARTY, PSL_PARTY],
70
+ [KO_PARTY, L_PARTY, PSL_PARTY],
71
+ [KO_PARTY, L_PARTY],
72
+ [PIS_PARTY]].freeze
73
+
74
+ # Voter turnout on 25 October 2015
75
+ # Source: Web page with the official results of the elections of 25 October
76
+ # 2015, downloaded on 17 July 2019,
77
+ # https://en.wikipedia.org/wiki/2015_Polish_parliamentary_election
78
+ POPULATION_SIZE = 15_200_671
79
+
80
+ SEAT_DISTRIBUTION = { 'Legnica' => 12, 'Wałbrzych' => 8, 'Wrocław' => 14,
81
+ 'Bydgoszcz' => 12, 'Toruń' => 13, 'Lublin' => 15,
82
+ 'Chełm' => 12, 'Zielona Góra' => 12, 'Łódź' => 10,
83
+ 'Piotrków Trybunalski' => 9, 'Sieradz' => 12,
84
+ 'Kraków I (południe)' => 8,
85
+ 'Kraków II (północ)' => 14, 'Nowy Sącz' => 10,
86
+ 'Tarnów' => 9, 'Płock' => 10, 'Radom' => 9,
87
+ 'Siedlce' => 12, 'Warszawa I (miasto)' => 20,
88
+ 'Warszawa II (okręg)' => 12, 'Opole' => 12,
89
+ 'Krosno' => 11, 'Rzeszów' => 15, 'Białystok' => 14,
90
+ 'Gdańsk' => 12, 'Gdynia' => 14, 'Bielsko-Biała' => 9,
91
+ 'Częstochowa' => 7, 'Gliwice' => 9, 'Rybnik' => 9,
92
+ 'Katowice' => 12, 'Sosnowiec' => 9, 'Kielce' => 16,
93
+ 'Elbląg' => 8, 'Olsztyn' => 10, 'Kalisz' => 12,
94
+ 'Konin' => 9, 'Piła' => 9, 'Poznań' => 10,
95
+ 'Koszalin' => 8, 'Szczecin' => 12 }.freeze
96
+
97
+ PARTY_LIST_THRESHOLD = 0.05
98
+ COALITION_LIST_THRESHOLD = 0.08
99
+ COALITION_LISTS = [KO_PARTY].freeze
100
+ MINORITY_LISTS = [MN_PARTY].freeze
101
+
102
+ def election_results_of_2015
103
+ if @election_results_of_2015.nil?
104
+ @election_results_of_2015 = load_election_results(
105
+ 'poland-20151025-with-ko-and-l-without-n-po-r-and-zl.psv'
106
+ )
107
+ end
108
+ @election_results_of_2015
109
+ end
110
+
111
+ def electoral_system
112
+ if @electoral_system.nil?
113
+ @electoral_system = MultiDistrictVariableThresholdProportional.new( \
114
+ overall_election_results_of_2015, election_results_of_2015,
115
+ SEAT_DISTRIBUTION, DhondtDenominators, PARTY_LIST_THRESHOLD,
116
+ COALITION_LIST_THRESHOLD, COALITION_LISTS, MINORITY_LISTS
117
+ )
118
+ end
119
+ @electoral_system
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,123 @@
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 Poland, without KORWiN, Kukiz’15, Lewica Razem,
22
+ # .Nowoczesna, Platforma Obywatelska, Polskie Stronnictwo Ludowe, Prawo i
23
+ # Sprawiedliwość and Zjednoczona Lewica but with Koalicja Obywatelska,
24
+ # Koalicja Polska, Konfederacja, Lewica and Zjednoczona Prawica.
25
+ #
26
+ class PolandWithKoKonfKpLAndZpWithoutKK15NPisPoPslRAndZl < Area
27
+ include Singleton
28
+
29
+ def area_code
30
+ 'PL∪{KO,KP,Konf,L,ZP}\{K,K15,N,PO,PSL,PiS,R,ZL}'
31
+ end
32
+
33
+ def coalitions
34
+ COALITIONS
35
+ end
36
+
37
+ def no_of_seats
38
+ SEAT_DISTRIBUTION.values.inject(:+)
39
+ end
40
+
41
+ def overall_election_results_of_2015
42
+ if @overall_election_results_of_2015.nil?
43
+ @overall_election_results_of_2015 = \
44
+ summarize_election_results(election_results_of_2015)
45
+ end
46
+ @overall_election_results_of_2015
47
+ end
48
+
49
+ def population_size
50
+ POPULATION_SIZE
51
+ end
52
+
53
+ def seats(simulation)
54
+ electoral_system.project(simulation)
55
+ end
56
+
57
+ def threshold
58
+ PARTY_LIST_THRESHOLD
59
+ end
60
+
61
+ private
62
+
63
+ KO_PARTY = 'Koalicja Obywatelska'.freeze
64
+ KP_PARTY = 'Koalicja Polska'.freeze
65
+ L_PARTY = 'Lewica'.freeze
66
+ MN_PARTY = 'Mniejszość Niemiecka'.freeze
67
+ ZP_PARTY = 'Zjednoczona Prawica'.freeze
68
+
69
+ COALITIONS = [[KO_PARTY],
70
+ [KO_PARTY, KP_PARTY],
71
+ [KO_PARTY, KP_PARTY, L_PARTY],
72
+ [KO_PARTY, L_PARTY],
73
+ [ZP_PARTY]].freeze
74
+
75
+ # Voter turnout on 25 October 2015
76
+ # Source: Web page with the official results of the elections of 25 October
77
+ # 2015, downloaded on 17 July 2019,
78
+ # https://en.wikipedia.org/wiki/2015_Polish_parliamentary_election
79
+ POPULATION_SIZE = 15_200_671
80
+
81
+ SEAT_DISTRIBUTION = { 'Legnica' => 12, 'Wałbrzych' => 8, 'Wrocław' => 14,
82
+ 'Bydgoszcz' => 12, 'Toruń' => 13, 'Lublin' => 15,
83
+ 'Chełm' => 12, 'Zielona Góra' => 12, 'Łódź' => 10,
84
+ 'Piotrków Trybunalski' => 9, 'Sieradz' => 12,
85
+ 'Kraków I (południe)' => 8,
86
+ 'Kraków II (północ)' => 14, 'Nowy Sącz' => 10,
87
+ 'Tarnów' => 9, 'Płock' => 10, 'Radom' => 9,
88
+ 'Siedlce' => 12, 'Warszawa I (miasto)' => 20,
89
+ 'Warszawa II (okręg)' => 12, 'Opole' => 12,
90
+ 'Krosno' => 11, 'Rzeszów' => 15, 'Białystok' => 14,
91
+ 'Gdańsk' => 12, 'Gdynia' => 14, 'Bielsko-Biała' => 9,
92
+ 'Częstochowa' => 7, 'Gliwice' => 9, 'Rybnik' => 9,
93
+ 'Katowice' => 12, 'Sosnowiec' => 9, 'Kielce' => 16,
94
+ 'Elbląg' => 8, 'Olsztyn' => 10, 'Kalisz' => 12,
95
+ 'Konin' => 9, 'Piła' => 9, 'Poznań' => 10,
96
+ 'Koszalin' => 8, 'Szczecin' => 12 }.freeze
97
+
98
+ PARTY_LIST_THRESHOLD = 0.05
99
+ COALITION_LIST_THRESHOLD = 0.08
100
+ COALITION_LISTS = [KO_PARTY, ZP_PARTY].freeze
101
+ MINORITY_LISTS = [MN_PARTY].freeze
102
+
103
+ def election_results_of_2015
104
+ if @election_results_of_2015.nil?
105
+ @election_results_of_2015 = load_election_results(
106
+ 'poland-20151025-with-ko-konf-kp-l-and-zp-without-k-k15-n-pis-po-psl-r-and-zl.psv'
107
+ )
108
+ end
109
+ @election_results_of_2015
110
+ end
111
+
112
+ def electoral_system
113
+ if @electoral_system.nil?
114
+ @electoral_system = MultiDistrictVariableThresholdProportional.new( \
115
+ overall_election_results_of_2015, election_results_of_2015,
116
+ SEAT_DISTRIBUTION, DhondtDenominators, PARTY_LIST_THRESHOLD,
117
+ COALITION_LIST_THRESHOLD, COALITION_LISTS, MINORITY_LISTS
118
+ )
119
+ end
120
+ @electoral_system
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,125 @@
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 Poland, without .Nowoczesna, Platforma Obywatelska and
22
+ # Zjednoczona Lewica but with Koalicja Obywatelska, Sojusz Lewicy
23
+ # Demokratycznej and Wiosna.
24
+ #
25
+ class PolandWithKoSldAndWiWithoutNPoAndZl < Area
26
+ include Singleton
27
+
28
+ def area_code
29
+ 'PL∪{KO,SLD,Wi}\{N,PO,ZL}'
30
+ end
31
+
32
+ def coalitions
33
+ COALITIONS
34
+ end
35
+
36
+ def no_of_seats
37
+ SEAT_DISTRIBUTION.values.inject(:+)
38
+ end
39
+
40
+ def overall_election_results_of_2015
41
+ if @overall_election_results_of_2015.nil?
42
+ @overall_election_results_of_2015 = \
43
+ summarize_election_results(election_results_of_2015)
44
+ end
45
+ @overall_election_results_of_2015
46
+ end
47
+
48
+ def population_size
49
+ POPULATION_SIZE
50
+ end
51
+
52
+ def seats(simulation)
53
+ electoral_system.project(simulation)
54
+ end
55
+
56
+ def threshold
57
+ PARTY_LIST_THRESHOLD
58
+ end
59
+
60
+ private
61
+
62
+ KO_PARTY = 'Koalicja Obywatelska'.freeze
63
+ MN_PARTY = 'Mniejszość Niemiecka'.freeze
64
+ PIS_PARTY = 'Prawo i Sprawiedliwość'.freeze
65
+ PSL_PARTY = 'Polskie Stronnictwo Ludowe'.freeze
66
+ R_PARTY = 'Lewica Razem'.freeze
67
+ SLD_PARTY = 'Sojusz Lewicy Demokratycznej'.freeze
68
+ ZL_PARTY = 'Zjednoczona Lewica'.freeze
69
+
70
+ COALITIONS = [[KO_PARTY],
71
+ [KO_PARTY, PSL_PARTY],
72
+ [KO_PARTY, PSL_PARTY, R_PARTY, SLD_PARTY],
73
+ [KO_PARTY, PSL_PARTY, SLD_PARTY],
74
+ [KO_PARTY, SLD_PARTY],
75
+ [PIS_PARTY]].freeze
76
+
77
+ # Voter turnout on 25 October 2015
78
+ # Source: Web page with the official results of the elections of 25 October
79
+ # 2015, downloaded on 17 July 2019,
80
+ # https://en.wikipedia.org/wiki/2015_Polish_parliamentary_election
81
+ POPULATION_SIZE = 15_200_671
82
+
83
+ SEAT_DISTRIBUTION = { 'Legnica' => 12, 'Wałbrzych' => 8, 'Wrocław' => 14,
84
+ 'Bydgoszcz' => 12, 'Toruń' => 13, 'Lublin' => 15,
85
+ 'Chełm' => 12, 'Zielona Góra' => 12, 'Łódź' => 10,
86
+ 'Piotrków Trybunalski' => 9, 'Sieradz' => 12,
87
+ 'Kraków I (południe)' => 8,
88
+ 'Kraków II (północ)' => 14, 'Nowy Sącz' => 10,
89
+ 'Tarnów' => 9, 'Płock' => 10, 'Radom' => 9,
90
+ 'Siedlce' => 12, 'Warszawa I (miasto)' => 20,
91
+ 'Warszawa II (okręg)' => 12, 'Opole' => 12,
92
+ 'Krosno' => 11, 'Rzeszów' => 15, 'Białystok' => 14,
93
+ 'Gdańsk' => 12, 'Gdynia' => 14, 'Bielsko-Biała' => 9,
94
+ 'Częstochowa' => 7, 'Gliwice' => 9, 'Rybnik' => 9,
95
+ 'Katowice' => 12, 'Sosnowiec' => 9, 'Kielce' => 16,
96
+ 'Elbląg' => 8, 'Olsztyn' => 10, 'Kalisz' => 12,
97
+ 'Konin' => 9, 'Piła' => 9, 'Poznań' => 10,
98
+ 'Koszalin' => 8, 'Szczecin' => 12 }.freeze
99
+
100
+ PARTY_LIST_THRESHOLD = 0.05
101
+ COALITION_LIST_THRESHOLD = 0.08
102
+ COALITION_LISTS = [KO_PARTY].freeze
103
+ MINORITY_LISTS = [MN_PARTY].freeze
104
+
105
+ def election_results_of_2015
106
+ if @election_results_of_2015.nil?
107
+ @election_results_of_2015 = load_election_results(
108
+ 'poland-20151025-with-ko-sld-and-wi-without-n-po-and-zl.psv'
109
+ )
110
+ end
111
+ @election_results_of_2015
112
+ end
113
+
114
+ def electoral_system
115
+ if @electoral_system.nil?
116
+ @electoral_system = MultiDistrictVariableThresholdProportional.new( \
117
+ overall_election_results_of_2015, election_results_of_2015,
118
+ SEAT_DISTRIBUTION, DhondtDenominators, PARTY_LIST_THRESHOLD,
119
+ COALITION_LIST_THRESHOLD, COALITION_LISTS, MINORITY_LISTS
120
+ )
121
+ end
122
+ @electoral_system
123
+ end
124
+ end
125
+ end