docs: 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