Skip to content

Commit 5c5d8f9

Browse files
pass property tax rate to SAM
1 parent d6966a6 commit 5c5d8f9

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

src/geophires_x/EconomicsSam.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ def _get_single_owner_parameters(model: Model) -> dict[str, Any]:
140140

141141
# TODO interest rate
142142

143+
# 'Property Tax Rate'
144+
ret['property_tax_rate'] = econ.PTR.quantity().to(convertible_unit('%')).magnitude
145+
143146
return ret
144147

145148

tests/geophires_x_tests/test_economics_sam.py

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import os
44
import sys
55
from pathlib import Path
6+
from typing import Any
67

78
from tabulate import tabulate
89

@@ -11,7 +12,10 @@
1112
# ruff: noqa: I001 # Successful module initialization is dependent on this specific import order.
1213
from geophires_x.Model import Model
1314

15+
# noinspection PyProtectedMember
1416
from geophires_x.EconomicsSam import calculate_sam_economics, _sig_figs, _SAM_CASH_FLOW_PROFILE_KEY
17+
18+
# noinspection PyProtectedMember
1519
from geophires_x.EconomicsSamCashFlow import _clean_profile
1620
from geophires_x_client import GeophiresInputParameters
1721
from geophires_x_client import GeophiresXClient
@@ -70,10 +74,10 @@ def test_cash_flow(self):
7074
self.assertEqual(22, len(cash_flow[0]))
7175

7276
def get_row(name: str) -> list[float]:
73-
return next(r for r in cash_flow if r[0] == name)[1:]
77+
return EconomicsSamTestCase._get_cash_flow_row(cash_flow, name)
7478

7579
def get_single_value(name: str) -> list[float]:
76-
return get_row(name)[0]
80+
return EconomicsSamTestCase._get_cash_flow_row(cash_flow, name)[0]
7781

7882
self.assertListEqual(get_row('PPA revenue ($)'), get_row('Total revenue ($)'))
7983

@@ -87,6 +91,29 @@ def get_single_value(name: str) -> list[float]:
8791
m.economics.LCOE.value, get_single_value('LCOE Levelized cost of energy nominal (cents/kWh)'), places=2
8892
)
8993

94+
@staticmethod
95+
def _get_cash_flow_row(cash_flow, name):
96+
return next(r for r in cash_flow if r[0] == name)[1:]
97+
98+
def test_property_tax_rate(self):
99+
pt_rate = 0.01
100+
m: Model = EconomicsSamTestCase._new_model(
101+
self._egs_test_file_path(), additional_params={'Property Tax Rate': pt_rate}
102+
)
103+
m.read_parameters()
104+
m.Calculate()
105+
106+
sam_econ = calculate_sam_economics(m)
107+
cash_flow = sam_econ[_SAM_CASH_FLOW_PROFILE_KEY]
108+
109+
def get_row(name: str):
110+
return EconomicsSamTestCase._get_cash_flow_row(cash_flow, name)
111+
112+
ptv_row = get_row('Property tax net assessed value ($)')
113+
pte_row = get_row('Property tax expense ($)')
114+
self.assertIsNotNone(pte_row) # FIXME WIP
115+
self.assertAlmostEqual(ptv_row[1] * pt_rate, pte_row[1], places=0) # Assumes 100% property tax basis
116+
90117
def test_only_electricity_end_use_supported(self):
91118
with self.assertRaises(RuntimeError):
92119
self._get_result({'End-Use Option': 2})
@@ -119,7 +146,11 @@ def test_sig_figs(self):
119146
self.assertListEqual(_sig_figs((1.14, 2.24), 2), [1.1, 2.2])
120147

121148
@staticmethod
122-
def _new_model(input_file: Path) -> Model:
149+
def _new_model(input_file: Path, additional_params: dict[str, Any] | None = None) -> Model:
150+
if additional_params is not None:
151+
params = GeophiresInputParameters(from_file_path=input_file, params=additional_params)
152+
input_file = params.as_file_path()
153+
123154
stash_cwd = Path.cwd()
124155
stash_sys_argv = sys.argv
125156

0 commit comments

Comments
 (0)