anchor.diff:                          | AcosT(a) -> reset (a::tt)
                           | AtanT(a) -> reset (a::tt)
                           | NewT -> reset tt
  +                        | OpUnaryT(a,_) -> reset (a::tt)
  +                        | OpBinaryTT(a,b,_) -> reset (a::b::tt)
  +                        | OpBinaryTC(a,_,_) -> reset (a::tt)
  +                        | OpBinaryCT(_,b,_) -> reset (b::tt)
                       else reset tt
                   | _ -> reset tt
           reset [t]
  
positive.code:     | AcosT of Tensor
      | AtanT of Tensor
      | NewT
  
negative.code:                         | AcosT(a) -> push (check(-td / Tensor.Sqrt(1. - a.primal*a.primal), a) :: tt)
                          | AtanT(a) -> push (check(td / (1. + a.primal*a.primal), a) :: tt)
                          | NewT -> push tt
                          | OpUnaryT(a, rev) -> push (check(rev(td, a.primal), a) :: tt)
                          | OpBinaryTT(a, b, rev) -> let ad, bd = rev(td, a.primal, b.primal) in push (check(ad, a) :: check(bd, b) :: tt)
                          | OpBinaryTC(a, b, rev) -> let ad = rev(td, a.primal, b) in push (check(ad, a) :: tt)
                          | OpBinaryCT(a, b, rev) -> let bd = rev(td, a, b.primal) in push (check(bd, b) :: tt)
                      else push tt
                  | _ -> push tt
          push [(value, t)]
  