docs: def _get_mixed_actions(tableaux, bases):
      """
      From `tableaux` and `bases`, extract non-slack basic variables and
      return a tuple of the corresponding, normalized mixed actions.
  
      Parameters
      ----------
      tableaux : tuple(ndarray(float, ndim=2))
          Tuple of two arrays containing the tableaux, of shape (n, m+n+1)
          and (m, m+n+1), respectively.
  
      bases : tuple(ndarray(int, ndim=1))
          Tuple of two arrays containing the bases, of shape (n,) and
          (m,), respectively.
  
      Returns
      -------
      tuple(ndarray(float, ndim=1))
          Tuple of mixed actions as given by the non-slack basic variables
          in the tableaux.
  
      """
      nums_actions = tableaux[1].shape[0], tableaux[0].shape[0]
      num = nums_actions[0] + nums_actions[1]
      out = np.zeros(num)
  
      for pl, (start, stop) in enumerate(zip((0, nums_actions[0]),
                                             (nums_actions[0], num))):
          sum_ = 0.
          for i in range(nums_actions[1-pl]):
              k = bases[pl][i]
              if start <= k < stop:
                  out[k] = tableaux[pl][i, -1]
                  sum_ += tableaux[pl][i, -1]
          if sum_ != 0:
              out[start:stop] /= sum_
  
      return out[:nums_actions[0]], out[nums_actions[0]:]