xml
XML files can be parsed using python’s xml.etree.ElementTree library.
Basic Energy System
Note
Original xml data can be found in:
tessif/examples/data/tsf/xml/
Reading The Data
Setting spellings.get_from's logging
level to debug for decluttering doctest output:
>>> from tessif.frused import configurations
>>> configurations.spellings_logging_level = 'debug'
Reading in the data:
>>> from tessif import parse
>>> from tessif.frused.paths import example_dir
>>> import os
>>> path = os.path.join(example_dir, 'data', 'tsf', 'xml', 'fpwe.xml')
>>> energy_system_mapping = parse.xml(path)
>>> for key in energy_system_mapping.keys():
... print(key)
bus
sink
storage
source
transformer
timeframe
global_constraints
Transforming the Read-In Data
>>> from tessif.transform.mapping2es.tsf import transform
>>> es = transform(energy_system_mapping)
>>> for node in es.nodes:
... print(node.uid.name)
Pipeline
Power Line
Air Chanel
Gas Station
Solar Panel
Air
Demand
Generator
Battery
Using the from_external Wrapper
>>> from tessif.model.energy_system import AbstractEnergySystem as AES
>>> es = AES.from_external(
... path = path,
... parser = parse.xml)
from_external parsed energy systems get an automated id:
>>> print(es.uid)
es_from_external_source
Show the parsed node names:
>>> for node in es.nodes:
... print(node.uid.name)
Pipeline
Power Line
Air Chanel
Gas Station
Solar Panel
Air
Demand
Generator
Battery
>>> for transformer in es.transformers:
... print(transformer.flow_rates)
{'air': MinMax(min=0, max=inf), 'electricity': MinMax(min=0, max=15), 'fuel': MinMax(min=0, max=50)}
Using the Simulate Wrapper
Original Data – Xml File fpwe.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<energy_system>
<timeframe>
<primary start = "'01/01/2015'"
periods = "3"
freq = "'H'"/>
<secondary start = "'10/03/2019'"
periods = "3"
freq = "'H'"/>
</timeframe>
<global_constraints>
<primary name = "'default'"
emissions = "'+inf'"
material = "'+inf'"/>
<secondary name = "'80% Reduction'"
emissions = "30"
material = "'+inf'"/>
<tertiary name = "'100% Reduction'"
emissions = "0"
material = "'+inf'"/>
<quartiary name = "'100% Reduction - 50% Material'"
emissions = "0"
material = "20"/>
</global_constraints>
<busses>
<fuel_supply_line name="'Pipeline'"
inputs="('Gas Station.fuel',)"
outputs="('Generator.fuel',)"
latitude="42"
longitude="42"
region="'Here'"
sector="'Power'"
carrier="'fuel'"
component="'bus'"
node_type="'fuel_line'"/>
<power_line name="'Power Line'"
inputs="('Generator.electricity', 'Battery.electricity', 'Solar Panel.electricity')"
outputs="('Demand.electricity', 'Battery.electricity')"
latitude="42"
longitude="42"
region="'Here'"
sector="'Power'"
carrier="'Force'"
component="'bus'"
node_type="'hub'"/>
<air_bus name = "'Air Chanel'"
inputs = "('Air.air', )"
outputs = "('Generator.air',)"
latitude="42"
longitude="42"
region="'Here'"
sector="'Power'"
carrier="'Air'"
component="'bus'"
node_type="'hub'"/>
</busses>
<sinks>
<my_sink name="'Demand'"
inputs="('electricity',)"
latitude="42"
longitude="42"
region="'Here'"
sector="'Power'"
carrier="'Electricity'"
component="'Bus'"
node_type="'sink'"
accumulated_amounts="{'electricity': (0, '+inf')}"
flow_rates="{'electricity': (11, 11)}"
flow_costs="{'electricity': 0}"
flow_emissions="{'electricity': 0}"
flow_gradients="{'electricity': (12, 12)}"
gradient_costs="{'electricity': (0, 0)}"
timeseries="None"
expandable="{'electricity': False}"
expansion_costs="{'electricity': 0}"
expansion_limits="{'electricity': (0, '+inf')}"
milp = "{'electricity': False}"
initial_status="True"
status_inertia="(2, 1)"
status_changing_costs="(0, 0)"
number_of_status_changes="('+inf', 8)"
costs_for_being_active="0"/>
</sinks>
<sources>
<gas_station name="'Gas Station'"
outputs="('fuel',)"
latitude="42"
longitude="42"
region="'Here'"
sector="'Power'"
carrier="'Gas'"
component="'Source'"
node_type="'source'"
accumulated_amounts="{'fuel': (0, '+inf')}"
flow_rates="{'fuel': (0, 20)}"
flow_costs="{'fuel': 10}"
flow_emissions="{'fuel': 3}"
flow_gradients="{'fuel': (100, 100)}"
gradient_costs="{'fuel': (0, 0)}"
timeseries="None"
expandable="{'fuel': False}"
expansion_costs="{'fuel': 5}"
expansion_limits="{'fuel': (0, '+inf')}"
milp="{'fuel': False}"
initial_status="True"
status_inertia="(1, 1)"
status_changing_costs="(0, 0)"
number_of_status_changes="('+inf', 10)"
costs_for_being_active="0.5"/>
<solar_panel name="'Solar Panel'"
outputs="('electricity',)"
latitude="42"
longitude="42"
region="'Here'"
sector="'Power'"
carrier="'Electricity'"
component="'Source'"
node_type="'Renewable'"
accumulated_amounts="{'electricity': (0, '+inf')}"
flow_rates="{'electricity': (20, 20)}"
flow_costs="{'electricity': 0}"
flow_emissions="{'electricity': 0}"
flow_gradients="{'electricity': (42, 42)}"
gradient_costs="{'electricity': (0, 0)}"
timeseries="{'electricity': ([12, 3, 7], [12, 3,7])}"
expandable="{'electricity': False}"
expansion_costs="{'electricity': 5}"
expansion_limits="{'electricity': (0, '+inf')}"
milp="{'electricity': False}"
initial_status="True"
status_inertia="(1, 1)"
status_changing_costs="(0, 0)"
number_of_status_changes="('+inf', 10)"
costs_for_being_active="0"/>
<air name = "'Air'"
outputs = "('air',)"
latitude="42"
longitude="42"
region="'Here'"
sector="'Power'"
carrier="'Electricity'"
component="'Source'"
node_type="'Commodity'"/>
</sources>
<transformers>
<my_transformer name = "'Generator'"
inputs = "('fuel', 'air')"
outputs = "('electricity',)"
conversions = "{
('fuel', 'electricity'): 0.42,
('air', 'electricity'): 0.8,}"
latitude = "42"
longitude = "42"
region = "'Here'"
sector = "'Power'"
carrier = "'electricity'"
component = "'transformer'"
node_type = "'renewable'"
flow_rates = "{
'air': (0, '+inf'),
'fuel': (0, 50),
'electricity': (0, 15)}"
flow_costs = "{'fuel': 0, 'electricity': 10, 'air': 0}"
flow_emissions = "{'fuel': 0,
'electricity': 10, 'air': 0}"
flow_gradients = "{
'fuel': (50, 50),
'electricity': (15, 15),
'air': ('+inf', '+inf'),}"
gradient_costs = "{
'air': (0, 0),
'fuel': (0, 0),
'electricity': (0, 0),}"
timeseries = "None"
expandable = "{'fuel': False, 'electricity': False,
'air': False}"
expansion_costs = "{'fuel': 0, 'electricity': 0,
'air': 0}"
expansion_limits = "{
'fuel': (0, '+inf'),
'electricity': (0, '+inf'),
'air': (0, '+inf')}"
milp = "{'electricity': False, 'fuel': False, 'air': False}"
initial_status = "True"
status_inertia = "(0, 2)"
status_changing_costs = "(0, 0)"
number_of_status_changes = "('+inf', 9)"
costs_for_being_active = "0"/>
</transformers>
<storages>
<my_storage name = "'Battery'"
input = "'electricity'"
output = "'electricity'"
capacity = "10"
initial_soc = "10"
latitude = "42"
longitude = "42"
region = "'Here'"
sector = "'Power'"
carrier = "'electricity'"
component= "'storage'"
node_type = "'storage'"
idle_changes = "(0, 1)"
flow_rates = "{'electricity': (0, 30)}"
flow_efficiencies = "{'electricity': (1, 1)}"
flow_costs = "{'electricity': 0}"
flow_emissions = "{'electricity': 0}"
flow_gradients = "{'electricity': ('+inf', '+inf')}"
gradient_costs = "{'electricity': (0, 0)}"
timeseries = "None"
expandable = "{'capacity': False, 'electricity': False}"
expansion_costs = "{'capacity': 2, 'electricity': 0}"
expansion_limits = "{
'capacity': (0, '+inf'),
'electricity': (0, '+inf')}"
milp = "{'electricity': False}"
initial_status = "True"
status_inertia = "(0, 2)"
status_changing_costs = "(0, 0)"
number_of_status_changes = "('+inf', 42)"
costs_for_being_active = "0"/>
</storages>
</energy_system>