Skip to content

Commit 4f9b012

Browse files
test both lower and higher contingencies
1 parent 65db78a commit 4f9b012

File tree

1 file changed

+34
-18
lines changed

1 file changed

+34
-18
lines changed

tests/test_geophires_x.py

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,15 +1122,16 @@ def capex(result_cap_costs):
11221122

11231123
default_contingency_percent = 15
11241124

1125-
for higher_contingency in range(20, 35, 5):
1126-
assert higher_contingency > default_contingency_percent # test assumption check
1125+
for contingency_percent in range(5, 35, 5):
1126+
if contingency_percent == default_contingency_percent:
1127+
continue
11271128

11281129
for input_file_path_ in [
11291130
'geophires_x_tests/generic-egs-case.txt',
11301131
'examples/example10_HP.txt',
11311132
'examples/example11_AC.txt',
11321133
]:
1133-
with self.subTest(msg=f'higher_contingency={higher_contingency}, input_file_path={input_file_path_}'):
1134+
with self.subTest(msg=f'contingency={contingency_percent}, input_file_path={input_file_path_}'):
11341135
result_default = _get_result(input_file_path=input_file_path_)
11351136

11361137
self.assertEqual(
@@ -1145,39 +1146,54 @@ def capex(result_cap_costs):
11451146
),
11461147
)
11471148

1148-
result_higher_contingency = _get_result(
1149-
contingency_percentage=higher_contingency, input_file_path=input_file_path_
1149+
result_different_contingency = _get_result(
1150+
contingency_percentage=contingency_percent, input_file_path=input_file_path_
11501151
)
11511152

1152-
self.assertGreater(
1153-
capex(result_higher_contingency),
1154-
capex(result_default),
1155-
)
1153+
if contingency_percent > default_contingency_percent:
1154+
self.assertGreater(
1155+
capex(result_different_contingency),
1156+
capex(result_default),
1157+
)
1158+
else:
1159+
self.assertLess(
1160+
capex(result_different_contingency),
1161+
capex(result_default),
1162+
)
1163+
11561164
self.assertEqual(
11571165
# Contingency is not applied to drilling costs
11581166
result_default['Drilling and completion costs']['value'],
1159-
result_higher_contingency['Drilling and completion costs']['value'],
1167+
result_different_contingency['Drilling and completion costs']['value'],
11601168
)
11611169

1162-
default_contingency_factor = 1.0 - (default_contingency_percent / 100.0)
1163-
higher_contingency_factor = 1 + (higher_contingency / 100.0)
11641170
for cost_category in [
11651171
'Stimulation costs',
11661172
'Surface power plant costs',
11671173
'Field gathering system costs',
11681174
'Total surface equipment costs',
11691175
'Exploration costs',
11701176
]:
1177+
default_contingency_factor = 1.0 + (default_contingency_percent / 100.0)
1178+
different_contingency_factor = 1.0 + (contingency_percent / 100.0)
1179+
11711180
expected = (
11721181
result_default[cost_category]['value']
1173-
* default_contingency_factor
1174-
* higher_contingency_factor
1182+
/ default_contingency_factor
1183+
* different_contingency_factor
1184+
)
1185+
1186+
actual = result_different_contingency[cost_category]['value']
1187+
1188+
# Rounding throws off by a few percent
1189+
max_allowed_delta_percent = max(
1190+
# TODO to audit more thoroughly and avoid usage of these tuned constants
1191+
2.5 if contingency_percent > default_contingency_percent else 5.4,
1192+
(contingency_percent - default_contingency_percent) / 2.0,
11751193
)
11761194

11771195
self.assertAlmostEqualWithinPercentage(
11781196
expected,
1179-
result_higher_contingency[cost_category]['value'],
1180-
percent=min( # Rounding throws off by a few percent
1181-
4.5, (higher_contingency - default_contingency_percent) / 2.0
1182-
),
1197+
actual,
1198+
percent=max_allowed_delta_percent,
11831199
)

0 commit comments

Comments
 (0)