MCPcopy Create free account
hub / github.com/CodeClash-ai/CodeClash / parse

Method parse

codeclash/arenas/bridge/replay.py:112–168  ·  view source on GitHub ↗
(self, raw: bytes, players=None)

Source from the content-addressed store, hash-verified

110 DRAW_JS = DRAW_JS
111
112 def parse(self, raw: bytes, players=None) -> ReplayData:
113 d = json.loads(raw.decode())
114 bids = d.get("bids", [])
115 contract = d.get("contract")
116 played = d.get("played_tricks", [])
117 names = {i: (players[i]["name"] if players and len(players) > i else SEATS[i]) for i in range(4)}
118
119 frames = []
120 acc = []
121 for b in bids:
122 acc = acc + [b]
123 frames.append(
124 {
125 "turn": len(frames),
126 "phase": "bid",
127 "bids": list(acc),
128 "contract": None,
129 "trick": {},
130 "trickNum": 0,
131 "won": {"NS": 0, "EW": 0},
132 "winner": None,
133 }
134 )
135
136 trump = contract["suit"] if contract and contract.get("suit") in ("S", "H", "D", "C") else None
137 won = {"NS": 0, "EW": 0}
138 for tnum, trick in enumerate(played, start=1):
139 cur = {}
140 for play in trick:
141 cur[play["position"]] = play["card"]
142 frames.append(
143 {
144 "turn": len(frames),
145 "phase": "play",
146 "bids": list(acc),
147 "contract": contract,
148 "trick": dict(cur),
149 "trickNum": tnum,
150 "won": dict(won),
151 "winner": None,
152 }
153 )
154 w = _trick_winner(trick, trump)
155 won[TEAM[w]] += 1
156 frames[-1]["winner"] = w
157 frames[-1]["won"] = dict(won)
158
159 score = d.get("normalized_score", {})
160 ns, ew = score.get("NS", 0), score.get("EW", 0)
161 if ns > ew:
162 winner, draw = f"{names[0]}/{names[2]} (NS)", False
163 elif ew > ns:
164 winner, draw = f"{names[1]}/{names[3]} (EW)", False
165 else:
166 winner, draw = None, True
167
168 return ReplayData(w=1, h=1, frames=frames, winner=winner, draw=draw, extra={"names": names})

Callers

nothing calls this directly

Calls 3

ReplayDataClass · 0.90
_trick_winnerFunction · 0.85
getMethod · 0.80

Tested by

no test coverage detected