anchor.diff:          |> trans [rules_old.letCSE] 
           |> fscodegen.fscodegenTopLevel
       printfn "symdiff gmm: %A" gmm
  +    //let matSlice = compiler.getMethodExpr "linalg" "vectorFoldNumber" |> transformDiff |> ctransformer.closureConversion |> ctransformer.anfConversion false  |> fscodegen.fscodegenTopLevel
  +    //printfn "symdiff matSlice: %A" matSlice
  +    //compiler.compileModuleGeneric "linalg" [] diffName (compileD false)
       ()
positive.code:   let diffBody = Diff body (Expr.Var(new Var("dx", typeof<Number>)))
    transformer.LambdaN(List.append inputs inputsd, diffBody |> symdiff)
  
  let test_symdiff () = 
      //printfn "symdiff: %A" (symdiff <@ fun (x: double) -> diff (1. * 2.) x @>)
      //printfn "symdiff2: %A" (symdiff <@ fun (x: double) -> diff (let v = 1. * 2. in v) x @>)
  
negative.code: open FSharp.Quotations
  open phase_based_optimizer
  open types
  open ccodegen
  
  let symdiff (exp: Expr): Expr = 
    exp
  