def push(self, **options):
        # for this size dict & usage pattern, copying turns out to be cheaper
        # than directing __getitem__ down through a stack of sparse frames.
        self._frames.append(self._frames[-1].copy())
        try:
            self.update(**options)
        except __HOLE__:
            self.pop()
            raise
dataset/ETHPy150Open jek/flatland/flatland/out/generic.py/Context.push