Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • pmag/topupopt
1 result
Show changes
Commits on Source (2)
......@@ -752,9 +752,12 @@ class Network(nx.MultiDiGraph):
elif self.is_source_sink_node(node_key):
# source/sink node
self.source_sink_nodes.remove(node_key)
else: # self.is_waypoint_node(node_key):
elif self.is_waypoint_node(node_key):
# has to be a waypoint node
self.waypoint_nodes.remove(node_key)
# No need to reset node but this could mean something is up
# else:
# raise ValueError('Unknown node type.')
# *************************************************************************
# *************************************************************************
......@@ -866,13 +869,15 @@ class Network(nx.MultiDiGraph):
# change to an import node: it cannot have incoming arcs
for _edge in _edges:
if _edge[1] == node_key:
# outgoing arc, raise error
# incoming arc, raise error
raise ValueError(
'A node with outgoing arcs cannot be an '
'export node.'
'A node with incoming arcs cannot be an '
'import node.'
)
# else:
# raise ValueError('Unknown option.')
# everything seems to be okay: reset node data
self._reset_node_type(node_key)
else:
# no data: waypoint node, clear node data
self._reset_node_type(node_key)
......
......@@ -20,7 +20,6 @@ from topupheat.common.fluids import FluidDatabase # , Fluid
# *****************************************************************************
# *****************************************************************************
class TestDistrictHeatingNetworkUtils:
# *************************************************************************
# *************************************************************************
......
# imports
# standard
import pytest
import random
from networkx import binomial_tree, MultiDiGraph
......@@ -2321,6 +2322,96 @@ class TestNetwork:
# *************************************************************************
# *************************************************************************
def test_add_nodes(self):
# create network
net = Network()
# add nodes
node_a = 'A'
net.add_node(node_a)
assert net.is_waypoint_node(node_a)
# source
node_b = 'B'
net.add_node(node_b, **{net.KEY_NODE_BASE_FLOW: {(0,0):-1}})
assert net.is_source_sink_node(node_b)
# sink
node_c = 'C'
net.add_node(node_c, **{net.KEY_NODE_BASE_FLOW: {(0,0):1}})
assert net.is_source_sink_node(node_c)
# import node
node_d = 'D'
net.add_node(node_d, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[1, 2], volumes=[1,None])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_IMP})
assert net.is_import_node(node_d)
# export node
node_e = 'E'
net.add_node(node_e, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[2, 3], volumes=[4,None])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_EXP})
assert net.is_export_node(node_e)
# modify nodes
# from waypoint to source/sink
net.modify_node(node_a, **{net.KEY_NODE_BASE_FLOW: {(0,0):-2}})
assert not net.is_waypoint_node(node_a)
assert net.is_source_sink_node(node_a)
# from source/sink to waypoint
net.modify_node(node_a)
assert not net.is_source_sink_node(node_a)
assert net.is_waypoint_node(node_a)
# from waypoint to import node
net.modify_node(node_a, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[5, 3.5], volumes=[2,4])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_IMP})
assert not net.is_waypoint_node(node_a)
assert net.is_import_node(node_a)
# from import node to waypoint
net.modify_node(node_a)
assert not net.is_import_node(node_a)
assert net.is_waypoint_node(node_a)
# from waypoint node to export node
net.modify_node(node_a, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[4, 1], volumes=[3,6])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_EXP})
assert not net.is_waypoint_node(node_a)
assert net.is_export_node(node_a)
# from export node to sink/source
net.modify_node(node_a, **{net.KEY_NODE_BASE_FLOW: {(0,0):-1}})
assert not net.is_export_node(node_a)
assert net.is_source_sink_node(node_a)
# from sink/source node to import node
net.modify_node(node_a, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[5, 3.5], volumes=[2,4])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_IMP})
assert not net.is_source_sink_node(node_a)
assert net.is_import_node(node_a)
# from import node to export node
net.modify_node(node_a, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[4, 1], volumes=[3,6])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_EXP})
assert not net.is_import_node(node_a)
assert net.is_export_node(node_a)
# from export node to waypoint node
net.modify_node(node_a)
assert not net.is_export_node(node_a)
assert net.is_waypoint_node(node_a)
# *********************************************************************
# test modifying nodes with preexisting arcs
# add arcs
# add arc between two waypoint nodes
net.add_preexisting_directed_arc(
node_key_a=node_a,
node_key_b=node_b,
efficiency=None,
static_loss=None,
capacity=3,
capacity_is_instantaneous=False
)
# modify nodes
# try to change the start node to an export node
with pytest.raises(ValueError):
net.modify_node(node_a, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[4, 1], volumes=[3,6])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_EXP})
# try to change the end node to an import node
with pytest.raises(ValueError):
net.modify_node(node_b, **{net.KEY_NODE_PRICES: {(0,0): ResourcePrice(prices=[4, 1], volumes=[3,6])}, net.KEY_NODE_TYPE: net.KEY_NODE_TYPE_IMP})
# *************************************************************************
# *************************************************************************
# *****************************************************************************
# *****************************************************************************