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,104 @@
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
+ SOURCE = 'united_kingdom_2017.txt'.freeze
21
+ TARGET = '../../lib/sapor/regional_data/united_kingdom-20170608.psv'.freeze
22
+
23
+ File.open(TARGET, 'w') do |output|
24
+ output.puts '# Statistical Analysis of Polling Results (SAPoR)'
25
+ output.puts '# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>'
26
+ output.puts '#'
27
+ output.puts '# This file is part of SAPoR.'
28
+ output.puts '#'
29
+ output.puts '# SAPoR is free software: you can redistribute it and/or' \
30
+ ' modify it under the'
31
+ output.puts '# terms of the GNU General Public License as published by the' \
32
+ ' Free Software'
33
+ output.puts '# Foundation, either version 3 of the License, or (at your' \
34
+ ' option) any later'
35
+ output.puts '# version.'
36
+ output.puts '#'
37
+ output.puts '# SAPoR is distributed in the hope that it will be useful, but' \
38
+ ' WITHOUT ANY'
39
+ output.puts '# WARRANTY; without even the implied warranty of' \
40
+ ' MERCHANTABILITY or FITNESS FOR'
41
+ output.puts '# A PARTICULAR PURPOSE. See the GNU General Public License' \
42
+ ' for more details.'
43
+ output.puts '#'
44
+ output.puts '# You can find a copy of the GNU General Public License in' \
45
+ ' /doc/gpl.txt'
46
+ output.puts '#'
47
+ File.open(SOURCE).each do |line|
48
+ elements = line.chomp.split(';')
49
+ name = elements[0]
50
+ next if name == 'Name'
51
+ region = elements[2].to_i
52
+ output.puts ''
53
+ if region == 1
54
+ unless elements[5].to_i == 0
55
+ output.puts "#{name} | Ulster Unionist Party | #{elements[5]}"
56
+ end
57
+ unless elements[6].to_i == 0
58
+ output.puts "#{name} | Social Democratic & Labour Party | " \
59
+ "#{elements[6]}"
60
+ end
61
+ unless elements[7].to_i == 0
62
+ output.puts "#{name} | Democratic Unionist Party | #{elements[7]}"
63
+ end
64
+ else
65
+ unless elements[5].to_i == 0
66
+ output.puts "#{name} | Conservative Party | #{elements[5]}"
67
+ end
68
+ unless elements[6].to_i == 0
69
+ output.puts "#{name} | Labour Party | #{elements[6]}"
70
+ end
71
+ unless elements[7].to_i == 0
72
+ output.puts "#{name} | Liberal Democrats | #{elements[7]}"
73
+ end
74
+ end
75
+ unless elements[8].to_i == 0
76
+ output.puts "#{name} | UK Independence Party | #{elements[8]}"
77
+ end
78
+ unless elements[9].to_i == 0
79
+ output.puts "#{name} | Green Party | #{elements[9]}"
80
+ end
81
+ if region == 2
82
+ unless elements[10].to_i == 0
83
+ output.puts "#{name} | Scottish National Party | #{elements[10]}"
84
+ end
85
+ elsif region == 1
86
+ unless elements[10].to_i == 0
87
+ output.puts "#{name} | Sinn Féin | #{elements[10]}"
88
+ end
89
+ elsif region == 6
90
+ unless elements[10].to_i == 0
91
+ output.puts "#{name} | Plaid Cymru | #{elements[10]}"
92
+ end
93
+ elsif elements[10].to_i > 0
94
+ puts "Check out #{name}!"
95
+ end
96
+ unless elements[11].to_i == 0
97
+ output.puts "#{name} | Small or local party, or independent candidate " \
98
+ "| #{elements[11]}"
99
+ end
100
+ unless elements[12].to_i == 0
101
+ output.puts "#{name} | All other candidates | #{elements[12]}"
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,113 @@
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
+ SOURCE = 'united_kingdom_2017.txt'.freeze
21
+ TARGET = '../../lib/sapor/regional_data/united_kingdom-20170608-brexit-chuk.psv'.freeze
22
+
23
+ File.open(TARGET, 'w') do |output|
24
+ output.puts '# Statistical Analysis of Polling Results (SAPoR)'
25
+ output.puts '# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>'
26
+ output.puts '#'
27
+ output.puts '# This file is part of SAPoR.'
28
+ output.puts '#'
29
+ output.puts '# SAPoR is free software: you can redistribute it and/or' \
30
+ ' modify it under the'
31
+ output.puts '# terms of the GNU General Public License as published by the' \
32
+ ' Free Software'
33
+ output.puts '# Foundation, either version 3 of the License, or (at your' \
34
+ ' option) any later'
35
+ output.puts '# version.'
36
+ output.puts '#'
37
+ output.puts '# SAPoR is distributed in the hope that it will be useful, but' \
38
+ ' WITHOUT ANY'
39
+ output.puts '# WARRANTY; without even the implied warranty of' \
40
+ ' MERCHANTABILITY or FITNESS FOR'
41
+ output.puts '# A PARTICULAR PURPOSE. See the GNU General Public License' \
42
+ ' for more details.'
43
+ output.puts '#'
44
+ output.puts '# You can find a copy of the GNU General Public License in' \
45
+ ' /doc/gpl.txt'
46
+ output.puts '#'
47
+ output.puts '# Changes:'
48
+ output.puts '# Added Change UK as a combination of Conservative Party (3/318) and Labour Party (8/262)'
49
+ output.puts '# Added Brexit Party as a copy of UK Independence Party'
50
+ output.puts '#'
51
+ File.open(SOURCE).each do |line|
52
+ elements = line.chomp.split(';')
53
+ name = elements[0]
54
+ next if name == 'Name'
55
+ region = elements[2].to_i
56
+ output.puts ''
57
+ if region == 1
58
+ unless elements[5].to_i == 0
59
+ output.puts "#{name} | Ulster Unionist Party | #{elements[5]}"
60
+ end
61
+ unless elements[6].to_i == 0
62
+ output.puts "#{name} | Social Democratic & Labour Party | " \
63
+ "#{elements[6]}"
64
+ end
65
+ unless elements[7].to_i == 0
66
+ output.puts "#{name} | Democratic Unionist Party | #{elements[7]}"
67
+ end
68
+ else
69
+ unless elements[5].to_i == 0
70
+ output.puts "#{name} | Conservative Party | #{elements[5]}"
71
+ end
72
+ unless elements[6].to_i == 0
73
+ output.puts "#{name} | Labour Party | #{elements[6]}"
74
+ end
75
+ unless elements[7].to_i == 0
76
+ output.puts "#{name} | Liberal Democrats | #{elements[7]}"
77
+ end
78
+ tig = elements[5].to_i * 3 / 318 + elements[6].to_i * 8 / 262
79
+ unless tig == 0
80
+ output.puts "#{name} | Change UK | #{tig}"
81
+ end
82
+ end
83
+ unless elements[8].to_i == 0
84
+ output.puts "#{name} | UK Independence Party | #{elements[8]}"
85
+ output.puts "#{name} | Brexit Party | #{elements[8]}"
86
+ end
87
+ unless elements[9].to_i == 0
88
+ output.puts "#{name} | Green Party | #{elements[9]}"
89
+ end
90
+ if region == 2
91
+ unless elements[10].to_i == 0
92
+ output.puts "#{name} | Scottish National Party | #{elements[10]}"
93
+ end
94
+ elsif region == 1
95
+ unless elements[10].to_i == 0
96
+ output.puts "#{name} | Sinn Féin | #{elements[10]}"
97
+ end
98
+ elsif region == 6
99
+ unless elements[10].to_i == 0
100
+ output.puts "#{name} | Plaid Cymru | #{elements[10]}"
101
+ end
102
+ elsif elements[10].to_i > 0
103
+ puts "Check out #{name}!"
104
+ end
105
+ unless elements[11].to_i == 0
106
+ output.puts "#{name} | Small or local party, or independent candidate " \
107
+ "| #{elements[11]}"
108
+ end
109
+ unless elements[12].to_i == 0
110
+ output.puts "#{name} | All other candidates | #{elements[12]}"
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,111 @@
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
+ SOURCE = 'united_kingdom_2017.txt'.freeze
21
+ TARGET = '../../lib/sapor/regional_data/united_kingdom-20170608-tig.psv'.freeze
22
+
23
+ File.open(TARGET, 'w') do |output|
24
+ output.puts '# Statistical Analysis of Polling Results (SAPoR)'
25
+ output.puts '# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>'
26
+ output.puts '#'
27
+ output.puts '# This file is part of SAPoR.'
28
+ output.puts '#'
29
+ output.puts '# SAPoR is free software: you can redistribute it and/or' \
30
+ ' modify it under the'
31
+ output.puts '# terms of the GNU General Public License as published by the' \
32
+ ' Free Software'
33
+ output.puts '# Foundation, either version 3 of the License, or (at your' \
34
+ ' option) any later'
35
+ output.puts '# version.'
36
+ output.puts '#'
37
+ output.puts '# SAPoR is distributed in the hope that it will be useful, but' \
38
+ ' WITHOUT ANY'
39
+ output.puts '# WARRANTY; without even the implied warranty of' \
40
+ ' MERCHANTABILITY or FITNESS FOR'
41
+ output.puts '# A PARTICULAR PURPOSE. See the GNU General Public License' \
42
+ ' for more details.'
43
+ output.puts '#'
44
+ output.puts '# You can find a copy of the GNU General Public License in' \
45
+ ' /doc/gpl.txt'
46
+ output.puts '#'
47
+ output.puts '# Changes:'
48
+ output.puts '# Added The Independent Group as a combination of Conservative Party (3/318) and Labour Party (8/262)'
49
+ output.puts '#'
50
+ File.open(SOURCE).each do |line|
51
+ elements = line.chomp.split(';')
52
+ name = elements[0]
53
+ next if name == 'Name'
54
+ region = elements[2].to_i
55
+ output.puts ''
56
+ if region == 1
57
+ unless elements[5].to_i == 0
58
+ output.puts "#{name} | Ulster Unionist Party | #{elements[5]}"
59
+ end
60
+ unless elements[6].to_i == 0
61
+ output.puts "#{name} | Social Democratic & Labour Party | " \
62
+ "#{elements[6]}"
63
+ end
64
+ unless elements[7].to_i == 0
65
+ output.puts "#{name} | Democratic Unionist Party | #{elements[7]}"
66
+ end
67
+ else
68
+ unless elements[5].to_i == 0
69
+ output.puts "#{name} | Conservative Party | #{elements[5]}"
70
+ end
71
+ unless elements[6].to_i == 0
72
+ output.puts "#{name} | Labour Party | #{elements[6]}"
73
+ end
74
+ unless elements[7].to_i == 0
75
+ output.puts "#{name} | Liberal Democrats | #{elements[7]}"
76
+ end
77
+ tig = elements[5].to_i * 3 / 318 + elements[6].to_i * 8 / 262
78
+ unless tig == 0
79
+ output.puts "#{name} | The Independent Group | #{tig}"
80
+ end
81
+ end
82
+ unless elements[8].to_i == 0
83
+ output.puts "#{name} | UK Independence Party | #{elements[8]}"
84
+ end
85
+ unless elements[9].to_i == 0
86
+ output.puts "#{name} | Green Party | #{elements[9]}"
87
+ end
88
+ if region == 2
89
+ unless elements[10].to_i == 0
90
+ output.puts "#{name} | Scottish National Party | #{elements[10]}"
91
+ end
92
+ elsif region == 1
93
+ unless elements[10].to_i == 0
94
+ output.puts "#{name} | Sinn Féin | #{elements[10]}"
95
+ end
96
+ elsif region == 6
97
+ unless elements[10].to_i == 0
98
+ output.puts "#{name} | Plaid Cymru | #{elements[10]}"
99
+ end
100
+ elsif elements[10].to_i > 0
101
+ puts "Check out #{name}!"
102
+ end
103
+ unless elements[11].to_i == 0
104
+ output.puts "#{name} | Small or local party, or independent candidate " \
105
+ "| #{elements[11]}"
106
+ end
107
+ unless elements[12].to_i == 0
108
+ output.puts "#{name} | All other candidates | #{elements[12]}"
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,150 @@
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
+ # Library namespace
20
+ module Sapor
21
+ def self.analyze(filename, arguments)
22
+ yaml_file = filename.gsub('.poll', '-state.yaml')
23
+ options = Options.new(arguments)
24
+ if File.exist?(yaml_file)
25
+ YAML::load(File.open(yaml_file)).continue_analysis(options)
26
+ else
27
+ Poll.from_file(filename).analyze(options)
28
+ end
29
+ end
30
+ end
31
+
32
+ require 'sapor/number_formatter'
33
+ require 'sapor/dichotomies'
34
+ require 'sapor/combinations_distribution'
35
+ require 'sapor/dichotomy'
36
+ require 'sapor/log4r_logger'
37
+ require 'sapor/log_facade'
38
+ require 'sapor/pseudorandom_multirange_enumerator'
39
+ require 'sapor/binomials_cache'
40
+ require 'sapor/options'
41
+ require 'sapor/polychotomy'
42
+ require 'sapor/referendum_polychotomy'
43
+ require 'sapor/representatives_polychotomy'
44
+ require 'sapor/first_past_the_post'
45
+ require 'sapor/largest_remainder'
46
+ require 'sapor/denominators'
47
+ require 'sapor/single_district_proportional'
48
+ require 'sapor/multi_district_proportional'
49
+ require 'sapor/multi_district_leveled_proportional'
50
+ require 'sapor/multi_district_variable_threshold_proportional'
51
+ require 'sapor/regional_data/area'
52
+ require 'sapor/regional_data/austria'
53
+ require 'sapor/regional_data/belgium'
54
+ require 'sapor/regional_data/belgium_brussels'
55
+ require 'sapor/regional_data/belgium_flanders'
56
+ require 'sapor/regional_data/belgium_wallonia'
57
+ require 'sapor/regional_data/catalonia'
58
+ require 'sapor/regional_data/catalonia-no-jxsi'
59
+ require 'sapor/regional_data/catalonia-jxcat'
60
+ require 'sapor/regional_data/denmark'
61
+ require 'sapor/regional_data/denmark_with_e'
62
+ require 'sapor/regional_data/denmark_with_e_and_p'
63
+ require 'sapor/regional_data/denmark_with_p'
64
+ require 'sapor/regional_data/estonia'
65
+ require 'sapor/regional_data/european_union_27_austria'
66
+ require 'sapor/regional_data/european_union_27_croatia'
67
+ require 'sapor/regional_data/european_union_27_denmark'
68
+ require 'sapor/regional_data/european_union_27_estonia'
69
+ require 'sapor/regional_data/european_union_27_finland'
70
+ require 'sapor/regional_data/european_union_27_ireland'
71
+ require 'sapor/regional_data/european_union_27_ireland_with_ia'
72
+ require 'sapor/regional_data/european_union_27_italy'
73
+ require 'sapor/regional_data/european_union_27_netherlands'
74
+ require 'sapor/regional_data/european_union_27_poland'
75
+ require 'sapor/regional_data/european_union_27_romania'
76
+ require 'sapor/regional_data/european_union_27_slovakia'
77
+ require 'sapor/regional_data/european_union_27_spain'
78
+ require 'sapor/regional_data/european_union_27_sweden'
79
+ require 'sapor/regional_data/european_union_austria'
80
+ require 'sapor/regional_data/european_union_bulgaria'
81
+ require 'sapor/regional_data/european_union_croatia'
82
+ require 'sapor/regional_data/european_union_cyprus'
83
+ require 'sapor/regional_data/european_union_czech_republic'
84
+ require 'sapor/regional_data/european_union_denmark'
85
+ require 'sapor/regional_data/european_union_estonia'
86
+ require 'sapor/regional_data/european_union_finland'
87
+ require 'sapor/regional_data/european_union_flanders'
88
+ require 'sapor/regional_data/european_union_france'
89
+ require 'sapor/regional_data/european_union_france_2019'
90
+ require 'sapor/regional_data/european_union_french_community_of_belgium'
91
+ require 'sapor/regional_data/european_union_germany'
92
+ require 'sapor/regional_data/european_union_great_britain'
93
+ require 'sapor/regional_data/european_union_greece'
94
+ require 'sapor/regional_data/european_union_hungary'
95
+ require 'sapor/regional_data/european_union_ireland'
96
+ require 'sapor/regional_data/european_union_ireland_with_ia'
97
+ require 'sapor/regional_data/european_union_italy'
98
+ require 'sapor/regional_data/european_union_latvia'
99
+ require 'sapor/regional_data/european_union_lithuania'
100
+ require 'sapor/regional_data/european_union_luxembourg'
101
+ require 'sapor/regional_data/european_union_malta'
102
+ require 'sapor/regional_data/european_union_netherlands'
103
+ require 'sapor/regional_data/european_union_northern_ireland'
104
+ require 'sapor/regional_data/european_union_poland'
105
+ require 'sapor/regional_data/european_union_portugal'
106
+ require 'sapor/regional_data/european_union_romania'
107
+ require 'sapor/regional_data/european_union_slovakia'
108
+ require 'sapor/regional_data/european_union_slovenia'
109
+ require 'sapor/regional_data/european_union_spain'
110
+ require 'sapor/regional_data/european_union_sweden'
111
+ require 'sapor/regional_data/finland'
112
+ require 'sapor/regional_data/finland_with_sin'
113
+ require 'sapor/regional_data/flanders'
114
+ require 'sapor/regional_data/france'
115
+ require 'sapor/regional_data/greece'
116
+ require 'sapor/regional_data/hungary'
117
+ require 'sapor/regional_data/iceland'
118
+ require 'sapor/regional_data/latvia'
119
+ require 'sapor/regional_data/latvia_kpv'
120
+ require 'sapor/regional_data/latvia_kpv_p_par'
121
+ require 'sapor/regional_data/latvia_kpv_par'
122
+ require 'sapor/regional_data/luxembourg'
123
+ require 'sapor/regional_data/netherlands'
124
+ require 'sapor/regional_data/norway'
125
+ require 'sapor/regional_data/norwegian_municipality'
126
+ require 'sapor/regional_data/poland'
127
+ require 'sapor/regional_data/poland_with_ko_and_l_without_n_po_r_and_zl'
128
+ require 'sapor/regional_data/poland_with_ko_konf_kp_l_and_zp_without_k_k15_n_pis_po_psl_r_and_zl'
129
+ require 'sapor/regional_data/poland_with_ko_sld_and_wi_without_n_po_and_zl'
130
+ require 'sapor/regional_data/poland_with_sld_and_wi_without_zl'
131
+ require 'sapor/regional_data/poland_with_sld_without_zl'
132
+ require 'sapor/regional_data/portugal'
133
+ require 'sapor/regional_data/portugal_with_a_and_ch_without_paf'
134
+ require 'sapor/regional_data/portugal_with_a_and_il_without_paf'
135
+ require 'sapor/regional_data/portugal_with_a_ch_and_il_without_paf'
136
+ require 'sapor/regional_data/portugal_with_a_without_paf'
137
+ require 'sapor/regional_data/portugal_with_ch_and_il_without_paf'
138
+ require 'sapor/regional_data/portugal_without_paf'
139
+ require 'sapor/regional_data/slovakia'
140
+ require 'sapor/regional_data/slovenia'
141
+ require 'sapor/regional_data/spain'
142
+ require 'sapor/regional_data/sweden'
143
+ require 'sapor/regional_data/sweden_20140914'
144
+ require 'sapor/regional_data/united_kingdom'
145
+ require 'sapor/regional_data/united_kingdom_with_brexit'
146
+ require 'sapor/regional_data/united_kingdom_with_brexit_and_chuk'
147
+ require 'sapor/regional_data/united_kingdom_with_tig'
148
+ require 'sapor/regional_data/utopia'
149
+ require 'sapor/regional_data/wallonia'
150
+ require 'sapor/poll'