Remove dynamic notifications.

        *method* a callable that was registered with :meth:`observe`.

        *prop_names* a sequence of strings. This need not correspond to any
        one `observe` call.

        .. note::

           This can revert even the effects of decorator `observe` at
           runtime. Don't.

def remove_observing_method(self, prop_names, method):
        """
        Remove dynamic notifications.

        *method* a callable that was registered with :meth:`observe`.

        *prop_names* a sequence of strings. This need not correspond to any
        one `observe` call.

        .. note::

           This can revert even the effects of decorator `observe` at
           runtime. Don't.
        """
        for prop_name in prop_names:
            if prop_name in self.__PROP_TO_METHS:
                # exact match
                self.__PROP_TO_METHS[prop_name].remove(method)
                del self.__PAT_METH_TO_KWARGS[(prop_name, method)]
            elif method in self.__METH_TO_PAT:
                # found a pattern matching
                pat = self.__METH_TO_PAT[method]
                if fnmatch.fnmatch(prop_name, pat):
                    del self.__METH_TO_PAT[method]
                    self.__PAT_TO_METHS[pat].remove(method)

                del self.__PAT_METH_TO_KWARGS[(pat, method)]