def on_prune(self, fgraph, app, reason):
            # if app not in self.debug_all_apps: raise ProtocolError("prune without import")
            # self.debug_all_apps.remove(app)

            # UPDATE self.clients
            for i, input in enumerate(OrderedSet(app.inputs)):
                del self.clients[input][app]

            if getattr(app.op, 'destroy_map', {}):
                self.destroyers.remove(app)

            # Note: leaving empty client dictionaries in the struct.
            # Why? It's a pain to remove them. I think they aren't doing any harm, they will be
            # deleted on_detach().

            # UPDATE self.view_i, self.view_o
            for o_idx, i_idx_list in iteritems(getattr(app.op, 'view_map', {})):
                if len(i_idx_list) > 1:
                    # destroying this output invalidates multiple inputs
                    raise NotImplementedError()
                o = app.outputs[o_idx]
                i = app.inputs[i_idx_list[0]]

                del self.view_i[o]

                self.view_o[i].remove(o)
                if not self.view_o[i]:
                    del self.view_o[i]

            self.stale_droot = True
Remove Apply instance from set which must be computed.
dataset/ETHPy150Open rizar/attention-lvcsr/libs/Theano/theano/gof/destroyhandler.py/DestroyHandler.on_prune