<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update_optimiser(context, *args, **kwargs) -> None: """ Writes optimiser state into corresponding TensorFlow variables. This may need to be done for optimisers like ScipyOptimiser that work with their own copies of the variables. Normally the source variables would be updated only when the optimiser has finished the minimisation. This function may be called from the callback in order to get the TensorFlow variables up-to-date so that they can be written into TensorBoard for example. The expected state parameters and the procedure of writing them into variables is specific to each optimiser. Currently it is implemented only for ScipyOptimiser. After the state is updated a flag is set to the context to prevent multiple updates in the same callback. :param context: Monitor context :param args: Optimiser's state passed to the callback :param kwargs: Optimiser's state passed to the callback """


    if context.optimiser is None or context.optimiser_updated:
        return

    if isinstance(context.optimiser, ScipyOptimizer) and len(args) > 0:

        optimizer = context.optimiser.optimizer  # get access to ExternalOptimizerInterface
        var_vals = [args[0][packing_slice] for packing_slice in optimizer._packing_slices]
        context.session.run(optimizer._var_updates,
                            feed_dict=dict(zip(optimizer._update_placeholders, var_vals)))
        context.optimiser_updated = True