def get_orders(self, game, power) -> List[str]:
     prob_distributions = self.get_all_power_prob_distributions(
         game, early_exit_for_power=power)
     logging.info(f"Final strategy: {prob_distributions[power]}")
     if len(prob_distributions[power]) == 0:
         return []
     return list(sample_p_dict(prob_distributions[power]))
    def get_orders_many_powers(self,
                               game,
                               powers,
                               timings=None,
                               single_cfr=None) -> Dict[Power, List[str]]:

        if timings is None:
            timings = TimingCtx()
        if single_cfr is None:
            single_cfr = self.share_strategy
        with timings("get_orders_many_powers"):
            # Noop to differentiate from single power call.
            pass
        prob_distributions = {}
        if single_cfr:
            inner_timings = TimingCtx()
            prob_distributions = self.get_all_power_prob_distributions(
                game, timings=inner_timings)
            timings += inner_timings
        else:
            for power in powers:
                inner_timings = TimingCtx()
                prob_distributions[
                    power] = self.get_all_power_prob_distributions(
                        game,
                        early_exit_for_power=power,
                        timings=inner_timings)[power]
                timings += inner_timings
        all_orders: Dict[Power, List[str]] = {}
        for power in powers:
            logging.info(
                f"Final strategy ({power}): {prob_distributions[power]}")
            if len(prob_distributions[power]) == 0:
                all_orders[power] = []
            else:
                all_orders[power] = list(
                    sample_p_dict(prob_distributions[power]))
        timings.pprint(logging.getLogger("timings").info)
        return all_orders
def get_cf_agent_order_samples(game, phase_name, cf_agent, n_cf_agent_samples):
    assert game.get_state(
    )["name"] == phase_name, f"{game.get_state()['name']} != {phase_name}"

    if hasattr(cf_agent, "get_all_power_prob_distributions"):
        power_action_ps = cf_agent.get_all_power_prob_distributions(game)
        logging.info(f"get_all_power_prob_distributions: {power_action_ps}")
        return {
            power: ([
                sample_p_dict(power_action_ps[power])
                for _ in range(n_cf_agent_samples)
            ] if power_action_ps[power] else [])
            for power in POWERS
        }
    else:
        return {
            power: [
                cf_agent.get_orders(game, power)
                for _ in range(n_cf_agent_samples)
            ]
            for power in POWERS
        }