code: def show_perf_stats(
      returns,
      factor_returns=None,
      positions=None,
      transactions=None,
      turnover_denom="AGB",
      live_start_date=None,
      bootstrap=False,
      header_rows=None,
  ):
      """
      Prints some performance metrics of the strategy.
  
      - Shows amount of time the strategy has been run in backtest and
        out-of-sample (in live trading).
  
      - Shows Omega ratio, max drawdown, Calmar ratio, annual return,
        stability, Sharpe ratio, annual volatility, alpha, and beta.
  
      Parameters
      ----------
      returns : pd.Series
          Daily returns of the strategy, noncumulative.
           - See full explanation in tears.create_full_tear_sheet.
      factor_returns : pd.Series, optional
          Daily noncumulative returns of the benchmark factor to which betas are
          computed. Usually a benchmark such as market returns.
           - This is in the same style as returns.
      positions : pd.DataFrame, optional
          Daily net position values.
           - See full explanation in create_full_tear_sheet.
      transactions : pd.DataFrame, optional
          Prices and amounts of executed trades. One row per trade.
          - See full explanation in tears.create_full_tear_sheet
      turnover_denom : str, optional
          Either AGB or portfolio_value, default AGB.
          - See full explanation in txn.get_turnover.
      live_start_date : datetime, optional
          The point in time when the strategy began live trading, after
          its backtest period.
      bootstrap : boolean, optional
          Whether to perform bootstrap analysis for the performance
          metrics.
           - For more information, see timeseries.perf_stats_bootstrap
      header_rows : dict or OrderedDict, optional
          Extra rows to display at the top of the displayed table.
      """
  
      if bootstrap:
          perf_func = timeseries.perf_stats_bootstrap
      else:
          perf_func = timeseries.perf_stats
  
      perf_stats_all = perf_func(
          returns,
          factor_returns=factor_returns,
          positions=positions,
          transactions=transactions,
          turnover_denom=turnover_denom,
      )
  
      date_rows = OrderedDict()
      if len(returns.index) > 0:
          date_rows["Start date"] = returns.index[0].strftime(
              "%Y-%m-%d"
          )
          date_rows["End date"] = returns.index[-1].strftime("%Y-%m-%d")
  
      if live_start_date is not None:
          live_start_date = ep.utils.get_utc_timestamp(live_start_date)
          returns_is = returns[returns.index < live_start_date]
          returns_oos = returns[returns.index >= live_start_date]
  
          positions_is = None
          positions_oos = None
          transactions_is = None
          transactions_oos = None
  
          if positions is not None:
              positions_is = positions[
                  positions.index < live_start_date
              ]
              positions_oos = positions[
                  positions.index >= live_start_date
              ]
              if transactions is not None:
                  transactions_is = transactions[
                      (transactions.index < live_start_date)
                  ]
                  transactions_oos = transactions[
                      (transactions.index > live_start_date)
                  ]
  
          perf_stats_is = perf_func(
              returns_is,
              factor_returns=factor_returns,
              positions=positions_is,
              transactions=transactions_is,
              turnover_denom=turnover_denom,
          )
  
          perf_stats_oos = perf_func(
              returns_oos,
              factor_returns=factor_returns,
              positions=positions_oos,
              transactions=transactions_oos,
              turnover_denom=turnover_denom,
          )
          if len(returns.index) > 0:
              date_rows["In-sample months"] = int(
                  len(returns_is) / APPROX_BDAYS_PER_MONTH
              )
              date_rows["Out-of-sample months"] = int(
                  len(returns_oos) / APPROX_BDAYS_PER_MONTH
              )
  
          perf_stats = pd.concat(
              OrderedDict(
                  [
                      ("In-sample", perf_stats_is),
                      ("Out-of-sample", perf_stats_oos),
                      ("All", perf_stats_all),
                  ]
              ),
              axis=1,
          )
      else:
          if len(returns.index) > 0:
              date_rows["Total months"] = int(
                  len(returns) / APPROX_BDAYS_PER_MONTH
              )
          perf_stats = pd.DataFrame(
              perf_stats_all, columns=["Backtest"]
          )
  
      for column in perf_stats.columns:
          for stat, value in perf_stats[column].iteritems():
              if stat in STAT_FUNCS_PCT:
                  perf_stats.loc[stat, column] = (
                      str(np.round(value * 100, 3)) + "%"
                  )
      if header_rows is None:
          header_rows = date_rows
      else:
          header_rows = OrderedDict(header_rows)
          header_rows.update(date_rows)
  
      utils.print_table(
          perf_stats,
          float_format="{0:.2f}".format,
          header_rows=header_rows,
      )
  
imports: from __future__ import division
  import datetime
  from collections import OrderedDict
  from functools import wraps
  import empyrical
  import matplotlib
  import matplotlib.patches
  import matplotlib.pyplot
  import numpy
  import pandas
  import pytz
  import scipy
  from matplotlib import figure
  from matplotlib.backends.backend_agg import FigureCanvasAgg
  from matplotlib.ticker import FuncFormatter
  from .None import _seaborn
  from .None import capacity
  from .None import pos
  from .None import timeseries
  from .None import txn
  from .None import utils
  from .utils import APPROX_BDAYS_PER_MONTH, MM_DISPLAY_UNIT
label_desc: Use image node_id 12 for calling a global function with example usage: show_perf_stats(returns, factor_returns, positions, transactions, turnover_denom, live_start_date, bootstrap, header_rows) without return types