sapor 0.3.6

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 (343) 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/ie/2016-04-28_general-election-2016-candidate-details-csv_en.csv +552 -0
  25. data/data/ie/ireland_2016_to_psv.rb +138 -0
  26. data/data/no/2020-01-01_partifordeling_1_st_2017.csv +335 -0
  27. data/data/no/norway_2017_to_psv.rb +61 -0
  28. data/data/pl/2015-gl-lis-okr.csv +42 -0
  29. data/data/pl/poland_2015_to_psv.rb +79 -0
  30. data/data/pl/poland_2015_to_psv_with_ko_and_rsw.rb +94 -0
  31. data/data/pl/poland_2015_to_psv_with_ko_konf_kp_l_and_zp.rb +100 -0
  32. data/data/pl/poland_2015_to_psv_with_ko_sld_and_wi.rb +92 -0
  33. data/data/pl/poland_2015_to_psv_with_sld.rb +84 -0
  34. data/data/pl/poland_2015_to_psv_with_sld_and_wi.rb +85 -0
  35. data/data/uk/inject_ukip_2015_as_brexit_2019_in_2017.rb +54 -0
  36. data/data/uk/united_kingdom_2015.txt +651 -0
  37. data/data/uk/united_kingdom_2015_to_psv.rb +104 -0
  38. data/data/uk/united_kingdom_2017.txt +651 -0
  39. data/data/uk/united_kingdom_2017_to_psv.rb +104 -0
  40. data/data/uk/united_kingdom_2017_to_psv_with_brexit_and_chuk.rb +113 -0
  41. data/data/uk/united_kingdom_2017_to_psv_with_tig.rb +111 -0
  42. data/lib/sapor.rb +147 -0
  43. data/lib/sapor/binomials_cache.rb +45 -0
  44. data/lib/sapor/combinations_distribution.rb +222 -0
  45. data/lib/sapor/denominators.rb +67 -0
  46. data/lib/sapor/dichotomies.rb +138 -0
  47. data/lib/sapor/dichotomy.rb +164 -0
  48. data/lib/sapor/first_past_the_post.rb +82 -0
  49. data/lib/sapor/largest_remainder.rb +118 -0
  50. data/lib/sapor/log4r_logger.rb +49 -0
  51. data/lib/sapor/log_facade.rb +40 -0
  52. data/lib/sapor/many_past_the_post.rb +113 -0
  53. data/lib/sapor/multi_district_leveled_proportional.rb +64 -0
  54. data/lib/sapor/multi_district_proportional.rb +123 -0
  55. data/lib/sapor/multi_district_variable_threshold_proportional.rb +128 -0
  56. data/lib/sapor/number_formatter.rb +45 -0
  57. data/lib/sapor/options.rb +73 -0
  58. data/lib/sapor/poll.rb +282 -0
  59. data/lib/sapor/polychotomy.rb +200 -0
  60. data/lib/sapor/pseudorandom_multirange_enumerator.rb +87 -0
  61. data/lib/sapor/referendum_polychotomy.rb +165 -0
  62. data/lib/sapor/regional_data/area.rb +100 -0
  63. data/lib/sapor/regional_data/austria.rb +84 -0
  64. data/lib/sapor/regional_data/belgium-brussels-2014.psv +46 -0
  65. data/lib/sapor/regional_data/belgium-brussels-20190526.psv +33 -0
  66. data/lib/sapor/regional_data/belgium-flanders-2014.psv +80 -0
  67. data/lib/sapor/regional_data/belgium-flanders-20190526.psv +74 -0
  68. data/lib/sapor/regional_data/belgium-wallonia-2014.psv +114 -0
  69. data/lib/sapor/regional_data/belgium-wallonia-20190526.psv +93 -0
  70. data/lib/sapor/regional_data/belgium.rb +97 -0
  71. data/lib/sapor/regional_data/belgium_brussels.rb +62 -0
  72. data/lib/sapor/regional_data/belgium_flanders.rb +64 -0
  73. data/lib/sapor/regional_data/belgium_wallonia.rb +63 -0
  74. data/lib/sapor/regional_data/catalonia-2012-2015.psv +100 -0
  75. data/lib/sapor/regional_data/catalonia-2012.psv +87 -0
  76. data/lib/sapor/regional_data/catalonia-2015-jxcat.psv +68 -0
  77. data/lib/sapor/regional_data/catalonia-2015-no-jxsi.psv +68 -0
  78. data/lib/sapor/regional_data/catalonia-2015.psv +63 -0
  79. data/lib/sapor/regional_data/catalonia-20171221-with-vox.psv +67 -0
  80. data/lib/sapor/regional_data/catalonia-20171221.psv +61 -0
  81. data/lib/sapor/regional_data/catalonia.rb +124 -0
  82. data/lib/sapor/regional_data/denmark-20150618-with-e-and-p.psv +164 -0
  83. data/lib/sapor/regional_data/denmark-20150618-with-e.psv +153 -0
  84. data/lib/sapor/regional_data/denmark-20150618-with-p.psv +153 -0
  85. data/lib/sapor/regional_data/denmark-20150618.psv +142 -0
  86. data/lib/sapor/regional_data/denmark.rb +128 -0
  87. data/lib/sapor/regional_data/denmark_with_e.rb +128 -0
  88. data/lib/sapor/regional_data/denmark_with_e_and_p.rb +128 -0
  89. data/lib/sapor/regional_data/denmark_with_p.rb +128 -0
  90. data/lib/sapor/regional_data/estonia.rb +88 -0
  91. data/lib/sapor/regional_data/european-union-great-britain-20140522-brexit-chuk.psv +172 -0
  92. data/lib/sapor/regional_data/european-union-great-britain-20140522.psv +146 -0
  93. data/lib/sapor/regional_data/european-union-great-britain-20190523.psv +141 -0
  94. data/lib/sapor/regional_data/european-union-ireland-2014-ia-ri-sd.psv +64 -0
  95. data/lib/sapor/regional_data/european-union-ireland-2014-ia-sd.psv +60 -0
  96. data/lib/sapor/regional_data/european-union-ireland-2014-ia.psv +56 -0
  97. data/lib/sapor/regional_data/european-union-ireland-2014-sd.psv +56 -0
  98. data/lib/sapor/regional_data/european-union-ireland-2014.psv +50 -0
  99. data/lib/sapor/regional_data/european-union-ireland-20190524-ia.psv +58 -0
  100. data/lib/sapor/regional_data/european-union-ireland-20190524.psv +52 -0
  101. data/lib/sapor/regional_data/european_union_27_austria.rb +76 -0
  102. data/lib/sapor/regional_data/european_union_27_croatia.rb +83 -0
  103. data/lib/sapor/regional_data/european_union_27_denmark.rb +77 -0
  104. data/lib/sapor/regional_data/european_union_27_estonia.rb +74 -0
  105. data/lib/sapor/regional_data/european_union_27_finland.rb +74 -0
  106. data/lib/sapor/regional_data/european_union_27_france.rb +84 -0
  107. data/lib/sapor/regional_data/european_union_27_ireland.rb +96 -0
  108. data/lib/sapor/regional_data/european_union_27_ireland_with_ia.rb +97 -0
  109. data/lib/sapor/regional_data/european_union_27_italy.rb +84 -0
  110. data/lib/sapor/regional_data/european_union_27_netherlands.rb +81 -0
  111. data/lib/sapor/regional_data/european_union_27_poland.rb +84 -0
  112. data/lib/sapor/regional_data/european_union_27_romania.rb +78 -0
  113. data/lib/sapor/regional_data/european_union_27_slovakia.rb +80 -0
  114. data/lib/sapor/regional_data/european_union_27_spain.rb +82 -0
  115. data/lib/sapor/regional_data/european_union_27_sweden.rb +76 -0
  116. data/lib/sapor/regional_data/european_union_austria.rb +76 -0
  117. data/lib/sapor/regional_data/european_union_bulgaria.rb +82 -0
  118. data/lib/sapor/regional_data/european_union_croatia.rb +83 -0
  119. data/lib/sapor/regional_data/european_union_cyprus.rb +72 -0
  120. data/lib/sapor/regional_data/european_union_czech_republic.rb +82 -0
  121. data/lib/sapor/regional_data/european_union_denmark.rb +77 -0
  122. data/lib/sapor/regional_data/european_union_estonia.rb +74 -0
  123. data/lib/sapor/regional_data/european_union_finland.rb +74 -0
  124. data/lib/sapor/regional_data/european_union_flanders.rb +74 -0
  125. data/lib/sapor/regional_data/european_union_france.rb +84 -0
  126. data/lib/sapor/regional_data/european_union_french_community_of_belgium.rb +73 -0
  127. data/lib/sapor/regional_data/european_union_germany.rb +86 -0
  128. data/lib/sapor/regional_data/european_union_great_britain.rb +98 -0
  129. data/lib/sapor/regional_data/european_union_greece.rb +77 -0
  130. data/lib/sapor/regional_data/european_union_hungary.rb +76 -0
  131. data/lib/sapor/regional_data/european_union_ireland.rb +96 -0
  132. data/lib/sapor/regional_data/european_union_ireland_with_ia.rb +97 -0
  133. data/lib/sapor/regional_data/european_union_italy.rb +84 -0
  134. data/lib/sapor/regional_data/european_union_latvia.rb +81 -0
  135. data/lib/sapor/regional_data/european_union_lithuania.rb +80 -0
  136. data/lib/sapor/regional_data/european_union_luxembourg.rb +75 -0
  137. data/lib/sapor/regional_data/european_union_malta.rb +71 -0
  138. data/lib/sapor/regional_data/european_union_netherlands.rb +81 -0
  139. data/lib/sapor/regional_data/european_union_northern_ireland.rb +75 -0
  140. data/lib/sapor/regional_data/european_union_poland.rb +84 -0
  141. data/lib/sapor/regional_data/european_union_portugal.rb +75 -0
  142. data/lib/sapor/regional_data/european_union_romania.rb +78 -0
  143. data/lib/sapor/regional_data/european_union_slovakia.rb +81 -0
  144. data/lib/sapor/regional_data/european_union_slovenia.rb +85 -0
  145. data/lib/sapor/regional_data/european_union_spain.rb +82 -0
  146. data/lib/sapor/regional_data/european_union_sweden.rb +76 -0
  147. data/lib/sapor/regional_data/finland-20150419-with-sin.psv +224 -0
  148. data/lib/sapor/regional_data/finland-20150419.psv +212 -0
  149. data/lib/sapor/regional_data/finland.rb +107 -0
  150. data/lib/sapor/regional_data/finland_with_sin.rb +107 -0
  151. data/lib/sapor/regional_data/flanders-2014.psv +96 -0
  152. data/lib/sapor/regional_data/flanders-20190526.psv +87 -0
  153. data/lib/sapor/regional_data/flanders.rb +115 -0
  154. data/lib/sapor/regional_data/france.rb +38 -0
  155. data/lib/sapor/regional_data/greece.rb +92 -0
  156. data/lib/sapor/regional_data/hungary-2014.psv +2104 -0
  157. data/lib/sapor/regional_data/hungary.rb +116 -0
  158. data/lib/sapor/regional_data/iceland-20161029-midflokkurinn.psv +94 -0
  159. data/lib/sapor/regional_data/iceland-20161029.psv +88 -0
  160. data/lib/sapor/regional_data/iceland-20171028-with-j.psv +94 -0
  161. data/lib/sapor/regional_data/iceland-20171028.psv +85 -0
  162. data/lib/sapor/regional_data/iceland.rb +149 -0
  163. data/lib/sapor/regional_data/ireland-20160226-2020-candidates.psv +322 -0
  164. data/lib/sapor/regional_data/ireland-20160226-2020.psv +344 -0
  165. data/lib/sapor/regional_data/ireland-20160226.psv +348 -0
  166. data/lib/sapor/regional_data/ireland.rb +165 -0
  167. data/lib/sapor/regional_data/latvia-20141004-kpv-p-par.psv +109 -0
  168. data/lib/sapor/regional_data/latvia-20141004-kpv-par.psv +103 -0
  169. data/lib/sapor/regional_data/latvia-20141004-kpv.psv +97 -0
  170. data/lib/sapor/regional_data/latvia-20141004.psv +89 -0
  171. data/lib/sapor/regional_data/latvia-20181006.psv +104 -0
  172. data/lib/sapor/regional_data/latvia.rb +111 -0
  173. data/lib/sapor/regional_data/luxembourg-20131020.psv +60 -0
  174. data/lib/sapor/regional_data/luxembourg-20181014.psv +59 -0
  175. data/lib/sapor/regional_data/luxembourg.rb +88 -0
  176. data/lib/sapor/regional_data/netherlands.rb +108 -0
  177. data/lib/sapor/regional_data/norway-20170911.psv +331 -0
  178. data/lib/sapor/regional_data/norway.rb +130 -0
  179. data/lib/sapor/regional_data/norwegian_municipality.rb +68 -0
  180. data/lib/sapor/regional_data/poland-20151025-with-ko-and-l-without-n-po-r-and-zl.psv +321 -0
  181. 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
  182. data/lib/sapor/regional_data/poland-20151025-with-ko-sld-and-wi-without-n-po-and-zl.psv +403 -0
  183. data/lib/sapor/regional_data/poland-20151025-with-sld-and-wi-without-zl.psv +444 -0
  184. data/lib/sapor/regional_data/poland-20151025-with-sld-without-zl.psv +403 -0
  185. data/lib/sapor/regional_data/poland-20151025.psv +403 -0
  186. data/lib/sapor/regional_data/poland.rb +125 -0
  187. data/lib/sapor/regional_data/poland_with_ko_and_l_without_n_po_r_and_zl.rb +122 -0
  188. 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
  189. data/lib/sapor/regional_data/poland_with_ko_sld_and_wi_without_n_po_and_zl.rb +125 -0
  190. data/lib/sapor/regional_data/poland_with_sld_and_wi_without_zl.rb +126 -0
  191. data/lib/sapor/regional_data/poland_with_sld_without_zl.rb +126 -0
  192. data/lib/sapor/regional_data/portugal-20151004-with-a-and-ch-without-paf.psv +438 -0
  193. data/lib/sapor/regional_data/portugal-20151004-with-a-and-il-without-paf.psv +438 -0
  194. data/lib/sapor/regional_data/portugal-20151004-with-a-ch-and-il-without-paf.psv +461 -0
  195. data/lib/sapor/regional_data/portugal-20151004-with-a-without-paf.psv +415 -0
  196. data/lib/sapor/regional_data/portugal-20151004-with-ch-and-il-without-paf.psv +438 -0
  197. data/lib/sapor/regional_data/portugal-20151004-without-paf.psv +392 -0
  198. data/lib/sapor/regional_data/portugal-20151004.psv +370 -0
  199. data/lib/sapor/regional_data/portugal.rb +101 -0
  200. data/lib/sapor/regional_data/portugal_with_a_and_ch_without_paf.rb +92 -0
  201. data/lib/sapor/regional_data/portugal_with_a_and_il_without_paf.rb +92 -0
  202. data/lib/sapor/regional_data/portugal_with_a_ch_and_il_without_paf.rb +92 -0
  203. data/lib/sapor/regional_data/portugal_with_a_without_paf.rb +92 -0
  204. data/lib/sapor/regional_data/portugal_with_ch_and_il_without_paf.rb +92 -0
  205. data/lib/sapor/regional_data/portugal_without_paf.rb +92 -0
  206. data/lib/sapor/regional_data/slovakia.rb +81 -0
  207. data/lib/sapor/regional_data/slovenia.rb +114 -0
  208. data/lib/sapor/regional_data/spain-20160626.psv +619 -0
  209. data/lib/sapor/regional_data/spain.rb +136 -0
  210. data/lib/sapor/regional_data/sweden.rb +92 -0
  211. data/lib/sapor/regional_data/sweden_20140914.rb +89 -0
  212. data/lib/sapor/regional_data/united_kingdom-2015.psv +4358 -0
  213. data/lib/sapor/regional_data/united_kingdom-20170608-brexit-chuk.psv +5154 -0
  214. data/lib/sapor/regional_data/united_kingdom-20170608-brexit.psv +4521 -0
  215. data/lib/sapor/regional_data/united_kingdom-20170608-tig.psv +4529 -0
  216. data/lib/sapor/regional_data/united_kingdom-20170608.psv +3894 -0
  217. data/lib/sapor/regional_data/united_kingdom.rb +94 -0
  218. data/lib/sapor/regional_data/united_kingdom_with_brexit.rb +110 -0
  219. data/lib/sapor/regional_data/united_kingdom_with_brexit_and_chuk.rb +111 -0
  220. data/lib/sapor/regional_data/united_kingdom_with_tig.rb +111 -0
  221. data/lib/sapor/regional_data/utopia.rb +66 -0
  222. data/lib/sapor/regional_data/wallonia-2014.psv +101 -0
  223. data/lib/sapor/regional_data/wallonia-20190526.psv +88 -0
  224. data/lib/sapor/regional_data/wallonia.rb +112 -0
  225. data/lib/sapor/representatives_polychotomy.rb +338 -0
  226. data/lib/sapor/single_district_proportional.rb +75 -0
  227. data/sapor.gemspec +35 -0
  228. data/spec/integration/area_spec.rb +28 -0
  229. data/spec/integration/poll_spec.rb +112 -0
  230. data/spec/integration/sample.poll +8 -0
  231. data/spec/spec_helper.rb +31 -0
  232. data/spec/unit/area_spec.rb +115 -0
  233. data/spec/unit/austria_spec.rb +76 -0
  234. data/spec/unit/belgium_brussels_spec.rb +58 -0
  235. data/spec/unit/belgium_flanders_spec.rb +62 -0
  236. data/spec/unit/belgium_spec.rb +26 -0
  237. data/spec/unit/belgium_wallonia_spec.rb +65 -0
  238. data/spec/unit/binomials_cache_spec.rb +34 -0
  239. data/spec/unit/catalonia_spec.rb +61 -0
  240. data/spec/unit/catalonia_with_vox_spec.rb +62 -0
  241. data/spec/unit/combinations_distribution_spec.rb +241 -0
  242. data/spec/unit/denmark_spec.rb +56 -0
  243. data/spec/unit/denmark_with_e_and_p_spec.rb +58 -0
  244. data/spec/unit/denmark_with_e_spec.rb +57 -0
  245. data/spec/unit/denmark_with_p_spec.rb +57 -0
  246. data/spec/unit/denominators_spec.rb +40 -0
  247. data/spec/unit/dichotomies_spec.rb +154 -0
  248. data/spec/unit/dichotomy_spec.rb +320 -0
  249. data/spec/unit/estonia_spec.rb +65 -0
  250. data/spec/unit/european_union_27_austria_spec.rb +61 -0
  251. data/spec/unit/european_union_27_croatia_spec.rb +60 -0
  252. data/spec/unit/european_union_27_denmark_spec.rb +62 -0
  253. data/spec/unit/european_union_27_estonia_spec.rb +94 -0
  254. data/spec/unit/european_union_27_finland_spec.rb +75 -0
  255. data/spec/unit/european_union_27_france_spec.rb +73 -0
  256. data/spec/unit/european_union_27_ireland_spec.rb +72 -0
  257. data/spec/unit/european_union_27_ireland_with_ia_spec.rb +74 -0
  258. data/spec/unit/european_union_27_italy_spec.rb +69 -0
  259. data/spec/unit/european_union_27_netherlands_spec.rb +81 -0
  260. data/spec/unit/european_union_27_poland_spec.rb +69 -0
  261. data/spec/unit/european_union_27_romania_spec.rb +67 -0
  262. data/spec/unit/european_union_27_slovakia_spec.rb +111 -0
  263. data/spec/unit/european_union_27_spain_spec.rb +130 -0
  264. data/spec/unit/european_union_27_sweden_spec.rb +89 -0
  265. data/spec/unit/european_union_austria_spec.rb +61 -0
  266. data/spec/unit/european_union_bulgaria_spec.rb +97 -0
  267. data/spec/unit/european_union_croatia_spec.rb +59 -0
  268. data/spec/unit/european_union_cyprus_spec.rb +65 -0
  269. data/spec/unit/european_union_czech_republic_spec.rb +125 -0
  270. data/spec/unit/european_union_denmark_spec.rb +61 -0
  271. data/spec/unit/european_union_estonia_spec.rb +93 -0
  272. data/spec/unit/european_union_finland_spec.rb +75 -0
  273. data/spec/unit/european_union_flanders_spec.rb +56 -0
  274. data/spec/unit/european_union_france_spec.rb +73 -0
  275. data/spec/unit/european_union_french_community_of_belgium_spec.rb +61 -0
  276. data/spec/unit/european_union_germany_spec.rb +90 -0
  277. data/spec/unit/european_union_great_britain_spec.rb +87 -0
  278. data/spec/unit/european_union_greece_spec.rb +148 -0
  279. data/spec/unit/european_union_hungary_spec.rb +57 -0
  280. data/spec/unit/european_union_ireland_spec.rb +72 -0
  281. data/spec/unit/european_union_ireland_with_ia_spec.rb +74 -0
  282. data/spec/unit/european_union_italy_spec.rb +69 -0
  283. data/spec/unit/european_union_latvia_spec.rb +76 -0
  284. data/spec/unit/european_union_lithuania_spec.rb +68 -0
  285. data/spec/unit/european_union_luxembourg_spec.rb +63 -0
  286. data/spec/unit/european_union_malta_spec.rb +60 -0
  287. data/spec/unit/european_union_netherlands_spec.rb +81 -0
  288. data/spec/unit/european_union_northern_ireland_spec.rb +66 -0
  289. data/spec/unit/european_union_poland_spec.rb +69 -0
  290. data/spec/unit/european_union_portugal_spec.rb +77 -0
  291. data/spec/unit/european_union_romania_spec.rb +67 -0
  292. data/spec/unit/european_union_slovakia_spec.rb +111 -0
  293. data/spec/unit/european_union_slovenia_spec.rb +77 -0
  294. data/spec/unit/european_union_spain_spec.rb +129 -0
  295. data/spec/unit/european_union_sweden_spec.rb +89 -0
  296. data/spec/unit/finland_spec.rb +65 -0
  297. data/spec/unit/finland_with_sin_spec.rb +67 -0
  298. data/spec/unit/first_past_the_post_spec.rb +54 -0
  299. data/spec/unit/flanders_spec.rb +70 -0
  300. data/spec/unit/france_spec.rb +32 -0
  301. data/spec/unit/greece_spec.rb +118 -0
  302. data/spec/unit/hungary_spec.rb +132 -0
  303. data/spec/unit/iceland_spec.rb +57 -0
  304. data/spec/unit/iceland_with_j_spec.rb +58 -0
  305. data/spec/unit/ireland_2016_spec.rb +62 -0
  306. data/spec/unit/ireland_spec.rb +62 -0
  307. data/spec/unit/largest_remainder_spec.rb +79 -0
  308. data/spec/unit/latvia_spec.rb +62 -0
  309. data/spec/unit/luxembourg_spec.rb +55 -0
  310. data/spec/unit/multi_district_leveled_proportional_spec.rb +49 -0
  311. data/spec/unit/multi_district_proportional_spec.rb +81 -0
  312. data/spec/unit/netherlands_spec.rb +107 -0
  313. data/spec/unit/norway_spec.rb +69 -0
  314. data/spec/unit/norwegian_municipality_spec.rb +89 -0
  315. data/spec/unit/number_formatter_spec.rb +173 -0
  316. data/spec/unit/poland_spec.rb +62 -0
  317. data/spec/unit/poland_with_ko_and_l_without_n_po_r_and_zl_spec.rb +60 -0
  318. 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
  319. data/spec/unit/poland_with_ko_sld_and_wi_without_n_po_and_zl_spec.rb +62 -0
  320. data/spec/unit/poland_with_sld_and_wi_without_zl_spec.rb +63 -0
  321. data/spec/unit/poland_with_sld_without_zl_spec.rb +62 -0
  322. data/spec/unit/poll_spec.rb +110 -0
  323. data/spec/unit/portugal_spec.rb +66 -0
  324. data/spec/unit/portugal_with_a_and_ch_without_paf_spec.rb +68 -0
  325. data/spec/unit/portugal_with_a_and_il_without_paf_spec.rb +68 -0
  326. data/spec/unit/portugal_with_a_ch_and_il_without_paf_spec.rb +69 -0
  327. data/spec/unit/portugal_with_a_without_paf_spec.rb +67 -0
  328. data/spec/unit/portugal_with_ch_and_il_without_paf_spec.rb +68 -0
  329. data/spec/unit/portugal_without_paf_spec.rb +66 -0
  330. data/spec/unit/pseudorandom_multirange_enumerator_spec.rb +82 -0
  331. data/spec/unit/referendum_polychotomy_spec.rb +289 -0
  332. data/spec/unit/representatives_polychotomy_spec.rb +332 -0
  333. data/spec/unit/slovakia_spec.rb +99 -0
  334. data/spec/unit/slovenia_spec.rb +80 -0
  335. data/spec/unit/spain_spec.rb +101 -0
  336. data/spec/unit/sweden_20140914_spec.rb +112 -0
  337. data/spec/unit/sweden_spec.rb +113 -0
  338. data/spec/unit/united_kingdom_spec.rb +65 -0
  339. data/spec/unit/united_kingdom_with_brexit_and_chuk_spec.rb +67 -0
  340. data/spec/unit/united_kingdom_with_brexit_spec.rb +66 -0
  341. data/spec/unit/united_kingdom_with_tig_spec.rb +66 -0
  342. data/spec/unit/wallonia_spec.rb +70 -0
  343. metadata +502 -0
@@ -0,0 +1,61 @@
1
+ #
2
+ # Statistical Analysis of Polling Results (SAPoR)
3
+ # Copyright (C) 2020 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
+ SOURCE = '2020-01-01_partifordeling_1_st_2017.csv'.freeze
20
+ TARGET = '../../lib/sapor/regional_data/norway-20170911.psv'.freeze
21
+
22
+ parties = []
23
+ total_votes = 0
24
+ File.open(TARGET, 'w') do |output|
25
+ output.puts '# Statistical Analysis of Polling Results (SAPoR)'
26
+ output.puts '# Copyright (C) 2020 Filip van Laenen <f.a.vanlaenen@ieee.org>'
27
+ output.puts '#'
28
+ output.puts '# This file is part of SAPoR.'
29
+ output.puts '#'
30
+ output.puts '# SAPoR is free software: you can redistribute it and/or' \
31
+ ' modify it under the'
32
+ output.puts '# terms of the GNU General Public License as published by the' \
33
+ ' Free Software'
34
+ output.puts '# Foundation, either version 3 of the License, or (at your' \
35
+ ' option) any later'
36
+ output.puts '# version.'
37
+ output.puts '#'
38
+ output.puts '# SAPoR is distributed in the hope that it will be useful, but' \
39
+ ' WITHOUT ANY'
40
+ output.puts '# WARRANTY; without even the implied warranty of' \
41
+ ' MERCHANTABILITY or FITNESS FOR'
42
+ output.puts '# A PARTICULAR PURPOSE. See the GNU General Public License' \
43
+ ' for more details.'
44
+ output.puts '#'
45
+ output.puts '# You can find a copy of the GNU General Public License in' \
46
+ ' /doc/gpl.txt'
47
+ output.puts '#'
48
+ File.open(SOURCE).each do |line|
49
+ next if line.start_with?('Fylkenummer')
50
+ elements = line.chomp.split(';')
51
+ constituency = elements[1]
52
+ party = elements[7]
53
+ next if party == 'Blanke'
54
+ parties << party unless parties.include?(party)
55
+ votes = elements[12].to_i
56
+ total_votes += votes
57
+ output.puts "#{constituency} | #{party} | #{votes}"
58
+ end
59
+ end
60
+ puts 'Parties: ' + parties.sort.join(', ')
61
+ puts "Total votes: #{total_votes}"
@@ -0,0 +1,42 @@
1
+ Siedziba OKW,1 - Komitet Wyborczy Prawo i Sprawiedliwość,2 - Komitet Wyborczy Platforma Obywatelska RP,3 - Komitet Wyborczy Partia Razem,4 - Komitet Wyborczy KORWiN,5 - Komitet Wyborczy Polskie Stronnictwo Ludowe,6 - Koalicyjny Komitet Wyborczy Zjednoczona Lewica SLD+TR+PPS+UP+Zieloni,7 - Komitet Wyborczy Wyborców „Kukiz'15”,8 - Komitet Wyborczy Nowoczesna Ryszarda Petru,9 - Komitet Wyborczy Wyborców JOW Bezpartyjni,10 - Komitet Wyborczy Wyborców Zbigniewa Stonogi,11 - Komitet Wyborczy Wyborców Ruch Społeczny Rzeczypospolitej Polskiej,12 - Komitet Wyborczy Wyborców Zjednoczeni dla Śląska,13 - Komitet Wyborczy Samoobrona,14 - Komitet Wyborczy Wyborców Grzegorza Brauna „Szczęść Boże!”,15 - Komitet Wyborczy Kongres Nowej Prawicy,16 - Komitet Wyborczy Wyborców Mniejszość Niemiecka,16 - Komitet Wyborczy Wyborców Obywatele do Parlamentu
2
+ Legnica,127.370,90.060,13.003,15.427,13.886,37.298,34.229,25.506,,,,,,,,,
3
+ Wałbrzych,72.929,76.424,7.984,10.075,7.448,20.517,20.634,15.544,2.540,,,,,,,,
4
+ Wrocław,163.323,159.582,22.059,27.341,13.604,31.932,45.726,55.756,,2.779,,,,1.269,,,
5
+ Bydgoszcz,113.024,110.948,14.062,17.002,22.701,37.583,29.080,27.334,,2.543,,,,,,,
6
+ Toruń,121.703,93.432,13.227,14.134,24.476,39.003,30.159,23.563,,2.041,,,772,,,,
7
+ Lublin,232.014,80.892,13.395,24.376,37.733,29.172,45.448,22.158,,,599,,580,1.353,,,
8
+ Chełm,163.122,41.823,8.116,14.835,38.689,24.161,35.567,12.745,,,,,628,,,,
9
+ Zielona Góra,97.877,97.676,13.825,17.274,17.743,34.695,30.284,34.586,,2.258,,,,,,,
10
+ Łódź,107.350,112.333,16.627,17.163,9.710,37.615,25.992,32.274,,,,,,,,,
11
+ Piotrków Trybunalski,134.134,44.173,8.747,11.160,21.364,21.352,28.808,15.983,,,,,,,,,
12
+ Sieradz,147.623,78.314,13.077,15.171,29.044,30.256,32.973,19.681,,1.905,,,712,989,,,
13
+ Kraków I (południe),133.213,55.454,8.840,12.089,8.226,14.473,23.551,15.731,,,,,,,,,
14
+ Kraków II (północ),209.607,133.558,21.053,34.446,14.644,34.643,39.379,52.822,,,,,,1.372,1.244,,
15
+ Nowy Sącz,188.010,43.309,6.627,13.379,12.929,7.924,24.318,11.468,,1.606,,,,,891,,
16
+ Tarnów,151.623,42.887,7.082,13.766,23.552,9.933,28.005,13.233,,,,,,906,654,,
17
+ Płock,131.431,49.353,10.062,12.214,31.994,24.440,25.257,15.451,,,,,,,,,
18
+ Radom,130.758,48.332,7.203,10.770,25.933,13.258,23.149,13.233,,2.050,,,,,656,,
19
+ Siedlce,191.733,50.858,9.964,16.332,38.396,16.327,31.378,17.386,1.045,,582,,,1.239,,,
20
+ Warszawa I (miasto),327.342,301.672,60.663,67.700,7.882,93.666,84.937,146.629,,,2.760,,,,,,1.964
21
+ Warszawa II (okręg),190.355,123.227,18.895,23.586,18.666,27.774,35.418,49.098,,3.597,,,,,,,
22
+ Opole,93.926,88.731,10.202,13.346,12.464,22.841,42.533,24.152,1.772,,,,,751,,27.530,
23
+ Krosno,174.900,44.971,7.595,13.984,23.805,14.893,29.919,12.981,2.289,1.528,,,,,,,
24
+ Rzeszów,284.642,66.516,11.623,25.163,23.667,22.409,47.071,21.106,,2.919,,,,1.363,778,,
25
+ Białystok,197.575,72.894,11.258,20.297,35.116,32.015,39.509,23.361,,2.088,,,626,,629,,
26
+ Gdańsk,126.466,148.305,16.992,21.366,12.904,28.168,30.536,39.184,,3.210,,,,,,,
27
+ Gdynia,145.698,156.147,18.918,20.677,15.064,30.973,37.410,38.344,,3.477,,,,,,,
28
+ Bielsko-Biała,136.330,79.506,12.557,15.788,11.533,22.122,31.570,27.882,,,,,,,,,
29
+ Częstochowa,84.773,49.580,8.625,10.111,11.799,26.305,27.521,15.942,,1.378,,,,600,,,
30
+ Gliwice,89.584,85.130,12.181,14.949,7.342,21.163,35.793,26.122,,,,,,1.403,,,
31
+ Rybnik,114.799,70.188,9.669,13.136,5.197,17.201,32.794,18.341,,,,7.928,,710,,,
32
+ Katowice,135.367,116.658,16.786,22.803,4.064,27.837,41.344,35.591,,,,10.740,,,,,
33
+ Sosnowiec,84.410,72.755,12.652,13.682,6.687,39.774,29.161,25.522,,,,,,,,,
34
+ Kielce,200.652,80.866,13.106,19.395,44.574,36.880,44.115,23.360,2.344,1.792,,,448,1.158,,,
35
+ Elbląg,63.236,60.359,7.608,9.480,13.411,15.407,16.514,11.668,1.426,1.253,,,,,,,
36
+ Olsztyn,80.970,72.055,9.948,13.584,22.458,23.312,23.888,18.141,,1.810,,,,,,,
37
+ Kalisz,115.668,89.668,11.497,15.422,39.874,32.047,28.996,25.557,1.973,1.982,,,500,,,,
38
+ Konin,103.781,56.111,11.032,11.061,19.027,32.649,24.486,19.237,,,,,,,,,
39
+ Piła,73.665,83.845,10.591,11.004,20.712,24.723,24.359,18.859,,2.515,,,,,,,
40
+ Poznań,97.975,146.141,18.854,19.548,7.809,33.080,24.825,59.387,2.267,,,,,,,,
41
+ Koszalin,62.032,65.262,8.466,9.672,8.972,24.697,20.428,17.488,,,,,,,,,
42
+ Szczecin,110.697,121.479,15.678,20.291,14.776,32.584,32.030,32.964,,,,,,,,,
@@ -0,0 +1,79 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2020 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
+ SOURCE = '2015-gl-lis-okr.csv'.freeze
21
+ TARGET = '../../lib/sapor/regional_data/poland-20151025.psv'.freeze
22
+ PARTIES = ['Prawo i Sprawiedliwość',
23
+ 'Platforma Obywatelska',
24
+ 'Lewica Razem',
25
+ 'KORWiN',
26
+ 'Polskie Stronnictwo Ludowe',
27
+ 'Zjednoczona Lewica',
28
+ 'Kukiz’15',
29
+ '.Nowoczesna',
30
+ 'JOW Bezpartyjni',
31
+ 'Stonoga Partia Polska',
32
+ 'Ruch Społeczny Rzeczypospolitej Polskiej',
33
+ 'Zjednoczeni dla Śląska',
34
+ 'Samoobrona',
35
+ 'Grzegorz Braun „Szczęść Boże!”',
36
+ 'Kongres Nowej Prawicy',
37
+ 'Mniejszość Niemiecka',
38
+ 'Obywatele do Parlamentu']
39
+
40
+ File.open(TARGET, 'w') do |output|
41
+ output.puts '# Statistical Analysis of Polling Results (SAPoR)'
42
+ output.puts '# Copyright (C) 2020 Filip van Laenen <f.a.vanlaenen@ieee.org>'
43
+ output.puts '#'
44
+ output.puts '# This file is part of SAPoR.'
45
+ output.puts '#'
46
+ output.puts '# SAPoR is free software: you can redistribute it and/or' \
47
+ ' modify it under the'
48
+ output.puts '# terms of the GNU General Public License as published by the' \
49
+ ' Free Software'
50
+ output.puts '# Foundation, either version 3 of the License, or (at your' \
51
+ ' option) any later'
52
+ output.puts '# version.'
53
+ output.puts '#'
54
+ output.puts '# SAPoR is distributed in the hope that it will be useful, but' \
55
+ ' WITHOUT ANY'
56
+ output.puts '# WARRANTY; without even the implied warranty of' \
57
+ ' MERCHANTABILITY or FITNESS FOR'
58
+ output.puts '# A PARTICULAR PURPOSE. See the GNU General Public License' \
59
+ ' for more details.'
60
+ output.puts '#'
61
+ output.puts '# You can find a copy of the GNU General Public License in' \
62
+ ' /doc/gpl.txt'
63
+ output.puts '#'
64
+ File.open(SOURCE).each do |line|
65
+ next if line.chomp.start_with?('Siedziba OKW')
66
+ if line.chomp.empty?
67
+ output.puts
68
+ else
69
+ elements = line.chomp.split(',').map(&:strip)
70
+ district = elements[0]
71
+ PARTIES.each_with_index do |p, i|
72
+ unless elements[i+1].nil? || elements[i+1].empty?
73
+ votes = elements[i+1].delete('.')
74
+ output.puts "#{district} | #{p} | #{votes}"
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,94 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2020 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
+ SOURCE = '2015-gl-lis-okr.csv'.freeze
21
+ TARGET = '../../lib/sapor/regional_data/poland-20151025-with-ko-and-rsw-without-n-po-r-and-zl.psv'.freeze
22
+
23
+ N_PARTY = '.Nowoczesna'.freeze
24
+ PO_PARTY = 'Platforma Obywatelska'.freeze
25
+ R_PARTY = 'Lewica Razem'.freeze
26
+ ZL_PARTY = 'Zjednoczona Lewica'.freeze
27
+ PARTIES = ['Prawo i Sprawiedliwość',
28
+ PO_PARTY,
29
+ R_PARTY,
30
+ 'KORWiN',
31
+ 'Polskie Stronnictwo Ludowe',
32
+ ZL_PARTY,
33
+ 'Kukiz’15',
34
+ N_PARTY,
35
+ 'JOW Bezpartyjni',
36
+ 'Stonoga Partia Polska',
37
+ 'Ruch Społeczny Rzeczypospolitej Polskiej',
38
+ 'Zjednoczeni dla Śląska',
39
+ 'Samoobrona',
40
+ 'Grzegorz Braun „Szczęść Boże!”',
41
+ 'Kongres Nowej Prawicy',
42
+ 'Mniejszość Niemiecka',
43
+ 'Obywatele do Parlamentu']
44
+
45
+ File.open(TARGET, 'w') do |output|
46
+ output.puts '# Statistical Analysis of Polling Results (SAPoR)'
47
+ output.puts '# Copyright (C) 2020 Filip van Laenen <f.a.vanlaenen@ieee.org>'
48
+ output.puts '#'
49
+ output.puts '# This file is part of SAPoR.'
50
+ output.puts '#'
51
+ output.puts '# SAPoR is free software: you can redistribute it and/or' \
52
+ ' modify it under the'
53
+ output.puts '# terms of the GNU General Public License as published by the' \
54
+ ' Free Software'
55
+ output.puts '# Foundation, either version 3 of the License, or (at your' \
56
+ ' option) any later'
57
+ output.puts '# version.'
58
+ output.puts '#'
59
+ output.puts '# SAPoR is distributed in the hope that it will be useful, but' \
60
+ ' WITHOUT ANY'
61
+ output.puts '# WARRANTY; without even the implied warranty of' \
62
+ ' MERCHANTABILITY or FITNESS FOR'
63
+ output.puts '# A PARTICULAR PURPOSE. See the GNU General Public License' \
64
+ ' for more details.'
65
+ output.puts '#'
66
+ output.puts '# You can find a copy of the GNU General Public License in' \
67
+ ' /doc/gpl.txt'
68
+ output.puts '#'
69
+ File.open(SOURCE).each do |line|
70
+ next if line.chomp.start_with?('Siedziba OKW')
71
+ if line.chomp.empty?
72
+ output.puts
73
+ else
74
+ elements = line.chomp.split(',').map(&:strip)
75
+ district = elements[0]
76
+ ko_no = 0
77
+ rsw_no = 0
78
+ PARTIES.each_with_index do |p, i|
79
+ unless elements[i+1].nil? || elements[i+1].empty?
80
+ votes = elements[i+1].delete('.')
81
+ if p == R_PARTY || p == ZL_PARTY
82
+ rsw_no += votes.to_i
83
+ elsif p == PO_PARTY || p == N_PARTY
84
+ ko_no += votes.to_i
85
+ else
86
+ output.puts "#{district} | #{p} | #{votes}"
87
+ end
88
+ end
89
+ end
90
+ output.puts "#{district} | Koalicja Obywatelska | #{ko_no}"
91
+ output.puts "#{district} | Lewica Razem–Sojusz Lewicy Demokratycznej–Wiosna | #{rsw_no}"
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,100 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2020 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
+ SOURCE = '2015-gl-lis-okr.csv'.freeze
21
+ TARGET = '../../lib/sapor/regional_data/poland-20151025-with-ko-konf-kp-l-and-zp-without-k-k15-n-pis-po-psl-r-and-zl.psv'.freeze
22
+
23
+ K15_PARTY = 'Kukiz’15'.freeze
24
+ N_PARTY = '.Nowoczesna'.freeze
25
+ PO_PARTY = 'Platforma Obywatelska'.freeze
26
+ PSL_PARTY = 'Polskie Stronnictwo Ludowe'.freeze
27
+ R_PARTY = 'Lewica Razem'.freeze
28
+ ZL_PARTY = 'Zjednoczona Lewica'.freeze
29
+ PARTIES = ['Zjednoczona Prawica',
30
+ PO_PARTY,
31
+ R_PARTY,
32
+ 'Konfederacja',
33
+ PSL_PARTY,
34
+ ZL_PARTY,
35
+ K15_PARTY,
36
+ N_PARTY,
37
+ 'Bezpartyjni Samorządowcy',
38
+ 'Stonoga Partia Polska',
39
+ 'Ruch Społeczny Rzeczypospolitej Polskiej',
40
+ 'Zjednoczeni dla Śląska',
41
+ 'Samoobrona',
42
+ 'Grzegorz Braun „Szczęść Boże!”',
43
+ 'Kongres Nowej Prawicy',
44
+ 'Mniejszość Niemiecka',
45
+ 'Obywatele do Parlamentu']
46
+
47
+ File.open(TARGET, 'w') do |output|
48
+ output.puts '# Statistical Analysis of Polling Results (SAPoR)'
49
+ output.puts '# Copyright (C) 2020 Filip van Laenen <f.a.vanlaenen@ieee.org>'
50
+ output.puts '#'
51
+ output.puts '# This file is part of SAPoR.'
52
+ output.puts '#'
53
+ output.puts '# SAPoR is free software: you can redistribute it and/or' \
54
+ ' modify it under the'
55
+ output.puts '# terms of the GNU General Public License as published by the' \
56
+ ' Free Software'
57
+ output.puts '# Foundation, either version 3 of the License, or (at your' \
58
+ ' option) any later'
59
+ output.puts '# version.'
60
+ output.puts '#'
61
+ output.puts '# SAPoR is distributed in the hope that it will be useful, but' \
62
+ ' WITHOUT ANY'
63
+ output.puts '# WARRANTY; without even the implied warranty of' \
64
+ ' MERCHANTABILITY or FITNESS FOR'
65
+ output.puts '# A PARTICULAR PURPOSE. See the GNU General Public License' \
66
+ ' for more details.'
67
+ output.puts '#'
68
+ output.puts '# You can find a copy of the GNU General Public License in' \
69
+ ' /doc/gpl.txt'
70
+ output.puts '#'
71
+ File.open(SOURCE).each do |line|
72
+ next if line.chomp.start_with?('Siedziba OKW')
73
+ if line.chomp.empty?
74
+ output.puts
75
+ else
76
+ elements = line.chomp.split(',').map(&:strip)
77
+ district = elements[0]
78
+ ko_no = 0
79
+ kp_no = 0
80
+ l_no = 0
81
+ PARTIES.each_with_index do |p, i|
82
+ unless elements[i+1].nil? || elements[i+1].empty?
83
+ votes = elements[i+1].delete('.')
84
+ if p == R_PARTY || p == ZL_PARTY
85
+ l_no += votes.to_i
86
+ elsif p == PO_PARTY || p == N_PARTY
87
+ ko_no += votes.to_i
88
+ elsif p == K15_PARTY || p == PSL_PARTY
89
+ kp_no += votes.to_i
90
+ else
91
+ output.puts "#{district} | #{p} | #{votes}"
92
+ end
93
+ end
94
+ end
95
+ output.puts "#{district} | Koalicja Obywatelska | #{ko_no}"
96
+ output.puts "#{district} | Koalicja Polska | #{kp_no}"
97
+ output.puts "#{district} | Lewica | #{l_no}"
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,92 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2020 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
+ SOURCE = '2015-gl-lis-okr.csv'.freeze
21
+ TARGET = '../../lib/sapor/regional_data/poland-20151025-with-ko-sld-and-wi-without-n-po-and-zl.psv'.freeze
22
+
23
+ N_PARTY = '.Nowoczesna'.freeze
24
+ PO_PARTY = 'Platforma Obywatelska'.freeze
25
+ ZL_PARTY = 'Zjednoczona Lewica'.freeze
26
+ PARTIES = ['Prawo i Sprawiedliwość',
27
+ PO_PARTY,
28
+ 'Lewica Razem',
29
+ 'KORWiN',
30
+ 'Polskie Stronnictwo Ludowe',
31
+ ZL_PARTY,
32
+ 'Kukiz’15',
33
+ N_PARTY,
34
+ 'JOW Bezpartyjni',
35
+ 'Stonoga Partia Polska',
36
+ 'Ruch Społeczny Rzeczypospolitej Polskiej',
37
+ 'Zjednoczeni dla Śląska',
38
+ 'Samoobrona',
39
+ 'Grzegorz Braun „Szczęść Boże!”',
40
+ 'Kongres Nowej Prawicy',
41
+ 'Mniejszość Niemiecka',
42
+ 'Obywatele do Parlamentu']
43
+
44
+ File.open(TARGET, 'w') do |output|
45
+ output.puts '# Statistical Analysis of Polling Results (SAPoR)'
46
+ output.puts '# Copyright (C) 2020 Filip van Laenen <f.a.vanlaenen@ieee.org>'
47
+ output.puts '#'
48
+ output.puts '# This file is part of SAPoR.'
49
+ output.puts '#'
50
+ output.puts '# SAPoR is free software: you can redistribute it and/or' \
51
+ ' modify it under the'
52
+ output.puts '# terms of the GNU General Public License as published by the' \
53
+ ' Free Software'
54
+ output.puts '# Foundation, either version 3 of the License, or (at your' \
55
+ ' option) any later'
56
+ output.puts '# version.'
57
+ output.puts '#'
58
+ output.puts '# SAPoR is distributed in the hope that it will be useful, but' \
59
+ ' WITHOUT ANY'
60
+ output.puts '# WARRANTY; without even the implied warranty of' \
61
+ ' MERCHANTABILITY or FITNESS FOR'
62
+ output.puts '# A PARTICULAR PURPOSE. See the GNU General Public License' \
63
+ ' for more details.'
64
+ output.puts '#'
65
+ output.puts '# You can find a copy of the GNU General Public License in' \
66
+ ' /doc/gpl.txt'
67
+ output.puts '#'
68
+ File.open(SOURCE).each do |line|
69
+ next if line.chomp.start_with?('Siedziba OKW')
70
+ if line.chomp.empty?
71
+ output.puts
72
+ else
73
+ elements = line.chomp.split(',').map(&:strip)
74
+ district = elements[0]
75
+ ko_no = 0
76
+ PARTIES.each_with_index do |p, i|
77
+ unless elements[i+1].nil? || elements[i+1].empty?
78
+ votes = elements[i+1].delete('.')
79
+ if p == ZL_PARTY
80
+ output.puts "#{district} | Sojusz Lewicy Demokratycznej | #{votes}"
81
+ output.puts "#{district} | Wiosna | #{votes}"
82
+ elsif p == PO_PARTY || p == N_PARTY
83
+ ko_no += votes.to_i
84
+ else
85
+ output.puts "#{district} | #{p} | #{votes}"
86
+ end
87
+ end
88
+ end
89
+ output.puts "#{district} | Koalicja Obywatelska | #{ko_no}"
90
+ end
91
+ end
92
+ end