### Representing Graphical Model Factors in Numpy

I've been working a bit with graphical models lately for my research. For a while I was using a library called pgmpy for their implementations of factor arithmetic and inference algorithms. However, as my research is progressing I am needing more control than what pgmpy offers, so I decided to re-implement and extend the algorithms that I needed. If you are in a similar situation and are finding yourself implementing your own graphical models algorithms, this post is for you. In the setting I am working in, I have a Markov random field model where there are only a small number of variables (no more than a few dozen, often much less). However, each variable can take on a possibly large number of categorical values and the graph may contain relatively large cliques that make exact inference computationally challenging (although still possible). Suppose the model has $d$ variables and variable $i$ can take on $n_i$ possible values. Usually a factor defined over $k$ variables