code: def test_blotter_eod_cancellation(self):
      blotter = Blotter("minute", cancel_policy=EODCancel())
  
      # Make two orders for the same asset, so we can test that we are not
      # mutating the orders list as we are cancelling orders
      blotter.order(self.asset_24, 100, MarketOrder())
      blotter.order(self.asset_24, -100, MarketOrder())
  
      self.assertEqual(len(blotter.new_orders), 2)
      order_ids = [
          order.id for order in blotter.open_orders[self.asset_24]
      ]
  
      self.assertEqual(blotter.new_orders[0].status, ORDER_STATUS.OPEN)
      self.assertEqual(blotter.new_orders[1].status, ORDER_STATUS.OPEN)
  
      blotter.execute_cancel_policy(BAR)
      self.assertEqual(blotter.new_orders[0].status, ORDER_STATUS.OPEN)
      self.assertEqual(blotter.new_orders[1].status, ORDER_STATUS.OPEN)
  
      blotter.execute_cancel_policy(SESSION_END)
      for order_id in order_ids:
          order = blotter.orders[order_id]
          self.assertEqual(order.status, ORDER_STATUS.CANCELLED)
  
imports: from nose_parameterized import parameterized
  import pandas
  from catalyst.assets import Equity
  from catalyst.finance.blotter import Blotter
  from catalyst.finance.cancel_policy import EODCancel, NeverCancel
  from catalyst.finance.commission import PerTrade
  from catalyst.finance.execution import LimitOrder, MarketOrder, StopLimitOrder, StopOrder
  from catalyst.finance.order import ORDER_STATUS, Order
  from catalyst.finance.slippage import DEFAULT_EQUITY_VOLUME_SLIPPAGE_BAR_LIMIT, FixedSlippage
  from catalyst.gens.sim_engine import BAR, SESSION_END
  from catalyst.testing.fixtures import WithCreateBarData, WithDataPortal, WithLogger, WithSimParams, CatalystTestCase
  from catalyst.utils.classproperty import classproperty
label_desc: Use image node_id 7 for calling the BlotterTestCase obj's underlying member method code with example usage: obj.test_blotter_eod_cancellation() without return types