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,93 @@
1
+ # Statistical Analysis of Polling Results (SAPoR)
2
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
3
+ #
4
+ # This file is part of SAPoR.
5
+ #
6
+ # SAPoR is free software: you can redistribute it and/or modify it under the
7
+ # terms of the GNU General Public License as published by the Free Software
8
+ # Foundation, either version 3 of the License, or (at your option) any later
9
+ # version.
10
+ #
11
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
12
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ #
15
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
16
+ #
17
+
18
+ # Source: Web page with the official results of the elections of 26 May 2019,
19
+ # downloaded on 7 August 2019,
20
+ # URL: https://verkiezingen2019.belgium.be/nl/verkiezingen?el=CK
21
+
22
+ Brabant wallon | Mouvement Réformateur | 86,463
23
+ Brabant wallon | Ecolo | 48,874
24
+ Brabant wallon | Parti Socialiste | 37,730
25
+ Brabant wallon | Centre démocrate humaniste | 18,805
26
+ Brabant wallon | Parti du Travail de Belgique | 18,278
27
+ Brabant wallon | DéFI | 15,109
28
+ Brabant wallon | Listes Destexhe | 6,313
29
+ Brabant wallon | Parti Populaire | 6,085
30
+ Brabant wallon | Collectif Citoyen | 3,299
31
+ Brabant wallon | Vlaams Belang | 2,097
32
+ Brabant wallon | Wallonie Insoumise | 2,088
33
+ Brabant wallon | La Droite | 1,460
34
+ Brabant wallon | Turquoise | 626
35
+
36
+ Hainaut | Parti Socialiste | 250,146
37
+ Hainaut | Mouvement Réformateur | 116,528
38
+ Hainaut | Parti du Travail de Belgique | 114,243
39
+ Hainaut | Ecolo | 89,898
40
+ Hainaut | Centre démocrate humaniste | 58,695
41
+ Hainaut | DéFI | 27,484
42
+ Hainaut | Parti Populaire | 24,719
43
+ Hainaut | Vlaams Belang | 8,246
44
+ Hainaut | Listes Destexhe | 8,177
45
+ Hainaut | Collectif Citoyen | 7,992
46
+ Hainaut | AGIR | 5,916
47
+ Hainaut | La Droite | 5,916
48
+ Hainaut | Lutte Ouvrière | 5,735
49
+ Hainaut | NATION | 5,341
50
+ Hainaut | Parti Communiste de Belgique | 1,626
51
+
52
+ Liège | Parti Socialiste | 154,232
53
+ Liège | Mouvement Réformateur | 121,732
54
+ Liège | Parti du Travail de Belgique | 101,860
55
+ Liège | Ecolo | 95,878
56
+ Liège | Centre démocrate humaniste | 52,167
57
+ Liège | DéFI | 22,313
58
+ Liège | Parti Populaire | 21,998
59
+ Liège | Les Belges d’Abord | 10,463
60
+ Liège | Listes Destexhe | 9,310
61
+ Liège | DierAnimal | 8,392
62
+ Liège | Collectif Citoyen | 7,395
63
+ Liège | Vlaams Belang | 4,093
64
+ Liège | La Droite | 3,949
65
+ Liège | Wallonie Insoumise | 3,266
66
+ Liège | NATION | 2,137
67
+
68
+ Luxembourg | Mouvement Réformateur | 40,242
69
+ Luxembourg | Centre démocrate humaniste | 40,056
70
+ Luxembourg | Parti Socialiste | 31,898
71
+ Luxembourg | Ecolo | 27,338
72
+ Luxembourg | Parti du Travail de Belgique | 15,424
73
+ Luxembourg | DéFI | 5,092
74
+ Luxembourg | Parti Populaire | 4,933
75
+ Luxembourg | Listes Destexhe | 1,707
76
+ Luxembourg | Vlaams Belang | 1,517
77
+ Luxembourg | La Droite | 1,440
78
+ Luxembourg | NATION | 1,176
79
+
80
+ Namur | Parti Socialiste | 67,422
81
+ Namur | Mouvement Réformateur | 60,266
82
+ Namur | Centre démocrate humaniste | 51,977
83
+ Namur | Ecolo | 46,320
84
+ Namur | Parti du Travail de Belgique | 36,330
85
+ Namur | DéFI | 14,809
86
+ Namur | Parti Populaire | 8,906
87
+ Namur | Listes Destexhe | 4,326
88
+ Namur | DierAnimal | 4,070
89
+ Namur | Collectif Citoyen | 2,406
90
+ Namur | La Droite | 2,310
91
+ Namur | Vlaams Belang | 2,124
92
+ Namur | NATION | 1,929
93
+ Namur | AGIR | 1,682
@@ -0,0 +1,97 @@
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 Belgium.
23
+ #
24
+ class Belgium < Area
25
+ include Singleton
26
+ def coalitions
27
+ COALITIONS
28
+ end
29
+
30
+ def no_of_seats
31
+ seat_distribution.values.inject(:+)
32
+ end
33
+
34
+ def seats(simulation)
35
+ electoral_system.project(simulation)
36
+ end
37
+
38
+ def threshold
39
+ THRESHOLD
40
+ end
41
+
42
+ private
43
+
44
+ THRESHOLD = 0.05
45
+
46
+ CDH_PARTY = 'Centre démocrate humaniste'.freeze
47
+ CDV_PARTY = 'Christen-Democratisch en Vlaams'.freeze
48
+ ECOLO_PARTY = 'Ecolo'.freeze
49
+ GROEN_PARTY = 'Groen'.freeze
50
+ MR_PARTY = 'Mouvement Réformateur'.freeze
51
+ NVA_PARTY = 'Nieuw-Vlaamse Alliantie'.freeze
52
+ OVLD_PARTY = 'Open Vlaamse Liberalen en Democraten'.freeze
53
+ PS_PARTY = 'Parti Socialiste'.freeze
54
+ PTB_PARTY = 'Parti du Travail de Belgique'.freeze
55
+ PVDA_PARTY = 'Partij van de Arbeid van België'.freeze
56
+ SPA_PARTY = 'Socialistische Partij Anders'.freeze
57
+
58
+ COALITIONS = [[CDH_PARTY, CDV_PARTY, ECOLO_PARTY, GROEN_PARTY, MR_PARTY,
59
+ OVLD_PARTY, PS_PARTY, SPA_PARTY],
60
+ [CDH_PARTY, CDV_PARTY, ECOLO_PARTY, GROEN_PARTY, MR_PARTY,
61
+ OVLD_PARTY],
62
+ [CDH_PARTY, CDV_PARTY, ECOLO_PARTY, GROEN_PARTY, PS_PARTY,
63
+ PTB_PARTY, PVDA_PARTY, SPA_PARTY],
64
+ [CDH_PARTY, CDV_PARTY, ECOLO_PARTY, GROEN_PARTY, PS_PARTY,
65
+ SPA_PARTY],
66
+ [CDH_PARTY, CDV_PARTY, MR_PARTY, NVA_PARTY, OVLD_PARTY],
67
+ [CDH_PARTY, CDV_PARTY, MR_PARTY, OVLD_PARTY],
68
+ [CDH_PARTY, CDV_PARTY, MR_PARTY, OVLD_PARTY, PS_PARTY,
69
+ SPA_PARTY],
70
+ [CDH_PARTY, CDV_PARTY, MR_PARTY, OVLD_PARTY, PS_PARTY],
71
+ [CDH_PARTY, CDV_PARTY, PS_PARTY, SPA_PARTY],
72
+ [CDH_PARTY, ECOLO_PARTY, GROEN_PARTY, PS_PARTY, PTB_PARTY,
73
+ PVDA_PARTY, SPA_PARTY],
74
+ [CDV_PARTY, ECOLO_PARTY, GROEN_PARTY, MR_PARTY, OVLD_PARTY,
75
+ PS_PARTY, SPA_PARTY],
76
+ [CDV_PARTY, MR_PARTY, NVA_PARTY, OVLD_PARTY],
77
+ [ECOLO_PARTY, GROEN_PARTY, MR_PARTY, OVLD_PARTY, PS_PARTY,
78
+ SPA_PARTY],
79
+ [ECOLO_PARTY, GROEN_PARTY, PS_PARTY, PTB_PARTY, PVDA_PARTY,
80
+ SPA_PARTY],
81
+ [MR_PARTY, NVA_PARTY, OVLD_PARTY, PS_PARTY, SPA_PARTY],
82
+ [MR_PARTY, OVLD_PARTY, PS_PARTY, SPA_PARTY]].freeze
83
+
84
+ def electoral_system
85
+ if @electoral_system.nil?
86
+ @electoral_system = MultiDistrictProportional.new(
87
+ overall_election_results_of_2019,
88
+ election_results_of_2019,
89
+ seat_distribution,
90
+ DhondtDenominators,
91
+ THRESHOLD
92
+ )
93
+ end
94
+ @electoral_system
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,62 @@
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 Belgium: the Brussels part.
23
+ #
24
+ class BelgiumBrussels < Belgium
25
+ def area_code
26
+ 'BE[BRU]'
27
+ end
28
+
29
+ def overall_election_results_of_2019
30
+ if @overall_election_results_of_2019.nil?
31
+ @overall_election_results_of_2019 = \
32
+ summarize_election_results(election_results_of_2019)
33
+ end
34
+ @overall_election_results_of_2019
35
+ end
36
+
37
+ # Voter turnout on 26 May 2019
38
+ # Source: Web page with the official results of the elections of 26 May
39
+ # 2019, downloaded on 6 August 2019,
40
+ # https://verkiezingen2019.belgium.be/nl/resultaten-cijfers?el=CK&id=CKC21004
41
+ def population_size
42
+ 501_459
43
+ end
44
+
45
+ def seat_distribution
46
+ SEAT_DISTRIBUTION
47
+ end
48
+
49
+ private
50
+
51
+ SEAT_DISTRIBUTION = { 'Bruxelles-Capitale / Brussel-Hoofdstad' => 15 }.freeze
52
+
53
+ def election_results_of_2019
54
+ if @election_results_of_2019.nil?
55
+ @election_results_of_2019 = load_election_results(
56
+ 'belgium-brussels-20190526.psv'
57
+ )
58
+ end
59
+ @election_results_of_2019
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,64 @@
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 Belgium: the Flemish part.
23
+ #
24
+ class BelgiumFlanders < Belgium
25
+ def area_code
26
+ 'BE[VLG]'
27
+ end
28
+
29
+ def overall_election_results_of_2019
30
+ if @overall_election_results_of_2019.nil?
31
+ @overall_election_results_of_2019 = \
32
+ summarize_election_results(election_results_of_2019)
33
+ end
34
+ @overall_election_results_of_2019
35
+ end
36
+
37
+ def population_size
38
+ # Voter turnout on 26 May 2019
39
+ # Source: Web page with the official results of the elections of 26 May
40
+ # 2019, downloaded on 6 August 2019,
41
+ # https://verkiezingen2019.belgium.be/nl/verkiezingen?el=CK
42
+ 1_156_127 + 554_838 + 998_917 + 690_028 + 806_395
43
+ end
44
+
45
+ def seat_distribution
46
+ SEAT_DISTRIBUTION
47
+ end
48
+
49
+ private
50
+
51
+ SEAT_DISTRIBUTION = { 'Antwerpen' => 24, 'Limburg' => 12,
52
+ 'Oost-Vlaanderen' => 20, 'Vlaams-Brabant' => 15,
53
+ 'West-Vlaanderen' => 16 }.freeze
54
+
55
+ def election_results_of_2019
56
+ if @election_results_of_2019.nil?
57
+ @election_results_of_2019 = load_election_results(
58
+ 'belgium-flanders-20190526.psv'
59
+ )
60
+ end
61
+ @election_results_of_2019
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,63 @@
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 Belgium: the Walloon part.
23
+ #
24
+ class BelgiumWallonia < Belgium
25
+ def area_code
26
+ 'BE[WAL]'
27
+ end
28
+
29
+ def overall_election_results_of_2019
30
+ if @overall_election_results_of_2019.nil?
31
+ @overall_election_results_of_2019 = \
32
+ summarize_election_results(election_results_of_2019)
33
+ end
34
+ @overall_election_results_of_2019
35
+ end
36
+
37
+ # Voter turnout on 26 May 2019
38
+ # Source: Web page with the official results of the elections of 26 May
39
+ # 2019, downloaded on 7 August 2019,
40
+ # https://verkiezingen2019.belgium.be/nl/verkiezingen?el=CK
41
+ def population_size
42
+ 730_662 + 619_185 + 170_823 + 304_877 + 247_227
43
+ end
44
+
45
+ def seat_distribution
46
+ SEAT_DISTRIBUTION
47
+ end
48
+
49
+ private
50
+
51
+ SEAT_DISTRIBUTION = { 'Brabant wallon' => 5, 'Hainaut' => 18, 'Liège' => 15,
52
+ 'Luxembourg' => 4, 'Namur' => 6 }.freeze
53
+
54
+ def election_results_of_2019
55
+ if @election_results_of_2019.nil?
56
+ @election_results_of_2019 = load_election_results(
57
+ 'belgium-wallonia-20190526.psv'
58
+ )
59
+ end
60
+ @election_results_of_2019
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,100 @@
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
+ # Adapted from catalonia-2012.psv for the 2015 elections using the following
22
+ # transformation rules:
23
+ # c = Junts pel Sí / (Convergència i Unió + Esquerra Republicana de Catalunya – Catalunya Sí)
24
+ # = 39.2% / (30.7% + 13.7%)
25
+ # = 0.882882883
26
+ # Junts pel Sí = c × (Convergència i Unió
27
+ # + Esquerra Republicana de Catalunya – Catalunya Sí)
28
+ # Unió Democràtica de Catalunya = (1 - c) × (Convergència i Unió
29
+ # + Esquerra Republicana de Catalunya
30
+ # – Catalunya Sí)
31
+ # Catalunya Sí que es Pot = Iniciativa per Catalunya Verds – Esquerra Unida i
32
+ # Alternativa
33
+
34
+ Barcelona | Junts pel Sí | 979,373
35
+ Barcelona | Partit dels Socialistes de Catalunya | 418,847
36
+ Barcelona | Partit Popular de Catalunya | 361,656
37
+ Barcelona | Catalunya Sí que es Pot | 303,625
38
+ Barcelona | Ciutadans-Partido de la Ciudadanía | 229,746
39
+ Barcelona | Unió Democràtica de Catalunya | 129,917
40
+ Barcelona | Candidatura d'Unitat Popular – Alternativa d'Esquerres | 92,794
41
+ Barcelona | Plataforma per Catalunya | 51,403
42
+ Barcelona | Solidaritat Catalana per la Independència | 32,296
43
+ Barcelona | Escons en Blanc | 22,817
44
+ Barcelona | Partido Animalista Contra el Maltrato Animal | 16,479
45
+ Barcelona | Pirates de Catalunya | 15,241
46
+ Barcelona | Unió, Progrés i Democràcia | 12,147
47
+ Barcelona | Farts.cat | 9,185
48
+ Barcelona | Via Democràtica | 5,984
49
+ Barcelona | Unificació Comunista d'Espanya | 1,998
50
+
51
+ Girona | Junts pel Sí | 185,048
52
+ Girona | Partit dels Socialistes de Catalunya | 34,688
53
+ Girona | Partit Popular de Catalunya | 33,096
54
+ Girona | Unió Democràtica de Catalunya | 24,547
55
+ Girona | Catalunya Sí que es Pot | 20,397
56
+ Girona | Candidatura d'Unitat Popular – Alternativa d'Esquerres | 14,499
57
+ Girona | Ciutadans-Partido de la Ciudadanía | 12,341
58
+ Girona | Solidaritat Catalana per la Independència | 6,011
59
+ Girona | Plataforma per Catalunya | 3,377
60
+ Girona | Escons en Blanc | 1,946
61
+ Girona | Partido Animalista Contra el Maltrato Animal | 1,565
62
+ Girona | Pirates de Catalunya | 1,137
63
+ Girona | Farts.cat | 718
64
+ Girona | Unió, Progrés i Democràcia | 701
65
+ Girona | Partit Republicà d'Esquerra – Izquierda Republicana | 525
66
+ Girona | Unificació Comunista d'Espanya | 201
67
+
68
+ Lleida | Junts pel Sí | 110,401
69
+ Lleida | Partit Popular de Catalunya | 23,338
70
+ Lleida | Partit dels Socialistes de Catalunya | 21,598
71
+ Lleida | Unió Democràtica de Catalunya | 14,645
72
+ Lleida | Catalunya Sí que es Pot | 11,145
73
+ Lleida | Ciutadans-Partido de la Ciudadanía | 6,881
74
+ Lleida | Candidatura d'Unitat Popular – Alternativa d'Esquerres | 6,302
75
+ Lleida | Solidaritat Catalana per la Independència | 3,038
76
+ Lleida | Escons en Blanc | 1,417
77
+ Lleida | Plataforma per Catalunya | 1,224
78
+ Lleida | Partido Animalista Contra el Maltrato Animal | 752
79
+ Lleida | Pirates de Catalunya | 642
80
+ Lleida | Farts.cat | 476
81
+ Lleida | Unió, Progrés i Democràcia | 392
82
+ Lleida | Partit Republicà d'Esquerra – Izquierda Republicana | 301
83
+ Lleida | Unificació Comunista d'Espanya | 90
84
+
85
+ Tarragona | Junts pel Sí | 148,104
86
+ Tarragona | Partit Popular de Catalunya | 53,591
87
+ Tarragona | Partit dels Socialistes de Catalunya | 48,642
88
+ Tarragona | Ciutadans-Partido de la Ciudadanía | 26,039
89
+ Tarragona | Catalunya Sí que es Pot | 24,538
90
+ Tarragona | Unió Democràtica de Catalunya | 19,646
91
+ Tarragona | Candidatura d'Unitat Popular – Alternativa d'Esquerres | 12,840
92
+ Tarragona | Solidaritat Catalana per la Independència | 5,493
93
+ Tarragona | Plataforma per Catalunya | 4,103
94
+ Tarragona | Escons en Blanc | 2,108
95
+ Tarragona | Partido Animalista Contra el Maltrato Animal | 2,065
96
+ Tarragona | Unió, Progrés i Democràcia | 1,373
97
+ Tarragona | Farts.cat | 1,323
98
+ Tarragona | Pirates de Catalunya | 1,199
99
+ Tarragona | Socialistes i Republicans | 333
100
+ Tarragona | Unificació Comunista d'Espanya | 287