add hacky caching of weights: almost 2x speedup\!
fix weight caching to account for off-diagonal entries and actually return correct results