def METHOD_NAME(self, name, value, **kwargs):
    """Set the value and optionally metadata for a variable. The variable is not required to exist prior to calling `set`.
    For details on the accepted metada see the documentation for method `set_meta`.
    Args:
        name (str): name of the variable being changed
        value (any): the value of the variable, it can be of any type
    Raises:
        ValueError: Raised if trying to set a variable with a reserved name.
    """
    if name in self.reserved_names:
        raise ValueError("Name {0} is reserved".format(name))
    if name in self.__vars__:
        var = self._var(name)
        var.set_meta(**kwargs)
    else:
        var = _Variable(**kwargs)
    var.set_value(value)
    self.__vars__[name] = var