+def create_frag_matrix(session, player_indexes, pgstat, events):
+ """
+ Construct a PlayerFragMatrix object from the events of a given player.
+
+ :param session: The DBSession we're adding objects to.
+ :param player_indexes: The set of player indexes of those that actually played in the game.
+ :param pgstat: The PlayerGameStat object of the player whose frag matrix we want to create.
+ :param events: The raw player events of the above player.
+ :return: PlayerFragMatrix
+ """
+ player_index = int(events.get("i", None))
+
+ # "kills-4" -> 4
+ victim_index = lambda x: int(x.split("-")[1])
+
+ matrix = {victim_index(k): int(v) for (k, v) in events.items()
+ if k.startswith("kills-") and victim_index(k) in player_indexes}
+
+ pfm = PlayerGameFragMatrix(pgstat.game_id, pgstat.player_game_stat_id, pgstat.player_id,
+ player_index, matrix)
+
+ session.add(pfm)
+
+ return pfm
+
+