Main body of `support_enumeration_gen`.

    Parameters
    ----------
    payoff_matrices : tuple(ndarray(float, ndim=2))
        Tuple of payoff matrices, of shapes (m, n) and (n, m),
        respectively.

    Yields
    ------
    out : tuple(ndarray(float, ndim=1))
        Tuple of Nash equilibrium mixed actions, of lengths m and n,
        respectively.

def _support_enumeration_gen(payoff_matrices):
    """
    Main body of `support_enumeration_gen`.

    Parameters
    ----------
    payoff_matrices : tuple(ndarray(float, ndim=2))
        Tuple of payoff matrices, of shapes (m, n) and (n, m),
        respectively.

    Yields
    ------
    out : tuple(ndarray(float, ndim=1))
        Tuple of Nash equilibrium mixed actions, of lengths m and n,
        respectively.

    """
    nums_actions = payoff_matrices[0].shape
    n_min = min(nums_actions)

    for k in range(1, n_min+1):
        supps = (np.arange(0, k, 1, np.int_), np.empty(k, np.int_))
        actions = (np.empty(k+1), np.empty(k+1))
        A = np.empty((k+1, k+1))

        while supps[0][-1] < nums_actions[0]:
            supps[1][:] = np.arange(k)
            while supps[1][-1] < nums_actions[1]:
                if _indiff_mixed_action(
                    payoff_matrices[0], supps[0], supps[1], A, actions[1]
                ):
                    if _indiff_mixed_action(
                        payoff_matrices[1], supps[1], supps[0], A, actions[0]
                    ):
                        out = (np.zeros(nums_actions[0]),
                               np.zeros(nums_actions[1]))
                        for p, (supp, action) in enumerate(zip(supps,
                                                               actions)):
                            out[p][supp] = action[:-1]
                        yield out
                next_k_array(supps[1])
            next_k_array(supps[0])