sapor 0.1b1

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 (56) 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/Examples.md +361 -0
  7. data/LICENSE +674 -0
  8. data/README.md +70 -0
  9. data/Rakefile +18 -0
  10. data/Technical Documentation.md +14 -0
  11. data/bin/create_installation_package.sh +49 -0
  12. data/bin/install.sh +45 -0
  13. data/bin/sapor.rb +22 -0
  14. data/bin/sapor.sh +105 -0
  15. data/lib/sapor.rb +44 -0
  16. data/lib/sapor/binomials_cache.rb +45 -0
  17. data/lib/sapor/combinations_distribution.rb +180 -0
  18. data/lib/sapor/dichotomies.rb +98 -0
  19. data/lib/sapor/dichotomy.rb +138 -0
  20. data/lib/sapor/first_past_the_post.rb +78 -0
  21. data/lib/sapor/leveled_proportional.rb +64 -0
  22. data/lib/sapor/log4r_logger.rb +49 -0
  23. data/lib/sapor/log_facade.rb +40 -0
  24. data/lib/sapor/number_formatter.rb +45 -0
  25. data/lib/sapor/poll.rb +137 -0
  26. data/lib/sapor/polychotomy.rb +359 -0
  27. data/lib/sapor/proportional.rb +128 -0
  28. data/lib/sapor/pseudorandom_multirange_enumerator.rb +87 -0
  29. data/lib/sapor/regional_data/area.rb +80 -0
  30. data/lib/sapor/regional_data/catalonia-2012-2015.psv +100 -0
  31. data/lib/sapor/regional_data/catalonia-2012.psv +87 -0
  32. data/lib/sapor/regional_data/catalonia.rb +90 -0
  33. data/lib/sapor/regional_data/norway.rb +408 -0
  34. data/lib/sapor/regional_data/united_kingdom.rb +1075 -0
  35. data/lib/sapor/regional_data/utopia.rb +66 -0
  36. data/sapor.gemspec +35 -0
  37. data/spec/integration/area_spec.rb +28 -0
  38. data/spec/integration/poll_spec.rb +107 -0
  39. data/spec/integration/sample.poll +7 -0
  40. data/spec/spec_helper.rb +31 -0
  41. data/spec/unit/area_spec.rb +115 -0
  42. data/spec/unit/binomials_cache_spec.rb +34 -0
  43. data/spec/unit/catalonia_spec.rb +82 -0
  44. data/spec/unit/combinations_distribution_spec.rb +241 -0
  45. data/spec/unit/denominators_spec.rb +34 -0
  46. data/spec/unit/dichotomies_spec.rb +154 -0
  47. data/spec/unit/dichotomy_spec.rb +320 -0
  48. data/spec/unit/first_past_the_post_spec.rb +53 -0
  49. data/spec/unit/leveled_proportional_spec.rb +51 -0
  50. data/spec/unit/norway_spec.rb +47 -0
  51. data/spec/unit/number_formatter_spec.rb +173 -0
  52. data/spec/unit/poll_spec.rb +105 -0
  53. data/spec/unit/polychotomy_spec.rb +332 -0
  54. data/spec/unit/proportional_spec.rb +86 -0
  55. data/spec/unit/pseudorandom_multirange_enumerator_spec.rb +82 -0
  56. metadata +119 -0
@@ -0,0 +1,90 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2014 Filip van Laenen <f.a.vanlaenen@ieee.org>
5
+ #
6
+ # This file is part of SAPoR.
7
+ #
8
+ # SAPoR is free software: you can redistribute it and/or modify it under the
9
+ # terms of the GNU General Public License as published by the Free Software
10
+ # Foundation, either version 3 of the License, or (at your option) any later
11
+ # version.
12
+ #
13
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
14
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16
+ #
17
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
18
+ #
19
+
20
+ module Sapor
21
+ #
22
+ # The regional data for Catalonia.
23
+ #
24
+ class Catalonia < Area
25
+ def area_code
26
+ 'ES-CT'
27
+ end
28
+
29
+ def coalitions
30
+ [['Junts pel Sí'],
31
+ ['Junts pel Sí',
32
+ "Candidatura d'Unitat Popular – Alternativa d'Esquerres"]]
33
+ end
34
+
35
+ def no_of_seats
36
+ SEAT_DISTRIBUTION.values.inject(:+)
37
+ end
38
+
39
+ def overall_election_results_of_2012_adapted_to_2015
40
+ if @overall_election_results_of_2012_adapted_to_2015.nil?
41
+ @overall_election_results_of_2012_adapted_to_2015 = \
42
+ summarize_election_results(election_results_of_2012_adapted_to_2015)
43
+ end
44
+ @overall_election_results_of_2012_adapted_to_2015
45
+ end
46
+
47
+ def population_size
48
+ # Voter turnout in 2012
49
+ # Source: Catalonian parliamentary election, 2012, Wikipedia, retrieved on
50
+ # 22 July 2015.
51
+ # URL: https://en.wikipedia.org/wiki/Catalonian_parliamentary_election,_2012
52
+ 3_668_310
53
+ end
54
+
55
+ def seats(simulation)
56
+ electoral_system.project(simulation)
57
+ end
58
+
59
+ def threshold
60
+ THRESHOLD
61
+ end
62
+
63
+ private
64
+
65
+ SEAT_DISTRIBUTION = { 'Barcelona' => 85, 'Girona' => 17, 'Lleida' => 15,
66
+ 'Tarragona' => 18 }
67
+
68
+ THRESHOLD = 0.03
69
+
70
+ def election_results_of_2012_adapted_to_2015
71
+ if @election_results_of_2012_adapted_to_2015.nil?
72
+ @election_results_of_2012_adapted_to_2015 = load_election_results( \
73
+ 'catalonia-2012-2015.psv')
74
+ end
75
+ @election_results_of_2012_adapted_to_2015
76
+ end
77
+
78
+ def electoral_system
79
+ if @electoral_system.nil?
80
+ @electoral_system = Proportional.new( \
81
+ overall_election_results_of_2012_adapted_to_2015,
82
+ election_results_of_2012_adapted_to_2015,
83
+ SEAT_DISTRIBUTION,
84
+ DhondtDenominators,
85
+ THRESHOLD)
86
+ end
87
+ @electoral_system
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,408 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2014 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 Norway.
23
+ #
24
+ class Norway
25
+ include Singleton
26
+
27
+ # Source: NSD European Election Database, Parliamentary election of 2013,\
28
+ # retrieved on 14 April 2015.
29
+ # URL: http://eed.nsd.uib.no/webview/index.jsp?stubs=nuts_id&study=http%3A%2F%2F129.177.90.166%3A80%2Fobj%2FfStudy%2Fnopa2013&virtualslice=pv_p_value&measuretype=4&headers=party_name_org&mode=cube&v=2&party_name_orgsubset=1+-+9&cube=http%3A%2F%2F129.177.90.166%3A80%2Fobj%2FfCube%2Fnopa2013_C1&nuts_idsubset=NO%2CNO011+-+NO073&virtualsubset=pv_p_value&layers=virtual&measure=common&top=yes
30
+ LAST_ELECTION_RESULT = { 'Arbeiderpartiet' => 874_769,
31
+ 'Høyre' => 760_232,
32
+ 'Fremskrittspartiet' => 463_560,
33
+ 'Kristelig Folkeparti' => 158_475,
34
+ 'Senterpartiet' => 155_357,
35
+ 'Venstre' => 148_275,
36
+ 'Sosialistisk Venstreparti' => 116_021,
37
+ 'Miljøpartiet de Grønne' => 79_152,
38
+ 'Rødt' => 30_751,
39
+ 'De Kristne' => 17_731,
40
+ 'Pensjonistpartiet' => 11_865,
41
+ 'Piratpartiet' => 9_869,
42
+ 'Kystpartiet' => 3_311,
43
+ 'Demokratene i Norge' => 2_214,
44
+ 'Kristent Samlingsparti' => 1_722,
45
+ 'Det Liberale Folkepartiet' => 909,
46
+ 'Norges Kommunistiske Parti' => 611,
47
+ 'Sykehus til Alta' => 467,
48
+ 'Samfunnspartiet' => 295,
49
+ 'Folkeliste mot oljeboring i Lofoten, Vesterålen' \
50
+ ' og Senja' => 268,
51
+ 'Folkemakten' => 175 }
52
+
53
+ # Source: NSD European Election Database, Parliamentary election of 2013,
54
+ # retrieved on 14 April 2015.
55
+ # URL: http://eed.nsd.uib.no/webview/index.jsp?stubs=nuts_id&study=http%3A%2F%2F129.177.90.166%3A80%2Fobj%2FfStudy%2Fnopa2013&virtualslice=pv_p_value&measuretype=4&headers=party_name_org&mode=cube&v=2&party_name_orgsubset=1+-+9&cube=http%3A%2F%2F129.177.90.166%3A80%2Fobj%2FfCube%2Fnopa2013_C1&nuts_idsubset=NO%2CNO011+-+NO073&virtualsubset=pv_p_value&layers=virtual&measure=common&top=yes
56
+ LAST_DETAILED_ELECTION_RESULT = {
57
+ 'Akershus' => { 'Arbeiderpartiet' => 91_364,
58
+ 'Høyre' => 108_860,
59
+ 'Fremskrittspartiet' => 54_658,
60
+ 'Kristelig Folkeparti' => 10_377,
61
+ 'Senterpartiet' => 8_111,
62
+ 'Venstre' => 20_217,
63
+ 'Sosialistisk Venstreparti' => 11_305,
64
+ 'Miljøpartiet de Grønne' => 9_804,
65
+ 'Rødt' => 2_365,
66
+ 'De Kristne' => 792,
67
+ 'Pensjonistpartiet' => 1_557,
68
+ 'Piratpartiet' => 1_106,
69
+ 'Kystpartiet' => 149,
70
+ 'Demokratene i Norge' => 115,
71
+ 'Kristent Samlingsparti' => 197,
72
+ 'Det Liberale Folkepartiet' => 195,
73
+ 'Samfunnspartiet' => 77 },
74
+ 'Aust-Agder' => { 'Arbeiderpartiet' => 17_623,
75
+ 'Høyre' => 16_303,
76
+ 'Fremskrittspartiet' => 11_278,
77
+ 'Kristelig Folkeparti' => 7_019,
78
+ 'Senterpartiet' => 2_815,
79
+ 'Venstre' => 3_033,
80
+ 'Sosialistisk Venstreparti' => 1_652,
81
+ 'Miljøpartiet de Grønne' => 1_242,
82
+ 'Rødt' => 345,
83
+ 'De Kristne' => 862,
84
+ 'Pensjonistpartiet' => 354,
85
+ 'Piratpartiet' => 176,
86
+ 'Kystpartiet' => 35,
87
+ 'Demokratene i Norge' => 46,
88
+ 'Kristent Samlingsparti' => 117 },
89
+ 'Buskerud' => { 'Arbeiderpartiet' => 47_572,
90
+ 'Høyre' => 43_515,
91
+ 'Fremskrittspartiet' => 27_854,
92
+ 'Kristelig Folkeparti' => 4_863,
93
+ 'Senterpartiet' => 9_110,
94
+ 'Venstre' => 6_913,
95
+ 'Sosialistisk Venstreparti' => 4_094,
96
+ 'Miljøpartiet de Grønne' => 3_345,
97
+ 'Rødt' => 905,
98
+ 'De Kristne' => 736,
99
+ 'Piratpartiet' => 508,
100
+ 'Kystpartiet' => 135,
101
+ 'Demokratene i Norge' => 80,
102
+ 'Kristent Samlingsparti' => 125,
103
+ 'Samfunnspartiet' => 56 },
104
+ 'Finnmark' => { 'Arbeiderpartiet' => 15_003,
105
+ 'Høyre' => 8_032,
106
+ 'Fremskrittspartiet' => 6_038,
107
+ 'Kristelig Folkeparti' => 1_117,
108
+ 'Senterpartiet' => 1_403,
109
+ 'Venstre' => 1_359,
110
+ 'Sosialistisk Venstreparti' => 1_952,
111
+ 'Miljøpartiet de Grønne' => 844,
112
+ 'Rødt' => 351,
113
+ 'De Kristne' => 335,
114
+ 'Piratpartiet' => 144,
115
+ 'Kystpartiet' => 550,
116
+ 'Demokratene i Norge' => 23,
117
+ 'Kristent Samlingsparti' => 41,
118
+ 'Sykehus til Alta' => 467 },
119
+ 'Hedmark' => { 'Arbeiderpartiet' => 48_694,
120
+ 'Høyre' => 20_600,
121
+ 'Fremskrittspartiet' => 15_316,
122
+ 'Kristelig Folkeparti' => 2_871,
123
+ 'Senterpartiet' => 11_483,
124
+ 'Venstre' => 3_805,
125
+ 'Sosialistisk Venstreparti' => 4_393,
126
+ 'Miljøpartiet de Grønne' => 2_224,
127
+ 'Rødt' => 773,
128
+ 'De Kristne' => 414,
129
+ 'Pensjonistpartiet' => 1_719,
130
+ 'Piratpartiet' => 311,
131
+ 'Kystpartiet' => 57,
132
+ 'Demokratene i Norge' => 63 },
133
+ 'Hordaland' => { 'Arbeiderpartiet' => 71_216,
134
+ 'Høyre' => 89_682,
135
+ 'Fremskrittspartiet' => 43_357,
136
+ 'Kristelig Folkeparti' => 22_114,
137
+ 'Senterpartiet' => 12_490,
138
+ 'Venstre' => 16_614,
139
+ 'Sosialistisk Venstreparti' => 14_143,
140
+ 'Miljøpartiet de Grønne' => 9_171,
141
+ 'Rødt' => 2_687,
142
+ 'De Kristne' => 2_422,
143
+ 'Pensjonistpartiet' => 631,
144
+ 'Piratpartiet' => 1_062,
145
+ 'Kystpartiet' => 267,
146
+ 'Demokratene i Norge' => 275,
147
+ 'Norges Kommunistiske Parti' => 127,
148
+ 'Folkemakten' => 175 },
149
+ 'Møre og Romsdal' => { 'Arbeiderpartiet' => 36_048,
150
+ 'Høyre' => 37_594,
151
+ 'Fremskrittspartiet' => 28_746,
152
+ 'Kristelig Folkeparti' => 12_786,
153
+ 'Senterpartiet' => 11_749,
154
+ 'Venstre' => 7_965,
155
+ 'Sosialistisk Venstreparti' => 3_532,
156
+ 'Miljøpartiet de Grønne' => 1_963,
157
+ 'Rødt' => 642,
158
+ 'De Kristne' => 1_534,
159
+ 'Piratpartiet' => 479,
160
+ 'Kystpartiet' => 159,
161
+ 'Demokratene i Norge' => 94 },
162
+ 'Nord-Trøndelag' => { 'Arbeiderpartiet' => 32_054,
163
+ 'Høyre' => 11_128,
164
+ 'Fremskrittspartiet' => 9_869,
165
+ 'Kristelig Folkeparti' => 2_707,
166
+ 'Senterpartiet' => 12_796,
167
+ 'Venstre' => 3_158,
168
+ 'Sosialistisk Venstreparti' => 2_596,
169
+ 'Miljøpartiet de Grønne' => 1_051,
170
+ 'Rødt' => 423,
171
+ 'De Kristne' => 283,
172
+ 'Piratpartiet' => 209,
173
+ 'Kystpartiet' => 81,
174
+ 'Demokratene i Norge' => 38,
175
+ 'Kristent Samlingsparti' => 107 },
176
+ 'Nordland' => { 'Arbeiderpartiet' => 46_743,
177
+ 'Høyre' => 28_271,
178
+ 'Fremskrittspartiet' => 25_020,
179
+ 'Kristelig Folkeparti' => 4_886,
180
+ 'Senterpartiet' => 9_237,
181
+ 'Venstre' => 4_938,
182
+ 'Sosialistisk Venstreparti' => 6_907,
183
+ 'Miljøpartiet de Grønne' => 2_653,
184
+ 'Rødt' => 2_164,
185
+ 'De Kristne' => 698,
186
+ 'Pensjonistpartiet' => 416,
187
+ 'Piratpartiet' => 451,
188
+ 'Kystpartiet' => 424,
189
+ 'Demokratene i Norge' => 60,
190
+ 'Norges Kommunistiske Parti' => 58,
191
+ 'Samfunnspartiet' => 92,
192
+ 'Folkeliste mot oljeboring i Lofoten, Vesterålen og' \
193
+ ' Senja' => 268 },
194
+ 'Oppland' => { 'Arbeiderpartiet' => 44_050,
195
+ 'Høyre' => 20_537,
196
+ 'Fremskrittspartiet' => 13_683,
197
+ 'Kristelig Folkeparti' => 3_418,
198
+ 'Senterpartiet' => 13_162,
199
+ 'Venstre' => 4_248,
200
+ 'Sosialistisk Venstreparti' => 3_165,
201
+ 'Miljøpartiet de Grønne' => 2_583,
202
+ 'Rødt' => 817,
203
+ 'De Kristne' => 460,
204
+ 'Pensjonistpartiet' => 802,
205
+ 'Piratpartiet' => 298,
206
+ 'Kystpartiet' => 74,
207
+ 'Demokratene i Norge' => 54,
208
+ 'Det Liberale Folkepartiet' => 58 },
209
+ 'Oslo' => { 'Arbeiderpartiet' => 106_001,
210
+ 'Høyre' => 103_834,
211
+ 'Fremskrittspartiet' => 40_660,
212
+ 'Kristelig Folkeparti' => 9_850,
213
+ 'Senterpartiet' => 2_963,
214
+ 'Venstre' => 28_619,
215
+ 'Sosialistisk Venstreparti' => 21_924,
216
+ 'Miljøpartiet de Grønne' => 19_356,
217
+ 'Rødt' => 11_133,
218
+ 'De Kristne' => 734,
219
+ 'Pensjonistpartiet' => 1_172,
220
+ 'Piratpartiet' => 1_357,
221
+ 'Kystpartiet' => 126,
222
+ 'Demokratene i Norge' => 236,
223
+ 'Kristent Samlingsparti' => 97,
224
+ 'Det Liberale Folkepartiet' => 267,
225
+ 'Norges Kommunistiske Parti' => 143,
226
+ 'Samfunnspartiet' => 70 },
227
+ 'Rogaland' => { 'Arbeiderpartiet' => 54_462,
228
+ 'Høyre' => 72_470,
229
+ 'Fremskrittspartiet' => 45_082,
230
+ 'Kristelig Folkeparti' => 25_585,
231
+ 'Senterpartiet' => 12_621,
232
+ 'Venstre' => 10_827,
233
+ 'Sosialistisk Venstreparti' => 7_908,
234
+ 'Miljøpartiet de Grønne' => 5_267,
235
+ 'Rødt' => 1_060,
236
+ 'De Kristne' => 2_296,
237
+ 'Pensjonistpartiet' => 1_191,
238
+ 'Piratpartiet' => 865,
239
+ 'Kystpartiet' => 202,
240
+ 'Demokratene i Norge' => 115,
241
+ 'Kristent Samlingsparti' => 351,
242
+ 'Det Liberale Folkepartiet' => 226,
243
+ 'Norges Kommunistiske Parti' => 67 },
244
+ 'Sogn og Fjordane' => { 'Arbeiderpartiet' => 17_183,
245
+ 'Høyre' => 11_635,
246
+ 'Fremskrittspartiet' => 6_608,
247
+ 'Kristelig Folkeparti' => 4_952,
248
+ 'Senterpartiet' => 12_619,
249
+ 'Venstre' => 3_883,
250
+ 'Sosialistisk Venstreparti' => 2_076,
251
+ 'Miljøpartiet de Grønne' => 1_032,
252
+ 'Rødt' => 386,
253
+ 'De Kristne' => 515,
254
+ 'Piratpartiet' => 151,
255
+ 'Kystpartiet' => 100,
256
+ 'Demokratene i Norge' => 32 },
257
+ 'Sør-Trøndelag' => { 'Arbeiderpartiet' => 64_351,
258
+ 'Høyre' => 38_930,
259
+ 'Fremskrittspartiet' => 23_871,
260
+ 'Kristelig Folkeparti' => 6_562,
261
+ 'Senterpartiet' => 11_351,
262
+ 'Venstre' => 9_460,
263
+ 'Sosialistisk Venstreparti' => 9_992,
264
+ 'Miljøpartiet de Grønne' => 5_540,
265
+ 'Rødt' => 1_667,
266
+ 'De Kristne' => 522,
267
+ 'Pensjonistpartiet' => 1_590,
268
+ 'Piratpartiet' => 857,
269
+ 'Kystpartiet' => 139,
270
+ 'Demokratene i Norge' => 210,
271
+ 'Kristent Samlingsparti' => 129,
272
+ 'Det Liberale Folkepartiet' => 98,
273
+ 'Norges Kommunistiske Parti' => 97 },
274
+ 'Telemark' => { 'Arbeiderpartiet' => 35_963,
275
+ 'Høyre' => 21_300,
276
+ 'Fremskrittspartiet' => 18_564,
277
+ 'Kristelig Folkeparti' => 6_610,
278
+ 'Senterpartiet' => 4_360,
279
+ 'Venstre' => 3_393,
280
+ 'Sosialistisk Venstreparti' => 3_192,
281
+ 'Miljøpartiet de Grønne' => 2_116,
282
+ 'Rødt' => 884,
283
+ 'De Kristne' => 1_017,
284
+ 'Piratpartiet' => 239,
285
+ 'Kystpartiet' => 68,
286
+ 'Demokratene i Norge' => 56,
287
+ 'Kristent Samlingsparti' => 116 },
288
+ 'Troms' => { 'Arbeiderpartiet' => 27_436,
289
+ 'Høyre' => 19_663,
290
+ 'Fremskrittspartiet' => 17_315,
291
+ 'Kristelig Folkeparti' => 3_659,
292
+ 'Senterpartiet' => 5_636,
293
+ 'Venstre' => 3_687,
294
+ 'Sosialistisk Venstreparti' => 5_688,
295
+ 'Miljøpartiet de Grønne' => 2_190,
296
+ 'Rødt' => 1_608,
297
+ 'De Kristne' => 322,
298
+ 'Piratpartiet' => 382,
299
+ 'Kystpartiet' => 477,
300
+ 'Demokratene i Norge' => 37,
301
+ 'Kristent Samlingsparti' => 92,
302
+ 'Norges Kommunistiske Parti' => 78 },
303
+ 'Vest-Agder' => { 'Arbeiderpartiet' => 23_227,
304
+ 'Høyre' => 26_818,
305
+ 'Fremskrittspartiet' => 17_863,
306
+ 'Kristelig Folkeparti' => 13_536,
307
+ 'Senterpartiet' => 2_962,
308
+ 'Venstre' => 4_205,
309
+ 'Sosialistisk Venstreparti' => 2_568,
310
+ 'Miljøpartiet de Grønne' => 2_196,
311
+ 'Rødt' => 460,
312
+ 'De Kristne' => 1_975,
313
+ 'Pensjonistpartiet' => 881,
314
+ 'Piratpartiet' => 284,
315
+ 'Kystpartiet' => 43,
316
+ 'Demokratene i Norge' => 516,
317
+ 'Det Liberale Folkepartiet' => 65,
318
+ 'Norges Kommunistiske Parti' => 41 },
319
+ 'Vestfold' => { 'Arbeiderpartiet' => 40_869,
320
+ 'Høyre' => 41_357,
321
+ 'Fremskrittspartiet' => 26_977,
322
+ 'Kristelig Folkeparti' => 6_735,
323
+ 'Senterpartiet' => 4_084,
324
+ 'Venstre' => 6_228,
325
+ 'Sosialistisk Venstreparti' => 5_266,
326
+ 'Miljøpartiet de Grønne' => 3_407,
327
+ 'Rødt' => 932,
328
+ 'De Kristne' => 691,
329
+ 'Pensjonistpartiet' => 596,
330
+ 'Piratpartiet' => 474,
331
+ 'Kystpartiet' => 157,
332
+ 'Demokratene i Norge' => 65,
333
+ 'Kristent Samlingsparti' => 205 },
334
+ 'Østfold' => { 'Arbeiderpartiet' => 54_910,
335
+ 'Høyre' => 39_703,
336
+ 'Fremskrittspartiet' => 30_801,
337
+ 'Kristelig Folkeparti' => 8_828,
338
+ 'Senterpartiet' => 6_405,
339
+ 'Venstre' => 5_723,
340
+ 'Sosialistisk Venstreparti' => 3_668,
341
+ 'Miljøpartiet de Grønne' => 3_168,
342
+ 'Rødt' => 1_149,
343
+ 'De Kristne' => 1_123,
344
+ 'Pensjonistpartiet' => 956,
345
+ 'Piratpartiet' => 516,
346
+ 'Kystpartiet' => 68,
347
+ 'Demokratene i Norge' => 99,
348
+ 'Kristent Samlingsparti' => 145 } }
349
+
350
+ # Source: Valg i Norge, Valgkretser, Wikipedia, retrieved on 1 May 2015.
351
+ # URL: http://no.wikipedia.org/wiki/Valg_i_Norge#Valgkretser
352
+ DIRECT_SEAT_DISTRIBUTION = { 'Akershus' => 16,
353
+ 'Aust-Agder' => 3,
354
+ 'Buskerud' => 8,
355
+ 'Finnmark' => 4,
356
+ 'Hedmark' => 6,
357
+ 'Hordaland' => 15,
358
+ 'Møre og Romsdal' => 8,
359
+ 'Nord-Trøndelag' => 4,
360
+ 'Nordland' => 8,
361
+ 'Oppland' => 6,
362
+ 'Oslo' => 18,
363
+ 'Rogaland' => 13,
364
+ 'Sogn og Fjordane' => 3,
365
+ 'Sør-Trøndelag' => 9,
366
+ 'Telemark' => 5,
367
+ 'Troms' => 5,
368
+ 'Vest-Agder' => 5,
369
+ 'Vestfold' => 6,
370
+ 'Østfold' => 8 }
371
+
372
+ # Source: Valg i Norge, Valgkretser, Wikipedia, retrieved on 16 April 2015.
373
+ # URL: http://no.wikipedia.org/wiki/Valg_i_Norge#Valgkretser
374
+ NO_OF_LEVELING_SEATS = 19
375
+
376
+ LEVELING_THRESHOLD = 0.04
377
+
378
+ ELECTORAL_SYSTEM = LeveledProportional.new(LAST_ELECTION_RESULT,
379
+ LAST_DETAILED_ELECTION_RESULT,
380
+ DIRECT_SEAT_DISTRIBUTION,
381
+ NO_OF_LEVELING_SEATS,
382
+ LEVELING_THRESHOLD,
383
+ SainteLague14Denominators)
384
+
385
+ def area_code
386
+ 'NO'
387
+ end
388
+
389
+ def population_size
390
+ # Source: NSD European Election Database, Norway, retrieved on 14 April
391
+ # 2015.
392
+ # URL: http://www.nsd.uib.no/european_election_database/country/norway/
393
+ 2_836_029
394
+ end
395
+
396
+ def no_of_seats
397
+ 169
398
+ end
399
+
400
+ def threshold
401
+ 0.04
402
+ end
403
+
404
+ def seats(simulation)
405
+ ELECTORAL_SYSTEM.project(simulation)
406
+ end
407
+ end
408
+ end