slow, the "depth" parameter is provided to limit the number of
      specializations that can be compiled, before giving up on
      recompiling and falling back to a completely un-fused, un-
      specialized implementation.
The list of (type, depth) pairs controls the type of
   specializations and the number of specializations. For example:
   [("STATIC", 2), ("DYNAMIC", 2)] indicates that the first two
   specializations will use static fusions, the following two
   specializations will use dynamic fusion, and any inputs that
   satisfy none of the 4 options will run an unfused implementation.
NB: in the future, if more as more fusion backends are added there
   may be more granular apis for specific fusers.