예제 #1
0
def dyad_seqs(game):
    pairs = defaultdict(list)
    for k, (year,
            season,
            phase_type,
            state,
            press,
            results) in enumerate(iter_game(game)):
        result = standard_result(results)
        if phase_type == "M" and result:
            friends, enemies = interactions(result)
            for country_a in COUNTRIES:
                for country_b in COUNTRIES:
                    if country_a == country_b:
                        continue
                    this_fr = (country_a, country_b) in friends
                    this_en = (country_a, country_b) in enemies
                    rel = this_fr - this_en  # XXX: 0 if neither or both !!
                    pairs[country_a, country_b].append((k, (year, season), rel))

    pairs = dict(pairs)
    nonzero_pairs = dict()

    for (country_a, country_b), series in pairs.items():
        nonzero_series = [(k, turn, rel) for k, turn, rel in series
                          if rel != 0]
        if not nonzero_series:
            continue
        nonzero_pairs[country_a, country_b] = nonzero_series

    return nonzero_pairs
예제 #2
0
def dyad_interaction(game):
    player_sup_rel = []
    player_atk_rel = []
    player_atkhome_rel = []

    for year, season, phase_type, state, press, results in iter_game(game):
        result = standard_result(results)
        if phase_type == "M" and result:
            player_sup_rel.append(supports(result))
            player_atk_rel.append(attacks_with_hold(result))
            player_atkhome_rel.append(attacks_on_home(result))

    return player_sup_rel, player_atk_rel, player_atkhome_rel
예제 #3
0
def status_flip_dataset(game, **flips_kwargs):
    dataset = []
    seqs = dyad_seqs(game)
    flips = status_flips(seqs, **flips_kwargs)
    press = [((year, season), pr) for year, season, _, _, pr, _
             in iter_game(game)]
    for (country_a, country_b), runs in flips.items():
        for run in runs:
            idx_start, idx_end = run[0][0], run[-1][0]
            run_press = [((year, season), [msg
                        for msg in phase_press
                        if (msg['apparent_sender'],
                            msg['apparent_receivers']) in (
                            (country_a, country_b), (country_b, country_a))])
                        for (year, season), phase_press
                        in press[idx_start:idx_end + 1]]
            dataset.append((country_a, country_b, run_press, run))
    return dataset