-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'origin/main' into test_script
- Loading branch information
Showing
9 changed files
with
206 additions
and
124 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
6 changes: 3 additions & 3 deletions
6
tests/integration_tests/Aspen_HERON_FullTest/gold/Runs_o/sweep.csv
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
source_capacity,sink_capacity,mean_NPV,std_NPV,med_NPV,max_NPV,min_NPV,perc_5_NPV,perc_95_NPV,samp_NPV,var_NPV,mean_TotalActivity__source__production__a,mean_TotalActivity__sink__production__a,std_TotalActivity__source__production__a,max_TotalActivity__source__production__a,min_TotalActivity__source__production__a,perc_5_TotalActivity__source__production__a,perc_95_TotalActivity__source__production__a,samp_TotalActivity__source__production__a,var_TotalActivity__source__production__a,var_TotalActivity__sink__production__a,samp_TotalActivity__sink__production__a,perc_95_TotalActivity__sink__production__a,perc_5_TotalActivity__sink__production__a,min_TotalActivity__sink__production__a,max_TotalActivity__sink__production__a,std_TotalActivity__sink__production__a,med_TotalActivity__source__production__a,med_TotalActivity__sink__production__a,ProbabilityWeight,ProbabilityWeight-source_capacity,prefix,PointProbability | ||
1.0,-2.0,-1027240.07054,1.42579068359e-10,-1027240.07054,-1027240.07054,-1027240.07054,-1027240.07054,-1027240.07054,3.0,2.03287907341e-20,40.0,-40.0,0.0,40.0,40.0,40.0,40.0,3.0,0.0,0.0,3.0,-40.0,-40.0,-40.0,-40.0,0.0,40.0,-40.0,0.5,0.5,1,1.0 | ||
2.0,-2.0,-1450800.44634,0.0,-1450800.44634,-1450800.44634,-1450800.44634,-1450800.44634,-1450800.44634,3.0,0.0,80.0,-80.0,0.0,80.0,80.0,80.0,80.0,3.0,0.0,0.0,3.0,-80.0,-80.0,-80.0,-80.0,0.0,80.0,-80.0,0.5,0.5,2,1.0 | ||
source_capacity,sink_capacity,mean_NPV,std_NPV,med_NPV,max_NPV,min_NPV,perc_5_NPV,perc_95_NPV,samp_NPV,var_NPV,mean_TotalActivity__source__production__a,mean_TotalActivity__sink__production__a,std_TotalActivity__source__production__a,max_TotalActivity__source__production__a,min_TotalActivity__source__production__a,perc_5_TotalActivity__source__production__a,perc_95_TotalActivity__source__production__a,samp_TotalActivity__source__production__a,var_TotalActivity__source__production__a,var_TotalActivity__sink__production__a,samp_TotalActivity__sink__production__a,perc_95_TotalActivity__sink__production__a,perc_5_TotalActivity__sink__production__a,min_TotalActivity__sink__production__a,max_TotalActivity__sink__production__a,std_TotalActivity__sink__production__a,med_TotalActivity__source__production__a,med_TotalActivity__sink__production__a,ProbabilityWeight-source_capacity,ProbabilityWeight,PointProbability,prefix | ||
1.0,-2.0,-1027240.07276,1.19439600045e-10,-1027240.07276,-1027240.07276,-1027240.07276,-1027240.07276,-1027240.07276,20.0,1.4265818059e-20,40.0,-40.0,0.0,40.0,40.0,40.0,40.0,20.0,0.0,0.0,20.0,-40.0,-40.0,-40.0,-40.0,0.0,40.0,-40.0,0.5,0.5,1.0,1 | ||
2.0,-2.0,-1450800.44949,2.38879200091e-10,-1450800.44949,-1450800.44949,-1450800.44949,-1450800.44949,-1450800.44949,20.0,5.70632722361e-20,80.0,-80.0,0.0,80.0,80.0,80.0,80.0,20.0,0.0,0.0,20.0,-80.0,-80.0,-80.0,-80.0,0.0,80.0,-80.0,0.5,0.5,1.0,2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
222 changes: 111 additions & 111 deletions
222
tests/integration_tests/Aspen_HERON_FullTest/heron_input.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,111 +1,111 @@ | ||
<HERON> | ||
<TestInfo> | ||
<name>Cashflows</name> | ||
<author>talbpaul</author> | ||
<created>2020-10-16</created> | ||
<description> | ||
Tests various kinds of cashflows | ||
</description> | ||
<classesTested>HERON</classesTested> | ||
</TestInfo> | ||
|
||
<Case name="Runs"> | ||
<mode>sweep</mode> | ||
<num_arma_samples>3</num_arma_samples> | ||
<time_discretization> | ||
<time_variable>Time</time_variable> | ||
<end_time>2</end_time> | ||
<num_steps>21</num_steps> | ||
</time_discretization> | ||
<economics> | ||
<ProjectTime>20</ProjectTime> | ||
<DiscountRate>0.08</DiscountRate> | ||
<tax>0.25</tax> | ||
<inflation>0.00</inflation> | ||
<verbosity>50</verbosity> | ||
</economics> | ||
<dispatcher> | ||
<pyomo/> | ||
</dispatcher> | ||
</Case> | ||
|
||
<Components> | ||
<Component name="source"> | ||
<produces resource="a" dispatch="fixed"> | ||
<capacity resource="a"> | ||
<sweep_values>1, 2</sweep_values> | ||
</capacity> | ||
</produces> | ||
<economics> | ||
<lifetime>30</lifetime> | ||
<CashFlow name="capex" type="one-time" taxable="False" inflation="none" mult_target="False"> | ||
<driver> | ||
<Function method="capacity">functions</Function> | ||
</driver> | ||
<reference_price> | ||
<fixed_value>10000.0</fixed_value> | ||
<multiplier>-1</multiplier> | ||
</reference_price> | ||
<reference_driver> | ||
<fixed_value>10.0</fixed_value> | ||
</reference_driver> | ||
<scaling_factor_x> | ||
<fixed_value>0.999</fixed_value> | ||
</scaling_factor_x> | ||
<!-- <depreciate>5</depreciate> --> | ||
</CashFlow> | ||
<CashFlow name="FOM" type="repeating" period='year' taxable="False" inflation="none" mult_target="False"> | ||
<driver> | ||
<Function method="capacity">functions</Function> | ||
</driver> | ||
<reference_price> | ||
<fixed_value>100.0</fixed_value> | ||
<multiplier>-1</multiplier> | ||
</reference_price> | ||
<reference_driver> | ||
<fixed_value>10.0</fixed_value> | ||
</reference_driver> | ||
<scaling_factor_x> | ||
<fixed_value>0.999</fixed_value> | ||
</scaling_factor_x> | ||
</CashFlow> | ||
<CashFlow name="VOM" type="repeating" taxable="True" inflation="none" mult_target="False"> | ||
<driver> | ||
<activity>a</activity> | ||
</driver> | ||
<reference_price> | ||
<fixed_value>-1</fixed_value> | ||
</reference_price> | ||
</CashFlow> | ||
</economics> | ||
</Component> | ||
|
||
<Component name="sink"> | ||
<demands resource="a" dispatch="independent"> | ||
<capacity> | ||
<fixed_value>-2</fixed_value> | ||
</capacity> | ||
</demands> | ||
<economics> | ||
<lifetime>30</lifetime> | ||
<CashFlow name="capex" type="one-time" taxable="False" inflation="none" mult_target="False"> | ||
<driver> | ||
<activity>a</activity> | ||
</driver> | ||
<reference_price> | ||
<fixed_value>10.0</fixed_value> | ||
<multiplier>-3.14</multiplier> | ||
</reference_price> | ||
</CashFlow> | ||
</economics> | ||
</Component> | ||
</Components> | ||
|
||
<DataGenerators> | ||
<ARMA name='flex' variable="Signal">arma_30yr.pk</ARMA> | ||
<Function name="functions">functions.py</Function> | ||
</DataGenerators> | ||
</HERON> | ||
|
||
|
||
|
||
<HERON> | ||
<TestInfo> | ||
<name>Cashflows</name> | ||
<author>talbpaul</author> | ||
<created>2020-10-16</created> | ||
<description> | ||
Tests various kinds of cashflows | ||
</description> | ||
<classesTested>HERON</classesTested> | ||
</TestInfo> | ||
|
||
<Case name="Runs"> | ||
<mode>sweep</mode> | ||
<num_arma_samples>20</num_arma_samples> | ||
<time_discretization> | ||
<time_variable>Time</time_variable> | ||
<end_time>2</end_time> | ||
<num_steps>21</num_steps> | ||
</time_discretization> | ||
<economics> | ||
<ProjectTime>20</ProjectTime> | ||
<DiscountRate>0.08</DiscountRate> | ||
<tax>0.25</tax> | ||
<inflation>0.00</inflation> | ||
<verbosity>50</verbosity> | ||
</economics> | ||
<dispatcher> | ||
<pyomo/> | ||
</dispatcher> | ||
</Case> | ||
|
||
<Components> | ||
<Component name="source"> | ||
<produces resource="a" dispatch="fixed"> | ||
<capacity resource="a"> | ||
<sweep_values>1, 2</sweep_values> | ||
</capacity> | ||
</produces> | ||
<economics> | ||
<lifetime>30</lifetime> | ||
<CashFlow name="capex" type="one-time" taxable="False" inflation="none" mult_target="False"> | ||
<driver> | ||
<Function method="capacity">functions</Function> | ||
</driver> | ||
<reference_price> | ||
<fixed_value>10000.0</fixed_value> | ||
<multiplier>-1</multiplier> | ||
</reference_price> | ||
<reference_driver> | ||
<fixed_value>10.0</fixed_value> | ||
</reference_driver> | ||
<scaling_factor_x> | ||
<fixed_value>0.999</fixed_value> | ||
</scaling_factor_x> | ||
<!-- <depreciate>5</depreciate> --> | ||
</CashFlow> | ||
<CashFlow name="FOM" type="repeating" period='year' taxable="False" inflation="none" mult_target="False"> | ||
<driver> | ||
<Function method="capacity">functions</Function> | ||
</driver> | ||
<reference_price> | ||
<fixed_value>100.0</fixed_value> | ||
<multiplier>-1</multiplier> | ||
</reference_price> | ||
<reference_driver> | ||
<fixed_value>10.0</fixed_value> | ||
</reference_driver> | ||
<scaling_factor_x> | ||
<fixed_value>0.999</fixed_value> | ||
</scaling_factor_x> | ||
</CashFlow> | ||
<CashFlow name="VOM" type="repeating" taxable="True" inflation="none" mult_target="False"> | ||
<driver> | ||
<activity>a</activity> | ||
</driver> | ||
<reference_price> | ||
<fixed_value>-1</fixed_value> | ||
</reference_price> | ||
</CashFlow> | ||
</economics> | ||
</Component> | ||
|
||
<Component name="sink"> | ||
<demands resource="a" dispatch="independent"> | ||
<capacity> | ||
<fixed_value>-2</fixed_value> | ||
</capacity> | ||
</demands> | ||
<economics> | ||
<lifetime>30</lifetime> | ||
<CashFlow name="capex" type="one-time" taxable="False" inflation="none" mult_target="False"> | ||
<driver> | ||
<activity>a</activity> | ||
</driver> | ||
<reference_price> | ||
<fixed_value>10.0</fixed_value> | ||
<multiplier>-3.14</multiplier> | ||
</reference_price> | ||
</CashFlow> | ||
</economics> | ||
</Component> | ||
</Components> | ||
|
||
<DataGenerators> | ||
<ARMA name='flex' variable="Signal">arma_30yr.pk</ARMA> | ||
<Function name="functions">functions.py</Function> | ||
</DataGenerators> | ||
</HERON> | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
import unittest | ||
from unittest.mock import mock_open, patch, MagicMock | ||
import xml.etree.ElementTree as ET | ||
|
||
from FORCE.src.heron import create_componentsets_in_HERON | ||
|
||
class TestCreateComponentSetsInHERON(unittest.TestCase): | ||
|
||
def setUp(self): | ||
# Example of a minimal XML structure | ||
self.heron_xml = """<HERON> | ||
<Components> | ||
<Component name="ExistingComponent"> | ||
<economics> | ||
<CashFlow name="ExistingComponent_capex"> | ||
<fixed_value>100</fixed_value> | ||
</CashFlow> | ||
</economics> | ||
</Component> | ||
</Components> | ||
</HERON>""" | ||
self.tree = ET.ElementTree(ET.fromstring(self.heron_xml)) | ||
|
||
@patch('xml.etree.ElementTree.parse') | ||
@patch('os.listdir') | ||
@patch('builtins.open', | ||
new_callable=mock_open, | ||
read_data="""{ | ||
"Component Set Name": "NewComponent", | ||
"Reference Driver": 1000, | ||
"Reference Driver Power Units": "kW", | ||
"Reference Price (USD)": 2000, | ||
"Scaling Factor": 0.5 | ||
}""") | ||
def test_new_component_creation(self, mock_file, mock_listdir, mock_parse): | ||
# Setup the mock to return an XML tree | ||
mock_parse.return_value = self.tree | ||
mock_listdir.return_value = ['componentSet1.json'] | ||
|
||
# Call the function | ||
result_tree = create_componentsets_in_HERON("/fake/folder", "/fake/heron_input.xml") | ||
|
||
# Verify the XML was updated correctly | ||
components = result_tree.findall('.//Component[@name="NewComponent"]') | ||
self.assertEqual(len(components), 1) | ||
economics = components[0].find('economics') | ||
self.assertIsNotNone(economics) | ||
|
||
# Verify the CashFlow node was created | ||
cashflows = economics.findall('CashFlow') | ||
self.assertEqual(len(cashflows), 1) | ||
self.assertEqual(cashflows[0].attrib['name'], 'NewComponent_capex') | ||
|
||
# Verify the reference driver and price updates | ||
ref_driver = cashflows[0].find('./reference_driver/fixed_value') | ||
self.assertEqual(ref_driver.text, '1.0') # The driver should have been converted from kW to MW | ||
|
||
# Add more tests here to cover other conditions and edge cases | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |