<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def set_input(self, p_name, value):
 """Set a Step's input variable to a certain value. The value comes either from a workflow input or output of a previous step. Args: name (str):
 the name of the Step input value (str):
 the name of the output variable that provides the value for this input. Raises: ValueError: The name provided is not a valid input name for this Step. """

        name = self.python_names.get(p_name)
        if p_name is None or name not in self.get_input_names():
            raise ValueError('Invalid input "{}"'.format(p_name))
        self.step_inputs[name] = value