Newer
Older
Pedro L. Magalhães
committed
# imports
# standard
import random
from networkx import binomial_tree, MultiDiGraph
# local
from src.topupopt.problems.esipp.network import Arcs, Network
from src.topupopt.problems.esipp.network import ArcsWithoutLosses
from src.topupopt.problems.esipp.network import ArcsWithoutProportionalLosses
from src.topupopt.problems.esipp.network import ArcsWithoutStaticLosses
from src.topupopt.problems.esipp.resource import ResourcePrice
from src.topupopt.data.misc.utils import generate_pseudo_unique_key
Pedro L. Magalhães
committed
# *****************************************************************************
# *****************************************************************************
class TestNetwork:
Pedro L. Magalhães
committed
# *************************************************************************
# *************************************************************************
Pedro L. Magalhães
committed
def test_arc_technologies_static_losses(self):
Pedro L. Magalhães
committed
number_time_intervals = 3
number_scenarios = 2
number_options = 4
Pedro L. Magalhães
committed
efficiency_dict = {
Pedro L. Magalhães
committed
for q in range(number_scenarios)
for k in range(number_time_intervals)
Pedro L. Magalhães
committed
static_loss_dict = {
Pedro L. Magalhães
committed
for h in range(number_options)
for q in range(number_scenarios)
for k in range(number_time_intervals)
Pedro L. Magalhães
committed
for capacity_is_instantaneous in (True, False):
arc_tech = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
static_loss=static_loss_dict,
Pedro L. Magalhães
committed
assert arc_tech.has_proportional_losses()
Pedro L. Magalhães
committed
assert arc_tech.has_static_losses()
Pedro L. Magalhães
committed
assert not arc_tech.is_infinite_capacity()
Pedro L. Magalhães
committed
assert not arc_tech.has_been_selected()
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=True)
Pedro L. Magalhães
committed
assert not arc_tech.is_isotropic(reverse_none_means_isotropic=False)
Pedro L. Magalhães
committed
# isotropic
Pedro L. Magalhães
committed
arc_tech = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
static_loss=static_loss_dict,
Pedro L. Magalhães
committed
assert not arc_tech.has_proportional_losses()
Pedro L. Magalhães
committed
assert arc_tech.has_static_losses()
Pedro L. Magalhães
committed
assert not arc_tech.is_infinite_capacity()
Pedro L. Magalhães
committed
assert not arc_tech.has_been_selected()
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=True)
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=False)
Pedro L. Magalhães
committed
# create arc technology with only one option
Pedro L. Magalhães
committed
arc_tech = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse=None,
capacity=(1,),
minimum_cost=(1,),
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
static_loss={
Pedro L. Magalhães
committed
for q in range(number_scenarios)
for k in range(number_time_intervals)
Pedro L. Magalhães
committed
assert arc_tech.has_proportional_losses()
Pedro L. Magalhães
committed
assert arc_tech.has_static_losses()
Pedro L. Magalhães
committed
assert not arc_tech.is_infinite_capacity()
Pedro L. Magalhães
committed
assert not arc_tech.has_been_selected()
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=True)
Pedro L. Magalhães
committed
assert not arc_tech.is_isotropic(reverse_none_means_isotropic=False)
Pedro L. Magalhães
committed
# create arc technology for one time interval
Pedro L. Magalhães
committed
arc_tech = Arcs(
Pedro L. Magalhães
committed
efficiency={
(q, 0): 0.5
for q in range(number_scenarios)
Pedro L. Magalhães
committed
efficiency_reverse=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
static_loss={
Pedro L. Magalhães
committed
for h in range(number_options)
for q in range(number_scenarios)
# for k in range(number_time_intervals)
},
validate=True,
)
Pedro L. Magalhães
committed
assert arc_tech.has_proportional_losses()
Pedro L. Magalhães
committed
assert arc_tech.has_static_losses()
Pedro L. Magalhães
committed
assert not arc_tech.is_infinite_capacity()
Pedro L. Magalhães
committed
assert not arc_tech.has_been_selected()
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=True)
Pedro L. Magalhães
committed
assert not arc_tech.is_isotropic(reverse_none_means_isotropic=False)
Pedro L. Magalhães
committed
# *********************************************************************
Pedro L. Magalhães
committed
# TypeError: The static losses should be given as a dict or None.
Pedro L. Magalhães
committed
error_triggered = False
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
static_loss=tuple(
[k for k in range(number_time_intervals)]
for o in range(number_options)
),
validate=True,
)
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
# ValueError('The static losses should be specified for each arc
Pedro L. Magalhães
committed
# option.')
Pedro L. Magalhães
committed
error_triggered = False
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
static_loss={
Pedro L. Magalhães
committed
for h in range(number_options)
for q in range(number_scenarios)
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# TypeError('The static losses must be specified via a list of lists.')
Pedro L. Magalhães
committed
error_triggered = False
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
static_loss=[
tuple(k for k in range(number_time_intervals))
for o in range(number_options)
],
validate=True,
)
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# ValueError('The static loss values are inconsistent with the number '
# 'of options, scenarios and intervals.')
Pedro L. Magalhães
committed
error_triggered = False
try:
arc_tech = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
static_loss={
Pedro L. Magalhães
committed
for h in range(number_options)
for q in range(number_scenarios)
for k in range(number_time_intervals - 1)
},
validate=True,
)
arc_tech.validate_sizes(
number_options=number_options,
number_scenarios=number_scenarios,
number_intervals=[
number_time_intervals for _ in range(number_scenarios)
],
)
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# TypeError('The static losses were not provided as numbers.')
Pedro L. Magalhães
committed
error_triggered = False
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
static_loss={
Pedro L. Magalhães
committed
for h in range(number_options)
for q in range(number_scenarios)
for k in range(number_time_intervals)
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# ValueError('The static losses must be positive or zero.')
Pedro L. Magalhães
committed
error_triggered = False
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
static_loss={
Pedro L. Magalhães
committed
for h in range(number_options)
for q in range(number_scenarios)
for k in range(number_time_intervals)
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# TypeError: The static loss dict keys must be tuples
Pedro L. Magalhães
committed
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency=None,
efficiency_reverse=None,
static_loss={k: 1 for k in range(number_time_intervals)},
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
# ValueError( 'The static loss dict keys must be tuples of size 3.')
error_triggered = False
Pedro L. Magalhães
committed
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency=None,
efficiency_reverse=None,
static_loss={(k, 3): 1 for k in range(number_time_intervals)},
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# TypeError(The staticl osses should be given as a dict or None.')
Pedro L. Magalhães
committed
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse=None,
static_loss=[1 for k in range(number_time_intervals)],
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# ValueError(
# 'No static loss values were provided. There should be one'+
# ' value per option, scenario and time interval.')
Pedro L. Magalhães
committed
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency=None,
efficiency_reverse=None,
static_loss={},
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# *************************************************************************
# *************************************************************************
def test_arc_technologies(self):
# *********************************************************************
Pedro L. Magalhães
committed
# create arc technology using instantaneous capacities
Pedro L. Magalhães
committed
number_scenarios = 2
number_options = 4
number_time_intervals = 3
Pedro L. Magalhães
committed
efficiency_dict = {
Pedro L. Magalhães
committed
for q in range(number_scenarios)
for k in range(number_time_intervals)
Pedro L. Magalhães
committed
for capacity_is_instantaneous in (True, False):
arc_tech = Arcs(
name="any",
efficiency=efficiency_dict,
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
assert arc_tech.has_proportional_losses()
Pedro L. Magalhães
committed
assert not arc_tech.has_static_losses()
Pedro L. Magalhães
committed
assert not arc_tech.is_infinite_capacity()
Pedro L. Magalhães
committed
assert not arc_tech.has_been_selected()
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=True)
Pedro L. Magalhães
committed
assert not arc_tech.is_isotropic(reverse_none_means_isotropic=False)
Pedro L. Magalhães
committed
assert arc_tech.has_constant_efficiency()
Pedro L. Magalhães
committed
# create arc technology with only one option
Pedro L. Magalhães
committed
arc_tech = Arcs(
name="any",
efficiency=efficiency_dict,
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=(1,),
minimum_cost=(1,),
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
assert arc_tech.has_proportional_losses()
Pedro L. Magalhães
committed
assert not arc_tech.has_static_losses()
Pedro L. Magalhães
committed
assert not arc_tech.is_infinite_capacity()
Pedro L. Magalhães
committed
assert not arc_tech.has_been_selected()
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=True)
Pedro L. Magalhães
committed
assert not arc_tech.is_isotropic(reverse_none_means_isotropic=False)
Pedro L. Magalhães
committed
assert arc_tech.has_constant_efficiency()
Pedro L. Magalhães
committed
# create arc technology for one time interval
Pedro L. Magalhães
committed
arc_tech = Arcs(
name="any",
efficiency={(0, 0): 0.95},
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
assert arc_tech.has_proportional_losses()
Pedro L. Magalhães
committed
assert not arc_tech.has_static_losses()
Pedro L. Magalhães
committed
assert not arc_tech.is_infinite_capacity()
Pedro L. Magalhães
committed
assert not arc_tech.has_been_selected()
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=True)
Pedro L. Magalhães
committed
assert not arc_tech.is_isotropic(reverse_none_means_isotropic=False)
Pedro L. Magalhães
committed
assert arc_tech.has_constant_efficiency()
Pedro L. Magalhães
committed
# create arc technology for one time interval and isotropic
Pedro L. Magalhães
committed
arc_tech = Arcs(
name="any",
efficiency={(0, 0): 0.95},
efficiency_reverse={(0, 0): 0.95},
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
assert arc_tech.has_proportional_losses()
Pedro L. Magalhães
committed
assert not arc_tech.has_static_losses()
Pedro L. Magalhães
committed
assert not arc_tech.is_infinite_capacity()
Pedro L. Magalhães
committed
assert not arc_tech.has_been_selected()
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=True)
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=False)
Pedro L. Magalhães
committed
assert arc_tech.has_constant_efficiency()
Pedro L. Magalhães
committed
# create arc technology for one time interval and anisotropic
Pedro L. Magalhães
committed
arc_tech = Arcs(
name="any",
efficiency={(0, 0): 0.95},
efficiency_reverse={(0, 0): 1},
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
assert arc_tech.has_proportional_losses()
Pedro L. Magalhães
committed
assert not arc_tech.has_static_losses()
Pedro L. Magalhães
committed
assert not arc_tech.is_infinite_capacity()
Pedro L. Magalhães
committed
assert not arc_tech.has_been_selected()
Pedro L. Magalhães
committed
assert not arc_tech.is_isotropic(reverse_none_means_isotropic=True)
Pedro L. Magalhães
committed
assert not arc_tech.is_isotropic(reverse_none_means_isotropic=False)
Pedro L. Magalhães
committed
assert not arc_tech.has_constant_efficiency()
Pedro L. Magalhães
committed
# create arc technology for one time interval and anisotropic
Pedro L. Magalhães
committed
arc_tech = Arcs(
name="any",
efficiency={(0, 0): 1},
efficiency_reverse={(0, 0): 0.95},
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
assert arc_tech.has_proportional_losses()
Pedro L. Magalhães
committed
assert not arc_tech.has_static_losses()
Pedro L. Magalhães
committed
assert not arc_tech.is_infinite_capacity()
Pedro L. Magalhães
committed
assert not arc_tech.has_been_selected()
Pedro L. Magalhães
committed
assert not arc_tech.is_isotropic(reverse_none_means_isotropic=True)
Pedro L. Magalhães
committed
assert not arc_tech.is_isotropic(reverse_none_means_isotropic=False)
Pedro L. Magalhães
committed
assert not arc_tech.has_constant_efficiency()
Pedro L. Magalhães
committed
# create arc technology for one time interval and anisotropic
Pedro L. Magalhães
committed
arc_tech = Arcs(
name="any",
efficiency={(0, 0): 0.95},
efficiency_reverse={(0, 0): 0.95},
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
assert arc_tech.has_proportional_losses()
Pedro L. Magalhães
committed
assert not arc_tech.has_static_losses()
Pedro L. Magalhães
committed
assert not arc_tech.is_infinite_capacity()
Pedro L. Magalhães
committed
assert not arc_tech.has_been_selected()
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=True)
Pedro L. Magalhães
committed
assert arc_tech.is_isotropic(reverse_none_means_isotropic=False)
Pedro L. Magalhães
committed
assert arc_tech.has_constant_efficiency()
Pedro L. Magalhães
committed
# *****************************************************************
# *****************************************************************
Pedro L. Magalhães
committed
# trigger errors
Pedro L. Magalhães
committed
# TypeError('The name attribute is not hashable.')
Pedro L. Magalhães
committed
try:
_ = Arcs(
name=[1, 2, 3],
efficiency=efficiency_dict,
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
# TypeError:The efficiency dict keys must be (scenario, interval) tuples
error_triggered = False
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency={k: 1 for k in range(number_time_intervals)},
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
# ValueError( 'The efficiency dict keys must be tuples of size 2.')
error_triggered = False
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency={(k, 3, 4): 1 for k in range(number_time_intervals)},
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# TypeError(The efficiency should be given as a dict or None.')
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency=[1 for k in range(number_time_intervals)],
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# TypeError('The reverse efficiency has to match the nominal'+
# ' one when there are no proportional losses.')
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency=None,
efficiency_reverse={},
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# TypeError:'The reverse efficiency should be given as a dict or None.'
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency=efficiency_dict,
efficiency_reverse=[1 for k in range(number_time_intervals)],
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# ValueError(
# 'No efficiency values were provided. There should be '+
# 'one value per scenario and time interval.')
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency=efficiency_dict,
efficiency_reverse={},
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# ValueError: The keys for the efficiency dicts do not match.
Pedro L. Magalhães
committed
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse={
(key[1], key[0]): value
for key, value in efficiency_dict.items()
},
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# TypeError: Efficiency values must be provided as numeric types.
Pedro L. Magalhães
committed
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse={
(key[0], key[1]): str(value)
for key, value in efficiency_dict.items()
},
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# ValueError('Efficiency values must be positive.')
Pedro L. Magalhães
committed
try:
_ = Arcs(
Pedro L. Magalhães
committed
efficiency_reverse={
(key[0], key[1]): -1 for key, value in efficiency_dict.items()
},
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
# TypeError('The capacity should be given as a list or tuple.')
error_triggered = False
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency=efficiency_dict,
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity={o: 1 + o for o in range(number_options)},
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# TypeError: The minimum cost values should be given as a list or tuple
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency=efficiency_dict,
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost={o: 1 + o for o in range(number_options)},
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# TypeError: The specific capacity cost was not given as a numeric type
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency=efficiency_dict,
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=[1],
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except TypeError:
error_triggered = True
assert error_triggered
Pedro L. Magalhães
committed
# ValueError:The number of capacity and minimum cost entries must match
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency=efficiency_dict,
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options + 1)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
# ValueError: No entries for capacity and minimum cost were provided.
Pedro L. Magalhães
committed
# At least one option should be provided.
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency=efficiency_dict,
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(),
minimum_cost=tuple(),
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
# ValueError: No entries for efficiency were provided. There should be
Pedro L. Magalhães
committed
# one entry per time interval.
Pedro L. Magalhães
committed
try:
_ = Arcs(
name="hey",
efficiency={},
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
# ValueError('The number of efficiency values must match the number of
Pedro L. Magalhães
committed
# time intervals.')
Pedro L. Magalhães
committed
arc_tech = Arcs(
Pedro L. Magalhães
committed
efficiency={
Pedro L. Magalhães
committed
for q in range(number_scenarios)
for k in range(number_time_intervals + 1)
},
efficiency_reverse=None,
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
validate=True,
)
error_triggered = False
Pedro L. Magalhães
committed
try:
arc_tech.validate_sizes(
number_options=number_options,
number_scenarios=number_scenarios,
number_intervals=[
number_time_intervals for _ in range(number_scenarios)
],
)
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered
# ValueError('The number of efficiency values must match the number of
Pedro L. Magalhães
committed
# time intervals.')
Pedro L. Magalhães
committed
try:
arc_tech = Arcs(
Pedro L. Magalhães
committed
efficiency={
Pedro L. Magalhães
committed
for q in range(number_scenarios)
for k in range(number_time_intervals)
Pedro L. Magalhães
committed
efficiency_reverse={
Pedro L. Magalhães
committed
for q in range(number_scenarios)
Pedro L. Magalhães
committed
static_loss=None,
capacity=tuple(1 + o for o in range(number_options)),
minimum_cost=tuple(1 + o for o in range(number_options)),
specific_capacity_cost=1,
Pedro L. Magalhães
committed
capacity_is_instantaneous=capacity_is_instantaneous,
validate=True,
)
arc_tech.validate_sizes(
number_options=number_options,
number_scenarios=number_scenarios,
number_intervals=[
number_time_intervals for _ in range(number_scenarios)
],
)
Pedro L. Magalhães
committed
except ValueError:
error_triggered = True
assert error_triggered