import sys; sys.path.insert(0,'.')
from fibres import *
# compare: (i) defect<=0 always, (ii) leading coeff at relevant pairs == branching multiplicity
def Zset(d,a,b):
    return [D for D in range(abs(2*b-d), min(2*b+d,2*a-d)+1) if (D-d)%2==0 and D>=0]
def branch(lam,nu):
    (a1,b1),(a2,b2)=lam; d1,d2,e=nu
    return sum(1 for D1 in Zset(d1,a1,b1) for D2 in Zset(d2,a2,b2) if abs(D1-D2)<=e<=D1+D2 and (D1+D2-e)%2==0)
mism=0; cnt=0; multi=0; pos=0
for a1 in range(4):
  for b1 in range(a1+1):
    for a2 in range(4):
      for b2 in range(a2+1):
        lam=((a1,b1),(a2,b2))
        for d1 in range(0,5):
          for d2 in range(0,5):
            for e in range(0,9):
              if (e-(d1-d2))%2: continue
              nu=(d1,d2,e); p=N(lam,nu); br=branch(lam,nu)
              if not p:
                  if br: mism+=1; print("MISMATCH empty",lam,nu,br)
                  continue
              r=2*deg(p)-two_rho(lam)+delta(nu)
              if r>0: pos+=1
              c = lead(p) if r==0 else 0
              cnt+=1
              if c!=br: mism+=1; print("MISMATCH",lam,nu,pstr(p),br)
              if br>=2: multi+=1
print("pairs with nonempty fibre:",cnt,"mismatches:",mism,"positive defects:",pos,"pairs with multiplicity>=2:",multi)
