def _islice(self, min_pos, min_idx, max_pos, max_idx, reverse):
_lists = self._lists<EOL>if min_pos > max_pos:<EOL><INDENT>return iter(())<EOL><DEDENT>elif min_pos == max_pos and not reverse:<EOL><INDENT>return iter(_lists[min_pos][min_idx:max_idx])<EOL><DEDENT>elif min_pos == max_pos and reverse:<EOL><INDENT>return reversed(_lists[min_pos][min_idx:max_idx])<EOL><DEDENT>elif min_pos + <NUM_LIT:1> == max_pos and not reverse:<EOL><INDENT>return chain(_lists[min_pos][min_idx:], _lists[max_pos][:max_idx])<EOL><DEDENT>elif min_pos + <NUM_LIT:1> == max_pos and reverse:<EOL><INDENT>return chain(<EOL>reversed(_lists[max_pos][:max_idx]),<EOL>reversed(_lists[min_pos][min_idx:]),<EOL>)<EOL><DEDENT>elif not reverse:<EOL><INDENT>return chain(<EOL>_lists[min_pos][min_idx:],<EOL>chain.from_iterable(_lists[(min_pos + <NUM_LIT:1>):max_pos]),<EOL>_lists[max_pos][:max_idx],<EOL>)<EOL><DEDENT>temp = map(reversed, reversed(_lists[(min_pos + <NUM_LIT:1>):max_pos]))<EOL>return chain(<EOL>reversed(_lists[max_pos][:max_idx]),<EOL>chain.from_iterable(temp),<EOL>reversed(_lists[min_pos][min_idx:]),<EOL>)<EOL>
Returns an iterator that slices `self` using two index pairs,
`(min_pos, min_idx)` and `(max_pos, max_idx)`; the first inclusive
and the latter exclusive. See `_pos` for details on how an index
is converted to an index pair.

When `reverse` is `True`, values are yielded from the iterator in
reverse order.