Files @ 7cb01d4080c9
Branch filter:

Location: OneEye/src/util.py

Laman
a hinted neural network (failed)
import random
import multiprocessing
import logging

log=logging.getLogger(__name__)

EMPTY=0
BLACK=1
WHITE=-1

colorNames={BLACK:"B",WHITE:"W"}


class MsgQueue:
	def __init__(self,name,handler=None):
		self.name=name
		self._queue=multiprocessing.Queue()
		self._event=multiprocessing.Event()
		self._handleEvent=handler

	def send(self,actionName,args=tuple(),kwargs=None):
		if kwargs is None: kwargs=dict()
		self._queue.put((actionName,args,kwargs))
		self._event.set()

	def listen(self,handleEvent=None):
		if handleEvent is not None: self._handleEvent=handleEvent

		while True:
			self._event.wait()
			msg=self._queue.get()
			if self._queue.empty():
				self._event.clear()
			log.info("%s <- %s", self.name, msg if msg[0]!="putFrame" else "('putFrame', ..., {})")
			if msg[0]=="!kill": break
			self._handleEvent(msg)
		log.info("%s MsgQueue exiting.",self.name)

	def setHandler(self,handler):
		self._handleEvent=handler


rand=random.Random()
rand.seed(361)
zobristNums=tuple(
	tuple(
		tuple(rand.getrandbits(32) for i in range(3)) for c in range(19)
	) for r in range(19)
)

def hashBoard(board):
	res=0
	for (r,row) in enumerate(board):
		for (c,item) in enumerate(row):
			res^=zobristNums[r][c][item+1]
	return res


def diffHash(r,c,oldItem,newItem):
	h=zobristNums[r][c]
	return h[oldItem+1] ^ h[newItem+1]


def exportBoard(board):
	substitutions={BLACK:"X", WHITE:"O"}
	template=[["."]*19 for r in range(19)]
	for r in range(3,19,6):
		for c in range(3,19,6):
			template[r][c]=","

	for (row,templateRow) in zip(board,template):
		for (c,x) in enumerate(row):
			if x!=EMPTY: templateRow[c]=substitutions[x]

	return "\n".join("".join(row) for row in template)