class_docstr: Abstract base class for slippage models.
  
  Slippage models are responsible for the rates and prices at which orders
  fill during a simulation.
  
  To implement a new slippage model, create a subclass of
  :class:`~zipline.finance.slippage.SlippageModel` and implement
  :meth:`process_order`.
  
  Methods
  -------
  process_order(data, order)
  
  Attributes
  ----------
  volume_for_bar : int
      Number of shares that have already been filled for the
      currently-filling asset in the current minute. This attribute is
      maintained automatically by the base class. It can be used by
      subclasses to keep track of the total amount filled if there are
      multiple open orders for a single asset.
  
  Notes
  -----
  Subclasses that define their own constructors should call
  ``super(<subclass name>, self).__init__()`` before performing other
  initialization.
docstr: Compute the number of shares and price to fill for ``order`` in the
  current minute.
  
  Parameters
  ----------
  data : zipline.protocol.BarData
      The data for the given bar.
  order : zipline.finance.order.Order
      The order to simulate.
  
  Returns
  -------
  execution_price : float
      The price of the fill.
  execution_volume : int
      The number of shares that should be filled. Must be between ``0``
      and ``order.amount - order.filled``. If the amount filled is less
      than the amount remaining, ``order`` will remain open and will be
      passed again to this method in the next minute.
  
  Raises
  ------
  zipline.finance.slippage.LiquidityExceeded
      May be raised if no more orders should be processed for the current
      asset during the current bar.
  
  Notes
  -----
  Before this method is called, :attr:`volume_for_bar` will be set to the
  number of shares that have already been filled for ``order.asset`` in
  the current minute.
  
  :meth:`process_order` is not called by the base class on bars for which
  there was no historical volume.
docstr_tok: ["Compute","the","number","of","shares","and","price","to","fill","for","``","order","``","in","the","current","minute",".","Parameters","--","--","--","--","--","data",":","zipline.protocol.BarData","The","data","for","the","given","bar",".","order",":","zipline.finance.order.Order","The","order","to","simulate",".","Returns","--","--","--","-","execution_price",":","float","The","price","of","the","fill",".","execution_volume",":","int","The","number","of","shares","that","should","be","filled",".","Must","be","between","``","0","``","and","``","order.amount","-","order.filled","``",".","If","the","amount","filled","is","less","than","the","amount","remaining",",","``","order","``","will","remain","open","and","will","be","passed","again","to","this","method","in","the","next","minute",".","Raises","--","--","--","zipline.finance.slippage.LiquidityExceeded","May","be","raised","if","no","more","orders","should","be","processed","for","the","current","asset","during","the","current","bar",".","Notes","--","--","-","Before","this","method","is","called",",",":","attr",":","`","volume_for_bar","`","will","be","set","to","the","number","of","shares","that","have","already","been","filled","for","``","order.asset","``","in","the","current","minute",".",":","meth",":","`","process_order","`","is","not","called","by","the","base","class","on","bars","for","which","there","was","no","historical","volume","."]
code: def process_order(self, data, order):
      """
      Compute the number of shares and price to fill for ``order`` in the
      current minute.
  
      Parameters
      ----------
      data : zipline.protocol.BarData
          The data for the given bar.
      order : zipline.finance.order.Order
          The order to simulate.
  
      Returns
      -------
      execution_price : float
          The price of the fill.
      execution_volume : int
          The number of shares that should be filled. Must be between ``0``
          and ``order.amount - order.filled``. If the amount filled is less
          than the amount remaining, ``order`` will remain open and will be
          passed again to this method in the next minute.
  
      Raises
      ------
      zipline.finance.slippage.LiquidityExceeded
          May be raised if no more orders should be processed for the current
          asset during the current bar.
  
      Notes
      -----
      Before this method is called, :attr:`volume_for_bar` will be set to the
      number of shares that have already been filled for ``order.asset`` in
      the current minute.
  
      :meth:`process_order` is not called by the base class on bars for which
      there was no historical volume.
      """
      raise NotImplementedError("process_order")
  
imports: from __future__ import division
  from abc import abstractmethod
  import math
  import numpy
  from pandas import isnull
  from six import with_metaclass
  from toolz import merge
  from zipline.assets import Equity, Future
  from zipline.errors import HistoryWindowStartsBeforeData
  from zipline.finance.constants import ROOT_SYMBOL_TO_ETA
  from zipline.finance.shared import AllowedAssetMarker, FinancialModelMeta
  from zipline.finance.transaction import create_transaction
  from zipline.utils.cache import ExpiringCache
  from zipline.utils.dummy import DummyMapping
  from zipline.utils.input_validation import expect_bounded, expect_strictly_bounded
label_desc: Use image node_id 3 for calling the SlippageModel obj's underlying member method code with example usage: obj.process_order(data, order) without return types