# Path: pympler/muppy.py
# def ignore_object(obj: Any) -> bool:
# def get_objects(remove_dups: bool = True, include_frames: bool = False
#                 ) -> List[Any]:
# def get_size(objects: List[Any]) -> int:
# def get_diff(left: List[Any], right: List[Any]) -> Dict[str, List[Any]]:
#     def partition(objects: List[Any]) -> Dict[type, List[Any]]:
#     def get_not_included(foo: List[Any], bar: Dict[type, List[Any]]
#                          ) -> List[Any]:
# def sort(objects: List[Any]) -> List[Any]:
# def filter(objects: List[Any], Type: Optional[type] = None, min: int = -1,
#            max: int = -1) -> List[Any]:
# def get_referents(object: Any, level: int = 1) -> List[Any]:
# def _get_usage(function: Callable, *args: Any) -> Optional[List]:
#     def _get_summaries(function: Callable, *args: Any) -> Tuple:
#     def _get_usage(function: Callable, *args: Any) -> List:
#     def noop() -> None:
# def _is_containerobject(o: Any) -> bool:
# def _remove_duplicates(objects: List[Any]) -> List[Any]:
# def print_summary() -> None:
# 
# Path: pympler/summary.py
# def _init_representations():
# def summarize(objects):
# def get_diff(left, right):
# def format_(rows, limit=15, sort='size', order='descending'):
# def _format_table(rows, header=True):
# def print_(rows, limit=15, sort='size', order='descending'):
# def _repr(o, verbosity=1):
# def _traverse(summary, function, *args):
# def _subtract(summary, o):
# def _sweep(summary):
# 
# Path: pympler/util/compat.py
# def object_in_list(obj: Any, l: Iterable) -> bool:


import gc
import inspect
from pympler import muppy, summary
from pympler.util import compat
    def _get_objects(self, ignore=()):
        """Get all currently existing objects.

        XXX - ToDo: This method is a copy&paste from muppy.get_objects, but
        some modifications are applied. Specifically, it allows to ignore
        objects (which includes the current frame).

        keyword arguments
        ignore -- list of objects to ignore
        """
        def remove_ignore(objects, ignore=()):
            # remove all objects listed in the ignore list
            res = []
            for o in objects:
                if not compat.object_in_list(o, ignore):
                    res.append(o)
            return res

        tmp = gc.get_objects()
        ignore += (inspect.currentframe(), self, ignore, remove_ignore)
        if hasattr(self, 'o0'):
            ignore += (self.o0,)
        if hasattr(self, 'o1'):
            ignore += (self.o1,)
        # this implies that referenced objects are also ignored
        tmp = remove_ignore(tmp, ignore)
        res = []
        for o in tmp:
            # gc.get_objects returns only container objects, but we also want
            # the objects referenced by them

# Path: pympler/muppy.py
# def ignore_object(obj: Any) -> bool:
# def get_objects(remove_dups: bool = True, include_frames: bool = False
#                 ) -> List[Any]:
# def get_size(objects: List[Any]) -> int:
# def get_diff(left: List[Any], right: List[Any]) -> Dict[str, List[Any]]:
#     def partition(objects: List[Any]) -> Dict[type, List[Any]]:
#     def get_not_included(foo: List[Any], bar: Dict[type, List[Any]]
#                          ) -> List[Any]:
# def sort(objects: List[Any]) -> List[Any]:
# def filter(objects: List[Any], Type: Optional[type] = None, min: int = -1,
#            max: int = -1) -> List[Any]:
# def get_referents(object: Any, level: int = 1) -> List[Any]:
# def _get_usage(function: Callable, *args: Any) -> Optional[List]:
#     def _get_summaries(function: Callable, *args: Any) -> Tuple:
#     def _get_usage(function: Callable, *args: Any) -> List:
#     def noop() -> None:
# def _is_containerobject(o: Any) -> bool:
# def _remove_duplicates(objects: List[Any]) -> List[Any]:
# def print_summary() -> None:
# 
# Path: pympler/summary.py
# def _init_representations():
# def summarize(objects):
# def get_diff(left, right):
# def format_(rows, limit=15, sort='size', order='descending'):
# def _format_table(rows, header=True):
# def print_(rows, limit=15, sort='size', order='descending'):
# def _repr(o, verbosity=1):
# def _traverse(summary, function, *args):
# def _subtract(summary, o):
# def _sweep(summary):
# 
# Path: pympler/util/compat.py
# def object_in_list(obj: Any, l: Iterable) -> bool:


# Path: pympler/tracker.py
import gc
import inspect
from pympler import muppy, summary
from pympler.util import compat

    def _get_objects(self, ignore=()):
        """Get all currently existing objects.

        XXX - ToDo: This method is a copy&paste from muppy.get_objects, but
        some modifications are applied. Specifically, it allows to ignore
        objects (which includes the current frame).

        keyword arguments
        ignore -- list of objects to ignore
        """
        def remove_ignore(objects, ignore=()):
            # remove all objects listed in the ignore list
            res = []
            for o in objects:
                if not compat.object_in_list(o, ignore):
                    res.append(o)
            return res

        tmp = gc.get_objects()
        ignore += (inspect.currentframe(), self, ignore, remove_ignore)
        if hasattr(self, 'o0'):
            ignore += (self.o0,)
        if hasattr(self, 'o1'):
            ignore += (self.o1,)
        # this implies that referenced objects are also ignored
        tmp = remove_ignore(tmp, ignore)
        res = []
        for o in tmp:
            # gc.get_objects returns only container objects, but we also want
            # the objects referenced by them

            refs = muppy.get_referents(o)