        def ancestors(*types):
            """
            Get a list of virtual MROs, one for each type
            """
            check(types)
            lists = []
            for t, vas in zip(types, vancestors(*types)):
                n_vas = len(vas)
                if n_vas > 1:
                    raise RuntimeError(
                        'Ambiguous dispatch for %s: %s' % (t, vas))
                elif n_vas == 1:
                    va, = vas
                    mro = type('t', (t, va), {}).__mro__[1:]
                else:
                    mro = t.__mro__
                lists.append(mro[:-1])  # discard t and object
            return lists
Get a list of virtual MROs, one for each type
prometheus_client/decorator.py