Beispiel #1
0
def build_constraints(backend_model, model_data, constraint_definitions):
    for constraint_name, constraint_config in constraint_definitions.items():
        subset = create_valid_subset(model_data, constraint_name,
                                     constraint_config)
        if subset is None:
            continue
        setattr(
            backend_model,
            f"{constraint_name}_constraint",
            po.Constraint(
                subset,
                rule=_load_rule_function(f"{constraint_name}_constraint_rule"),
            ),
        )
Beispiel #2
0
def build_variables(backend_model, model_data, variable_definitions):
    for var_name, var_config in variable_definitions.items():
        subset = create_valid_subset(model_data, var_name, var_config)
        if subset is None:
            continue
        if "bounds" in var_config:
            kwargs = {"bounds": get_capacity_bounds(var_config.bounds)}
        else:
            kwargs = {}

        setattr(
            backend_model,
            var_name,
            po.Var(subset, domain=getattr(po, var_config.domain), **kwargs),
        )
Beispiel #3
0
def build_expressions(backend_model, model_data, expression_definitions):
    build_order_dict = {
        expr: config.get("build_order", 0)
        for expr, config in expression_definitions.items()
    }
    build_order = sorted(build_order_dict, key=build_order_dict.get)

    for expr_name in build_order:
        subset = create_valid_subset(model_data, expr_name,
                                     expression_definitions[expr_name])
        if subset is None:
            continue
        expression_function = _load_rule_function(
            f"{expr_name}_expression_rule")
        if expression_function:
            kwargs = dict(rule=expression_function)
        else:
            kwargs = dict(initialize=0.0)
        setattr(backend_model, expr_name, po.Expression(subset, **kwargs))
    def test_create_valid_subset(self, model_name):
        model = getattr(calliope.examples, model_name)()

        for object_type in ["constraints", "expressions"]:

            valid_subsets = {
                name: create_valid_subset(model._model_data, name, config)
                for name, config in subsets_config[object_type].items()
            }

            for name, subset in valid_subsets.items():
                if subset is None:
                    continue
                if "timesteps" in subset.names:
                    subset = subset.droplevel("timesteps").unique()
                # FIXME: simplified comparison since constraint_sets.yaml isn't completely cleaned
                # up to match current representation of set elements
                assert len(
                    constraint_sets[f"{model_name}.{object_type}.{name}"]
                ) == len(subset)