Sparser, Better, Faster, Stronger: Sparsity Detection for Efficient Automatic Differentiation