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,87 @@
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: Argos, Archivo historico electoral, retrieved on 23 May 2015.
19
+ # URL: http://www.argos.gva.es/ahe/index.html
20
+
21
+ Barcelona | Convergència i Unió | 762,628
22
+ Barcelona | Partit dels Socialistes de Catalunya | 418,847
23
+ Barcelona | Partit Popular de Catalunya | 361,656
24
+ Barcelona | Esquerra Republicana de Catalunya – Catalunya Sí | 346,662
25
+ Barcelona | Iniciativa per Catalunya Verds – Esquerra Unida i Alternativa | 303,625
26
+ Barcelona | Ciutadans-Partido de la Ciudadanía | 229,746
27
+ Barcelona | Candidatura d'Unitat Popular – Alternativa d'Esquerres | 92,794
28
+ Barcelona | Plataforma per Catalunya | 51,403
29
+ Barcelona | Solidaritat Catalana per la Independència | 32,296
30
+ Barcelona | Escons en Blanc | 22,817
31
+ Barcelona | Partido Animalista Contra el Maltrato Animal | 16,479
32
+ Barcelona | Pirates de Catalunya | 15,241
33
+ Barcelona | Unió, Progrés i Democràcia | 12,147
34
+ Barcelona | Farts.cat | 9,185
35
+ Barcelona | Via Democràtica | 5,984
36
+ Barcelona | Unificació Comunista d'Espanya | 1,998
37
+
38
+ Girona | Convergència i Unió | 148,237
39
+ Girona | Esquerra Republicana de Catalunya – Catalunya Sí | 61,358
40
+ Girona | Partit dels Socialistes de Catalunya | 34,688
41
+ Girona | Partit Popular de Catalunya | 33,096
42
+ Girona | Iniciativa per Catalunya Verds – Esquerra Unida i Alternativa | 20,397
43
+ Girona | Candidatura d'Unitat Popular – Alternativa d'Esquerres | 14,499
44
+ Girona | Ciutadans-Partido de la Ciudadanía | 12,341
45
+ Girona | Solidaritat Catalana per la Independència | 6,011
46
+ Girona | Plataforma per Catalunya | 3,377
47
+ Girona | Escons en Blanc | 1,946
48
+ Girona | Partido Animalista Contra el Maltrato Animal | 1,565
49
+ Girona | Pirates de Catalunya | 1,137
50
+ Girona | Farts.cat | 718
51
+ Girona | Unió, Progrés i Democràcia | 701
52
+ Girona | Partit Republicà d'Esquerra – Izquierda Republicana | 525
53
+ Girona | Unificació Comunista d'Espanya | 201
54
+
55
+ Lleida | Convergència i Unió | 89,035
56
+ Lleida | Esquerra Republicana de Catalunya – Catalunya Sí | 36,011
57
+ Lleida | Partit Popular de Catalunya | 23,338
58
+ Lleida | Partit dels Socialistes de Catalunya | 21,598
59
+ Lleida | Iniciativa per Catalunya Verds – Esquerra Unida i Alternativa | 11,145
60
+ Lleida | Ciutadans-Partido de la Ciudadanía | 6,881
61
+ Lleida | Candidatura d'Unitat Popular – Alternativa d'Esquerres | 6,302
62
+ Lleida | Solidaritat Catalana per la Independència | 3,038
63
+ Lleida | Escons en Blanc | 1,417
64
+ Lleida | Plataforma per Catalunya | 1,224
65
+ Lleida | Partido Animalista Contra el Maltrato Animal | 752
66
+ Lleida | Pirates de Catalunya | 642
67
+ Lleida | Farts.cat | 476
68
+ Lleida | Unió, Progrés i Democràcia | 392
69
+ Lleida | Partit Republicà d'Esquerra – Izquierda Republicana | 301
70
+ Lleida | Unificació Comunista d'Espanya | 90
71
+
72
+ Tarragona | Convergència i Unió | 113,657
73
+ Tarragona | Esquerra Republicana de Catalunya – Catalunya Sí | 54,093
74
+ Tarragona | Partit Popular de Catalunya | 53,591
75
+ Tarragona | Partit dels Socialistes de Catalunya | 48,642
76
+ Tarragona | Ciutadans-Partido de la Ciudadanía | 26,039
77
+ Tarragona | Iniciativa per Catalunya Verds – Esquerra Unida i Alternativa | 24,538
78
+ Tarragona | Candidatura d'Unitat Popular – Alternativa d'Esquerres | 12,840
79
+ Tarragona | Solidaritat Catalana per la Independència | 5,493
80
+ Tarragona | Plataforma per Catalunya | 4,103
81
+ Tarragona | Escons en Blanc | 2,108
82
+ Tarragona | Partido Animalista Contra el Maltrato Animal | 2,065
83
+ Tarragona | Unió, Progrés i Democràcia | 1,373
84
+ Tarragona | Farts.cat | 1,323
85
+ Tarragona | Pirates de Catalunya | 1,199
86
+ Tarragona | Socialistes i Republicans | 333
87
+ Tarragona | Unificació Comunista d'Espanya | 287
@@ -0,0 +1,68 @@
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: "Parliament of Catalonia election results, 27 September 2015". Central
19
+ # Electoral Commission. 6 November 2015. Retrieved on 21 October 2017.
20
+ # URL: http://www.juntaelectoralcentral.es/cs/jec/documentos/CATALU%C3%91A_2015_Resultados.pdf
21
+
22
+ # Adjustments:
23
+ # Catalunya Sí que es Pot + Recortes Cero–Els Verds → Catalunya en Comú
24
+ # Junts pel Sí → Partit Demòcrata Europeu Català + Esquerra Republicana de Catalunya–Catalunya Sí
25
+
26
+ Barcelona | Junts per Catalunya | 556,461
27
+ Barcelona | Esquerra Republicana de Catalunya–Catalunya Sí | 556,461
28
+ Barcelona | Ciutadans–Partido de la Ciudadanía | 581,032
29
+ Barcelona | Partit dels Socialistes de Catalunya (PSC-PSOE) | 421,487
30
+ Barcelona | Catalunya en Comú | 324,856
31
+ Barcelona | Partit Popular | 272,804
32
+ Barcelona | Candidatura d’Unitat Popular | 255,328
33
+ Barcelona | Unió Democràtica de Catalunya | 75,700
34
+ Barcelona | Partit Animalista contra el Maltractament Animal | 24,426
35
+
36
+ Girona | Junts per Catalunya | 108,167
37
+ Girona | Esquerra Republicana de Catalunya–Catalunya Sí | 108,167
38
+ Girona | Ciutadans–Partido de la Ciudadanía | 48,346
39
+ Girona | Partit dels Socialistes de Catalunya (PSC-PSOE) | 33,416
40
+ Girona | Candidatura d’Unitat Popular | 33,117
41
+ Girona | Partit Popular | 22,660
42
+ Girona | Catalunya en Comú | 19,158
43
+ Girona | Unió Democràtica de Catalunya | 8,295
44
+ Girona | Partit Animalista contra el Maltractament Animal | 1,823
45
+ Girona | Pirates de Catalunya–Per decidir-ho tot | 327
46
+ Girona | Guanyem Catalunya | 320
47
+
48
+ Lleida | Junts per Catalunya | 63,461
49
+ Lleida | Esquerra Republicana de Catalunya–Catalunya Sí | 63,461
50
+ Lleida | Ciutadans–Partido de la Ciudadanía | 26,612
51
+ Lleida | Partit dels Socialistes de Catalunya (PSC-PSOE) | 19,364
52
+ Lleida | Candidatura d’Unitat Popular | 18,736
53
+ Lleida | Partit Popular | 16,761
54
+ Lleida | Catalunya en Comú | 10,290
55
+ Lleida | Unió Democràtica de Catalunya | 8,178
56
+ Lleida | Partit Animalista contra el Maltractament Animal | 1,046
57
+ Lleida | Guanyem Catalunya | 221
58
+
59
+ Tarragona | Junts per Catalunya | 86,269
60
+ Tarragona | Esquerra Republicana de Catalunya–Catalunya Sí | 86,269
61
+ Tarragona | Ciutadans–Partido de la Ciudadanía | 80,374
62
+ Tarragona | Partit dels Socialistes de Catalunya (PSC-PSOE) | 49,016
63
+ Tarragona | Partit Popular | 36,968
64
+ Tarragona | Candidatura d’Unitat Popular | 30,613
65
+ Tarragona | Catalunya en Comú | 27,773
66
+ Tarragona | Unió Democràtica de Catalunya | 11,120
67
+ Tarragona | Partit Animalista contra el Maltractament Animal | 2,862
68
+ Tarragona | Guanyem Catalunya | 626
@@ -0,0 +1,68 @@
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: "Parliament of Catalonia election results, 27 September 2015". Central
19
+ # Electoral Commission. 6 November 2015. Retrieved on 21 October 2017.
20
+ # URL: http://www.juntaelectoralcentral.es/cs/jec/documentos/CATALU%C3%91A_2015_Resultados.pdf
21
+
22
+ # Adjustments:
23
+ # Catalunya Sí que es Pot + Recortes Cero–Els Verds → Catalunya en Comú
24
+ # Junts pel Sí → Partit Demòcrata Europeu Català + Esquerra Republicana de Catalunya–Catalunya Sí
25
+
26
+ Barcelona | Partit Demòcrata Europeu Català | 556,461
27
+ Barcelona | Esquerra Republicana de Catalunya–Catalunya Sí | 556,461
28
+ Barcelona | Ciutadans–Partido de la Ciudadanía | 581,032
29
+ Barcelona | Partit dels Socialistes de Catalunya (PSC-PSOE) | 421,487
30
+ Barcelona | Catalunya en Comú | 324,856
31
+ Barcelona | Partit Popular | 272,804
32
+ Barcelona | Candidatura d’Unitat Popular | 255,328
33
+ Barcelona | Unió Democràtica de Catalunya | 75,700
34
+ Barcelona | Partit Animalista contra el Maltractament Animal | 24,426
35
+
36
+ Girona | Partit Demòcrata Europeu Català | 108,167
37
+ Girona | Esquerra Republicana de Catalunya–Catalunya Sí | 108,167
38
+ Girona | Ciutadans–Partido de la Ciudadanía | 48,346
39
+ Girona | Partit dels Socialistes de Catalunya (PSC-PSOE) | 33,416
40
+ Girona | Candidatura d’Unitat Popular | 33,117
41
+ Girona | Partit Popular | 22,660
42
+ Girona | Catalunya en Comú | 19,158
43
+ Girona | Unió Democràtica de Catalunya | 8,295
44
+ Girona | Partit Animalista contra el Maltractament Animal | 1,823
45
+ Girona | Pirates de Catalunya–Per decidir-ho tot | 327
46
+ Girona | Guanyem Catalunya | 320
47
+
48
+ Lleida | Partit Demòcrata Europeu Català | 63,461
49
+ Lleida | Esquerra Republicana de Catalunya–Catalunya Sí | 63,461
50
+ Lleida | Ciutadans–Partido de la Ciudadanía | 26,612
51
+ Lleida | Partit dels Socialistes de Catalunya (PSC-PSOE) | 19,364
52
+ Lleida | Candidatura d’Unitat Popular | 18,736
53
+ Lleida | Partit Popular | 16,761
54
+ Lleida | Catalunya en Comú | 10,290
55
+ Lleida | Unió Democràtica de Catalunya | 8,178
56
+ Lleida | Partit Animalista contra el Maltractament Animal | 1,046
57
+ Lleida | Guanyem Catalunya | 221
58
+
59
+ Tarragona | Partit Demòcrata Europeu Català | 86,269
60
+ Tarragona | Esquerra Republicana de Catalunya–Catalunya Sí | 86,269
61
+ Tarragona | Ciutadans–Partido de la Ciudadanía | 80,374
62
+ Tarragona | Partit dels Socialistes de Catalunya (PSC-PSOE) | 49,016
63
+ Tarragona | Partit Popular | 36,968
64
+ Tarragona | Candidatura d’Unitat Popular | 30,613
65
+ Tarragona | Catalunya en Comú | 27,773
66
+ Tarragona | Unió Democràtica de Catalunya | 11,120
67
+ Tarragona | Partit Animalista contra el Maltractament Animal | 2,862
68
+ Tarragona | Guanyem Catalunya | 626
@@ -0,0 +1,63 @@
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: "Parliament of Catalonia election results, 27 September 2015". Central
19
+ # Electoral Commission. 6 November 2015. Retrieved on 21 October 2017.
20
+ # URL: http://www.juntaelectoralcentral.es/cs/jec/documentos/CATALU%C3%91A_2015_Resultados.pdf
21
+
22
+ # Adjustments:
23
+ # Catalunya Sí que es Pot + Recortes Cero–Els Verds → Catalunya en Comú
24
+
25
+ Barcelona | Junts pel Sí | 1,112,922
26
+ Barcelona | Ciutadans–Partido de la Ciudadanía | 581,032
27
+ Barcelona | Partit dels Socialistes de Catalunya (PSC-PSOE) | 421,487
28
+ Barcelona | Catalunya en Comú | 324,856
29
+ Barcelona | Partit Popular | 272,804
30
+ Barcelona | Candidatura d’Unitat Popular | 255,328
31
+ Barcelona | Unió Democràtica de Catalunya | 75,700
32
+ Barcelona | Partit Animalista contra el Maltractament Animal | 24,426
33
+
34
+ Girona | Junts pel Sí | 216,333
35
+ Girona | Ciutadans–Partido de la Ciudadanía | 48,346
36
+ Girona | Partit dels Socialistes de Catalunya (PSC-PSOE) | 33,416
37
+ Girona | Candidatura d’Unitat Popular | 33,117
38
+ Girona | Partit Popular | 22,660
39
+ Girona | Catalunya en Comú | 19,158
40
+ Girona | Unió Democràtica de Catalunya | 8,295
41
+ Girona | Partit Animalista contra el Maltractament Animal | 1,823
42
+ Girona | Pirates de Catalunya–Per decidir-ho tot | 327
43
+ Girona | Guanyem Catalunya | 320
44
+
45
+ Lleida | Junts pel Sí | 126,922
46
+ Lleida | Ciutadans–Partido de la Ciudadanía | 26,612
47
+ Lleida | Partit dels Socialistes de Catalunya (PSC-PSOE) | 19,364
48
+ Lleida | Candidatura d’Unitat Popular | 18,736
49
+ Lleida | Partit Popular | 16,761
50
+ Lleida | Catalunya en Comú | 10,290
51
+ Lleida | Unió Democràtica de Catalunya | 8,178
52
+ Lleida | Partit Animalista contra el Maltractament Animal | 1,046
53
+ Lleida | Guanyem Catalunya | 221
54
+
55
+ Tarragona | Junts pel Sí | 172,537
56
+ Tarragona | Ciutadans–Partido de la Ciudadanía | 80,374
57
+ Tarragona | Partit dels Socialistes de Catalunya (PSC-PSOE) | 49,016
58
+ Tarragona | Partit Popular | 36,968
59
+ Tarragona | Candidatura d’Unitat Popular | 30,613
60
+ Tarragona | Catalunya en Comú | 27,773
61
+ Tarragona | Unió Democràtica de Catalunya | 11,120
62
+ Tarragona | Partit Animalista contra el Maltractament Animal | 2,862
63
+ Tarragona | Guanyem Catalunya | 626
@@ -0,0 +1,109 @@
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 Catalonia.
23
+ #
24
+ class CataloniaWithJuntsPerCatalunya < Area
25
+ include Singleton
26
+ def area_code
27
+ 'ES-CT∪{ERC,JuntsxCat}\\{JxSí}'
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
+ # Voter turnout in 2015
48
+ # Source: "Election Results. Parliament of Catalonia Election 2015".
49
+ # Generalitat of Catalonia. Retrieved 21 October 2017.
50
+ # URL: http://governacio.gencat.cat/ca/pgov_ambits_d_actuacio/pgov_eleccions/pgov_dades_electorals/resultats-2?id_eleccions=A20151&id_territori=CA09
51
+ 5_510_853
52
+ end
53
+
54
+ def seats(simulation)
55
+ electoral_system.project(simulation)
56
+ end
57
+
58
+ def threshold
59
+ THRESHOLD
60
+ end
61
+
62
+ private
63
+
64
+ SEAT_DISTRIBUTION = { 'Barcelona' => 85, 'Girona' => 17, 'Lleida' => 15,
65
+ 'Tarragona' => 18 }.freeze
66
+
67
+ THRESHOLD = 0.03
68
+
69
+ COALITIONS = [['Candidatura d’Unitat Popular',
70
+ 'Esquerra Republicana de Catalunya–Catalunya Sí',
71
+ 'Junts per Catalunya'],
72
+ ['Catalunya en Comú', 'Ciutadans–Partido de la Ciudadanía',
73
+ 'Partit dels Socialistes de Catalunya (PSC-PSOE)',
74
+ 'Partit Popular'],
75
+ ['Catalunya en Comú',
76
+ 'Esquerra Republicana de Catalunya–Catalunya Sí',
77
+ 'Junts per Catalunya'],
78
+ ['Catalunya en Comú',
79
+ 'Esquerra Republicana de Catalunya–Catalunya Sí',
80
+ 'Partit dels Socialistes de Catalunya (PSC-PSOE)'],
81
+ ['Ciutadans–Partido de la Ciudadanía',
82
+ 'Partit dels Socialistes de Catalunya (PSC-PSOE)',
83
+ 'Partit Popular'],
84
+ ['Esquerra Republicana de Catalunya–Catalunya Sí',
85
+ 'Junts per Catalunya']].freeze
86
+
87
+ def election_results_of_2015
88
+ if @election_results_of_2015.nil?
89
+ @election_results_of_2015 = load_election_results( \
90
+ 'catalonia-2015-jxcat.psv'
91
+ )
92
+ end
93
+ @election_results_of_2015
94
+ end
95
+
96
+ def electoral_system
97
+ if @electoral_system.nil?
98
+ @electoral_system = MultiDistrictProportional.new( \
99
+ overall_election_results_of_2015,
100
+ election_results_of_2015,
101
+ SEAT_DISTRIBUTION,
102
+ DhondtDenominators,
103
+ THRESHOLD
104
+ )
105
+ end
106
+ @electoral_system
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,96 @@
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 Catalonia.
23
+ #
24
+ class CataloniaWithoutJuntsPelSi < Area
25
+ include Singleton
26
+ def area_code
27
+ 'ES-CT∪{ERC,PDeCAT}\\{JxSí}'
28
+ end
29
+
30
+ def coalitions
31
+ [['Partit Demòcrata Europeu Català', 'Esquerra Republicana de Catalunya–Catalunya Sí'],
32
+ ['Partit Demòcrata Europeu Català', 'Esquerra Republicana de Catalunya–Catalunya Sí', 'Candidatura d’Unitat Popular'],
33
+ ['Partit Demòcrata Europeu Català', 'Esquerra Republicana de Catalunya–Catalunya Sí', 'Catalunya en Comú'],
34
+ ['Ciutadans–Partido de la Ciudadanía',
35
+ 'Partit dels Socialistes de Catalunya (PSC-PSOE)',
36
+ 'Catalunya en Comú', 'Partit Popular'],
37
+ ['Ciutadans–Partido de la Ciudadanía',
38
+ 'Partit dels Socialistes de Catalunya (PSC-PSOE)', 'Partit Popular']]
39
+ end
40
+
41
+ def no_of_seats
42
+ SEAT_DISTRIBUTION.values.inject(:+)
43
+ end
44
+
45
+ def overall_election_results_of_2015
46
+ if @overall_election_results_of_2015.nil?
47
+ @overall_election_results_of_2015 = \
48
+ summarize_election_results(election_results_of_2015)
49
+ end
50
+ @overall_election_results_of_2015
51
+ end
52
+
53
+ def population_size
54
+ # Voter turnout in 2015
55
+ # Source: "Election Results. Parliament of Catalonia Election 2015".
56
+ # Generalitat of Catalonia. Retrieved 21 October 2017.
57
+ # URL: http://governacio.gencat.cat/ca/pgov_ambits_d_actuacio/pgov_eleccions/pgov_dades_electorals/resultats-2?id_eleccions=A20151&id_territori=CA09
58
+ 5_510_853
59
+ end
60
+
61
+ def seats(simulation)
62
+ electoral_system.project(simulation)
63
+ end
64
+
65
+ def threshold
66
+ THRESHOLD
67
+ end
68
+
69
+ private
70
+
71
+ SEAT_DISTRIBUTION = { 'Barcelona' => 85, 'Girona' => 17, 'Lleida' => 15,
72
+ 'Tarragona' => 18 }
73
+
74
+ THRESHOLD = 0.03
75
+
76
+ def election_results_of_2015
77
+ if @election_results_of_2015.nil?
78
+ @election_results_of_2015 = load_election_results( \
79
+ 'catalonia-2015-no-jxsi.psv')
80
+ end
81
+ @election_results_of_2015
82
+ end
83
+
84
+ def electoral_system
85
+ if @electoral_system.nil?
86
+ @electoral_system = MultiDistrictProportional.new( \
87
+ overall_election_results_of_2015,
88
+ election_results_of_2015,
89
+ SEAT_DISTRIBUTION,
90
+ DhondtDenominators,
91
+ THRESHOLD)
92
+ end
93
+ @electoral_system
94
+ end
95
+ end
96
+ end