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
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
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