  We show how to obtain the dual of any lattice model with inhomogeneous local
interactions based on an arbitrary Abelian group in any dimension and on
lattices with arbitrary topology. It is shown that in general the dual theory
contains disorder loops on the generators of the cohomology group of a
particular dimension. An explicit construction for altering the statistical sum
to obtain a self-dual theory, when these obstructions exist, is also given. We
discuss some applications of these results, particularly the existence of
non-trivial self-dual 2-dimensional Z_N theories on the torus. In addition we
explicitly construct the n-point functions of plaquette variables for the U(1)
gauge theory on the 2-dimensional g-tori.
