code: def report_graph(
      report_df: pd.DataFrame, show_notebook: bool = True
  ) -> [list, tuple]:
      """display backtest report
  
          Example:
  
  
              .. code-block:: python
  
                  import qlib
                  import pandas as pd
                  from qlib.utils.time import Freq
                  from qlib.utils import flatten_dict
                  from qlib.backtest import backtest, executor
                  from qlib.contrib.evaluate import risk_analysis
                  from qlib.contrib.strategy import TopkDropoutStrategy
  
                  # init qlib
                  qlib.init(provider_uri=<qlib data dir>)
  
                  CSI300_BENCH = "SH000300"
                  FREQ = "day"
                  STRATEGY_CONFIG = {
                      "topk": 50,
                      "n_drop": 5,
                      # pred_score, pd.Series
                      "signal": pred_score,
                  }
  
                  EXECUTOR_CONFIG = {
                      "time_per_step": "day",
                      "generate_portfolio_metrics": True,
                  }
  
                  backtest_config = {
                      "start_time": "2017-01-01",
                      "end_time": "2020-08-01",
                      "account": 100000000,
                      "benchmark": CSI300_BENCH,
                      "exchange_kwargs": {
                          "freq": FREQ,
                          "limit_threshold": 0.095,
                          "deal_price": "close",
                          "open_cost": 0.0005,
                          "close_cost": 0.0015,
                          "min_cost": 5,
                      },
                  }
  
                  # strategy object
                  strategy_obj = TopkDropoutStrategy(**STRATEGY_CONFIG)
                  # executor object
                  executor_obj = executor.SimulatorExecutor(**EXECUTOR_CONFIG)
                  # backtest
                  portfolio_metric_dict, indicator_dict = backtest(executor=executor_obj, strategy=strategy_obj, **backtest_config)
                  analysis_freq = "{0}{1}".format(*Freq.parse(FREQ))
                  # backtest info
                  report_normal_df, positions_normal = portfolio_metric_dict.get(analysis_freq)
  
                  qcr.analysis_position.report_graph(report_normal_df)
  
      :param report_df: **df.index.name** must be **date**, **df.columns** must contain **return**, **turnover**, **cost**, **bench**.
  
  
              .. code-block:: python
  
                              return      cost        bench       turnover
                  date
                  2017-01-04  0.003421    0.000864    0.011693    0.576325
                  2017-01-05  0.000508    0.000447    0.000721    0.227882
                  2017-01-06  -0.003321   0.000212    -0.004322   0.102765
                  2017-01-09  0.006753    0.000212    0.006874    0.105864
                  2017-01-10  -0.000416   0.000440    -0.003350   0.208396
  
  
      :param show_notebook: whether to display graphics in notebook, the default is **True**.
      :return: if show_notebook is True, display in notebook; else return **plotly.graph_objs.Figure** list.
      """
      report_df = report_df.copy()
      fig_list = _report_figure(report_df)
      if show_notebook:
          BaseGraph.show_graph_in_notebook(fig_list)
      else:
          return fig_list
  
imports: import pandas
  from ..graph import SubplotsGraph, BaseGraph
label_desc: Use image node_id 5 for calling a global function with example usage: report_graph(report_df, show_notebook) and returns: fig_list