Computes the rank of this transition for a given request.

        It returns (in order):

            - The score (from 0 to 1)
            - The trigger instance (if it matched)
            - The class of the destination state (if matched)

async def rank(self, request, origin: Optional[Text]) \
            -> Tuple[
                float,
                Optional[BaseTrigger],
                Optional[type],
                Optional[bool],
            ]:
        """
        Computes the rank of this transition for a given request.

        It returns (in order):

            - The score (from 0 to 1)
            - The trigger instance (if it matched)
            - The class of the destination state (if matched)
        """

        if self.origin_name == origin:
            score = 1.0
        elif self.origin_name is None:
            score = settings.JUMPING_TRIGGER_PENALTY
        else:
            return 0.0, None, None, None

        trigger = self.factory(request)
        rank = await run_or_return(trigger.rank())
        score *= self.weight * (rank or 0.0)

        return score, trigger, self.dest, self.do_not_register