docs: def run_powerflow_onthefly(components, components_data, grid, export_pypsa_dir=None, debug=False):
      """
      Run powerflow to test grid stability
  
      Two cases are defined to be tested here:
       i) load case
       ii) feed-in case
  
      Parameters
      ----------
      components: dict of pandas.DataFrame
      components_data: dict of pandas.DataFrame
      export_pypsa_dir: str
          Sub-directory in output/debug/grid/ where csv Files of PyPSA network are exported to.
          Export is omitted if argument is empty.
      """
  
      scenario = cfg_ding0.get("powerflow", "test_grid_stability_scenario")
      start_hour = cfg_ding0.get("powerflow", "start_hour")
      end_hour = cfg_ding0.get("powerflow", "end_hour")
  
      # choose temp_id
      temp_id_set = 1
      timesteps = 2
      start_time = datetime(1970, 1, 1, 00, 00, 0)
      resolution = 'H'
  
      # inspect grid data for integrity
      if debug:
          data_integrity(components, components_data)
  
      # define investigated time range
      timerange = DatetimeIndex(freq=resolution,
                                periods=timesteps,
                                start=start_time)
  
      # TODO: Instead of hard coding PF config, values from class PFConfigDing0 can be used here.
  
      # create PyPSA powerflow problem
      network, snapshots = create_powerflow_problem(timerange, components)
  
      # import pq-sets
      for key in ['Load', 'Generator']:
          for attr in ['p_set', 'q_set']:
              # catch MV grid districts without generators
              if not components_data[key].empty:
                  series = transform_timeseries4pypsa(components_data[key][
                                                          attr].to_frame(),
                                                      timerange,
                                                      column=attr)
                  import_series_from_dataframe(network,
                                               series,
                                               key,
                                               attr)
      series = transform_timeseries4pypsa(components_data['Bus']
                                          ['v_mag_pu_set'].to_frame(),
                                          timerange,
                                          column='v_mag_pu_set')
  
      import_series_from_dataframe(network,
                                   series,
                                   'Bus',
                                   'v_mag_pu_set')
  
      # add coordinates to network nodes and make ready for map plotting
      # network = add_coordinates(network)
  
      # start powerflow calculations
      network.pf(snapshots)
  
      # # make a line loading plot
      # # TODO: make this optional
      # plot_line_loading(network, timestep=0,
      #                   filename='Line_loading_load_case.png')
      # plot_line_loading(network, timestep=1,
      #                   filename='Line_loading_feed-in_case.png')
  
      # process results
      bus_data, line_data = process_pf_results(network)
  
      # assign results data to graph
      assign_bus_results(grid, bus_data)
      assign_line_results(grid, line_data)
  
      # export network if directory is specified
      if export_pypsa_dir:
          export_to_dir(network, export_dir=export_pypsa_dir)