code: def computeMatchProbabilityOmega(k, bMax, theta, nTrials=100):
    
    omegaProb = np.zeros(bMax+1)
  
    for b in range(1, bMax+1):
      xwb = getSparseTensor(b, b, nTrials, fixedRange=1.0/k)
      xib = getSparseTensor(b, b, nTrials, onlyPositive=True, fixedRange=2.0/k)
      r = xwb.matmul(xib.t())
      numMatches = ((r >= theta).sum()).item()
      omegaProb[b] = numMatches / float(nTrials * nTrials)
  
    print(omegaProb)
  
    return omegaProb
docs: The Omega match probability estimates the probability of matching when
    both vectors have exactly b components in common.  This function computes
    this probability for b=1 to bMax.
  
    For each value of b this function:
  
    1) Creates nTrials instances of Xw(b) which are vectors with b components
    where each component is uniform in [-1/k, 1/k].
  
    2) Creates nTrials instances of Xi(b) which are vectors with b components
    where each component is uniform in [0, 2/k].
  
    3) Does every possible dot product of Xw(b) dot Xi(b), i.e. nTrials * nTrials
    dot products.
  
    4) Counts the fraction of cases where Xw(b) dot Xi(b) >= theta
  
    Returns an array with bMax entries, where each entry contains the
    probability computed in 4).