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

Method _evaluate_matrix

codeclash/analysis/matrix.py:247–296  ·  view source on GitHub ↗

Evaluate a matrix between two players using manual thread management.

(self, player1_name: str, player2_name: str)

Source from the content-addressed store, hash-verified

245 self.logger.debug(f"Worker {worker_id} stopped")
246
247 def _evaluate_matrix(self, player1_name: str, player2_name: str):
248 """Evaluate a matrix between two players using manual thread management."""
249 symmetric = player1_name == player2_name
250 matrix_id = f"{player1_name}_vs_{player2_name}"
251 self.logger.info(f"Evaluating {matrix_id} matrix: {player1_name} vs {player2_name}")
252
253 # Initialize matrix structure
254 self.matrices.setdefault(matrix_id, {})
255 for i in range(self.rounds + 1):
256 self.matrices[matrix_id].setdefault(str(i), {})
257
258 # Create task queue and populate it directly
259 task_queue = Queue()
260 task_count = 0
261
262 for i in range(self.rounds + 1):
263 j_range = range(i) if symmetric else range(self.rounds + 1)
264 for j in j_range:
265 # Skip if already completed
266 try:
267 if self.matrices[matrix_id][str(i)][str(j)]:
268 continue
269 except KeyError:
270 pass
271 task_queue.put(
272 {"player1_name": player1_name, "player2_name": player2_name, "i": i, "j": j, "matrix_id": matrix_id}
273 )
274 task_count += 1
275
276 if task_count == 0:
277 self.logger.info(f"All matrix cells for {matrix_id} already completed")
278 return
279
280 self.logger.info(f"Executing {task_count} matrix cells using {self.max_workers} dedicated workers")
281
282 # Start worker threads - each bound to a specific game worker
283 self.logger.debug("Starting worker threads")
284 workers = []
285 for worker_id in range(self.max_workers):
286 worker = Thread(target=self._worker_thread, args=(worker_id, task_queue))
287 worker.start()
288 workers.append(worker)
289
290 self.logger.debug("Waiting for tasks to complete")
291 task_queue.join()
292 self.logger.debug("Workers finished")
293 for worker in workers:
294 worker.join()
295
296 self.logger.info(f"Completed matrix evaluation for {matrix_id}")
297
298 def evaluate_all_matrices(self) -> dict:
299 """Evaluate vs matrix between the two players."""

Callers 1

evaluate_all_matricesMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected