sapor 0.1b1

Sign up to get free protection for your applications and to get access to all the features.
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