<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def on_batch_end(self, batch_info):
 """ Stream LR to visdom """

        if self.settings.stream_lr:
            iteration_idx = (
                    float(batch_info.epoch_number) +
                    float(batch_info.batch_number) / batch_info.batches_per_epoch
            )
            
            lr = batch_info.optimizer.param_groups[-1]['lr']

            metrics_df = pd.DataFrame([lr], index=[iteration_idx], columns=['lr'])

            visdom_append_metrics(
                self.vis,
                metrics_df,
                first_epoch=(batch_info.epoch_number == 1) and (batch_info.batch_number == 0)
            )