anchor.diff:          | DV(ap)                      -> DV(ff(ap))
           | DVF(ap, at, ai)             -> let cp = fd(ap) in DVF(cp, df(cp, ap, at), ai)
           | DVR(ap,_,_,_,ai)            -> let cp = fd(ap) in DVR(cp, ref (DV.ZeroN cp.Length), r(a), ref 0u, ai)
  +
  +    static member inline Op_DV_D (a, ff, fd, df, r) =
  +        match a with
  +        | DV(ap)                      -> D(ff(ap))
  +        | DVF(ap, at, ai)             -> let cp = fd(ap) in DF(cp, df(cp, ap, at), ai)
  +        | DVR(ap,_,_,_,ai)            -> let cp = fd(ap) in DR(cp, ref (D 0.), r(a), ref 0u, ai)
   
       static member inline Op_DV_DV_DV (a, b, ff, fd, df_da, df_db, df_dab, r_d_d, r_d_c, r_c_d) =
           match a with
  
positive.code:                     | Sub_DM_DM(a, b) -> reversePush d.A a; reversePush -d.A b
                      | Sub_DM_DMCons(a) -> reversePush d.A a
                      | Sub_DMCons_DM(a) -> reversePush -d.A a
                      | Mul_DM_DM(a, b) -> reversePush (d.A * b.P.Transpose()) a; reversePush (a.P.Transpose() * d.A) b
                      | Mul_DM_DMCons(a, cons) -> reversePush (d.A * cons.Transpose()) a
                      | Mul_DMCons_DM(cons, b) -> reversePush (cons.Transpose() * d.A) b
                      | Mul_Had_DM_DM(a, b) -> reversePush (d.A .* b.P) a; reversePush (d.A .* a.P) b
                      | Mul_Had_DM_DMCons(a, cons) -> reversePush (d.A .* cons) a
                      | Mul_DM_D(a, b) -> reversePush (d.A * b.P) a; reversePush ((d.A .* a.P).Sum()) b
                      | Mul_DM_DCons(a, cons) -> reversePush (d.A * cons) a
                      | Mul_DMCons_D(cons, b) -> reversePush ((d.A .* cons).Sum()) b
                      | Mul_Out_DV_DV(a, b) -> reversePush (d.A * b.P) a; reversePush (d.A.Transpose() * a.P) b
                      | Mul_Out_DV_DVCons(a, cons) -> reversePush (d.A * cons) a
                      | Mul_Out_DVCons_DV(cons, b) -> reversePush (d.A.Transpose() * cons) b
                      | Transpose_DM(a) -> reversePush (d.A.Transpose()) a
                      | Make_DM_ofD(a) -> a |> Array2D.iteri (fun i j v -> reversePush d.A.[i, j] v)
                      | Make_DM_ofDV(a) -> a |> Array.iteri (fun i v -> reversePush d.A.[i, *] v)
                      | AddItem_DM_D(a, i, j, b) -> reversePush d.A a; reversePush (d.A.[i, j]) b
  
negative.code:         | DMF(ap, at, ai)             -> let cp = fd(ap) in DMF(cp, df(cp, ap, at), ai)
          | DMR(ap,_,_,_,ai)            -> let cp = fd(ap) in DMR(cp, ref (DM.ZeroMN cp.Rows cp.Cols), r(a), ref 0u, ai)
  
      static member inline Op_DM_D (a, ff, fd, df, r) =
          match a with
          | DM(ap)                      -> D(ff(ap))
          | DMF(ap, at, ai)             -> let cp = fd(ap) in DF(cp, df(cp, ap, at), ai)
          | DMR(ap,_,_,_,ai)            -> let cp = fd(ap) in DR(cp, ref (D 0.), r(a), ref 0u, ai)
  
      static member inline Op_DM_DM_DM (a, b, ff, fd, df_da, df_db, df_dab, r_d_d, r_d_c, r_c_d) =
          match a with
          | DM(ap) ->
  