  Many of the classic problems of coding theory are highly symmetric, which
makes it easy to derive sphere-packing upper bounds and sphere-covering lower
bounds on the size of codes. We discuss the generalizations of sphere-packing
and sphere-covering bounds to arbitrary error models. These generalizations
become especially important when the sizes of the error spheres are nonuniform.
The best possible sphere-packing and sphere-covering bounds are solutions to
linear programs. We derive a series of bounds from approximations to packing
and covering problems and study the relationships and trade-offs between them.
We compare sphere-covering lower bounds with other graph theoretic lower bounds
such as Tur\'{a}n's theorem. We show how to obtain upper bounds by optimizing
across a family of channels that admit the same codes. We present a
generalization of the local degree bound of Kulkarni and Kiyavash and use it to
improve the best known upper bounds on the sizes of single deletion correcting
codes and single grain error correcting codes.
