def METHOD_NAME(self, dt):
    """
    Compute the (exponentiated) transition matrix of the GP latent space.
    The resulting matrix has layout (num_gps, old_state, new_state), i.e. this
    matrix multiplies states from the right.
    See section 5 in reference [1] for details.
    :param float dt: the time interval over which the GP latent space evolves.
    :returns torch.Tensor: a 3-dimensional tensor of transition matrices of shape
        (num_gps, state_dim, state_dim).
    """
    if self.nu == 0.5:
        rho = self.length_scale.unsqueeze(-1).unsqueeze(-1)
        return torch.exp(-dt / rho)
    elif self.nu == 1.5:
        rho = self.length_scale.unsqueeze(-1).unsqueeze(-1)
        dt_rho = dt / rho
        trans = (
            (1.0 + root_three * dt_rho) * self.mask00
            + (-3.0 * dt_rho / rho) * self.mask01
            + dt * self.mask10
            + (1.0 - root_three * dt_rho) * self.mask11
        )
        return torch.exp(-root_three * dt_rho) * trans
    elif self.nu == 2.5:
        rho = self.length_scale.unsqueeze(-1).unsqueeze(-1)
        dt_rho = root_five * dt / rho
        dt_rho_sq = dt_rho.pow(2.0)
        dt_rho_cu = dt_rho.pow(3.0)
        dt_rho_qu = dt_rho.pow(4.0)
        dt_sq = dt**2.0
        trans = (
            (1.0 + dt_rho + 0.5 * dt_rho_sq) * self.mask00
            + (-0.5 * dt_rho_cu / dt) * self.mask01
            + ((0.5 * dt_rho_qu - dt_rho_cu) / dt_sq) * self.mask02
            + ((dt_rho + 1.0) * dt) * self.mask10
            + (1.0 + dt_rho - dt_rho_sq) * self.mask11
            + ((dt_rho_cu - 3.0 * dt_rho_sq) / dt) * self.mask12
            + (0.5 * dt_sq) * self.mask20
            + ((1.0 - 0.5 * dt_rho) * dt) * self.mask21
            + (1.0 - 2.0 * dt_rho + 0.5 * dt_rho_sq) * self.mask22
        )
        return torch.exp(-dt_rho) * trans