'Return a new model build from a sub-expression of the expression
represented by this model.
Right now this is highly inefficient, as it creates a new temporary
model for each operator that appears in the sub-expression.  It would
be better if this just built a new expression tree, and the new model
instantiated directly from that tree.
Once tree -> model instantiation is possible this should be fixed to
use that instead.'

def _get_slice(cls, start, stop):

    members = {u'_slice_offset': (cls._slice_offset + start)}
    operators = dict(((oper, _model_oper(oper, additional_members=members)) for oper in BINARY_OPERATORS))
    return cls._tree.evaluate(operators, start=start, stop=stop)
