code: def __core_dict(self):
      pos_stats = self.position_tracker.stats()
      period_stats = calc_period_stats(pos_stats, self.ending_cash)
  
      rval = {
          "ending_value": self.ending_value,
          "ending_exposure": self.ending_exposure,
          # this field is renamed to capital_used for backward
          # compatibility.
          "capital_used": self.cash_flow,
          "starting_value": self.starting_value,
          "starting_exposure": self.starting_exposure,
          "starting_cash": self.starting_cash,
          "ending_cash": self.ending_cash,
          "portfolio_value": self.ending_cash + self.ending_value,
          "pnl": self.pnl,
          "returns": self.returns,
          "period_open": self.period_open,
          "period_close": self.period_close,
          "gross_leverage": period_stats.gross_leverage,
          "net_leverage": period_stats.net_leverage,
          "short_exposure": pos_stats.short_exposure,
          "long_exposure": pos_stats.long_exposure,
          "short_value": pos_stats.short_value,
          "long_value": pos_stats.long_value,
          "longs_count": pos_stats.longs_count,
          "shorts_count": pos_stats.shorts_count,
      }
  
      return rval
  
imports: from __future__ import division
  import logbook
  import numpy
  from collections import namedtuple
  from catalyst.assets import Future
  from six import itervalues, iteritems
  import catalyst.protocol
  from catalyst.constants import LOG_LEVEL
label_desc: Use image node_id 21 for calling the PerformancePeriod obj's underlying member method code with example usage: obj.__core_dict() and returns: rval