Source code for pyomo.contrib.mpc.interfaces.copy_values

#  ___________________________________________________________________________
#
#  Pyomo: Python Optimization Modeling Objects
#  Copyright (c) 2008-2025
#  National Technology and Engineering Solutions of Sandia, LLC
#  Under the terms of Contract DE-NA0003525 with National Technology and
#  Engineering Solutions of Sandia, LLC, the U.S. Government retains certain
#  rights in this software.
#  This software is distributed under the 3-clause BSD License.
#  ___________________________________________________________________________

from pyomo.core.expr.numvalue import value as pyo_value


iterable_scalars = (str, bytes)


def _to_iterable(item):
    if hasattr(item, "__iter__"):
        if isinstance(item, iterable_scalars):
            yield item
        else:
            for obj in item:
                yield obj
    else:
        yield item


[docs] def copy_values_at_time( source_vars, target_vars, source_time_points, target_time_points ): # Process input arguments to wrap scalars in a list source_time_points = list(_to_iterable(source_time_points)) target_time_points = list(_to_iterable(target_time_points)) if ( len(source_time_points) != len(target_time_points) and len(source_time_points) != 1 ): raise ValueError( "copy_values_at_time can only copy values when lists of time\n" "points have the same length or the source list has length one." ) n_points = len(target_time_points) if len(source_time_points) == 1: source_time_points = source_time_points * n_points for s_var, t_var in zip(source_vars, target_vars): for s_t, t_t in zip(source_time_points, target_time_points): # Using the value function allows expressions to substitute # for variables. However, it raises an error if the expression # cannot be evaluated (e.g. has value None). # t_var[t_t].set_value(pyo_value(s_var[s_t])) t_var[t_t].set_value(s_var[s_t].value)