anchor.diff:          let U = Matrix<float>(r,r)
           let S = m.Copy()
           let Vt = Matrix<float>(c,c)
  -        SVD.DecomposeInPlace(U, S, Vt)
  -        U, S, Vt
  +        if SVD.DecomposeInPlace(U, S, Vt) then
  +            Some (U, S, Vt)
  +        else
  +            None
   
       static member Decompose(m : Matrix<float32>) =
           let r = m.SY
  
positive.code:                 else
  
                      if (iterations >= 30) then
                          failwith "no convergence after 30 iterations"
  
                      // shift from bottom 2 x 2 minor
                      x <- w l //B.[l,l];
                      nm <- k - 1;
                      y <- w nm //B.[nm, nm];
  
                      g <- rvl nm;
                      h <- rvl k;
                      f <- ((y - z) * (y + z) + (g - h) * (g + h)) / (two * h * y)
  
negative.code:         let U = Array2D.zeroCreate r r
          let S = Array2D.copy m
          let Vt = Array2D.zeroCreate c c
          if SVD.DecomposeInPlace(U, S, Vt) then
              Some (U, S, Vt)
          else
              None
          
  
      static member Decompose(m : M22d) =
          let mutable S = m
          let mutable U = M22d()
          let mutable Vt = M22d()
          let mutable suc = false
          tensor {
              let! pS = &S
              let! pU = &U
              let! pVt = &Vt
              suc <- SVD.DecomposeInPlace(pU, pS, pVt)
          }
          if suc then
              Some (U, S, Vt)
          else
              None
  
      static member Decompose(m : M23d) =
          let mutable S = m
          let mutable U = M22d()
          let mutable Vt = M33d()
          let mutable suc = false
          tensor {
              let! pS = &S
              let! pU = &U
              let! pVt = &Vt
              suc <- SVD.DecomposeInPlace(pU, pS, pVt)
          }
          if suc then
              Some (U, S, Vt)
          else
              None
  
      static member Decompose(m : M33d) =
          let mutable S = m
          let mutable U = M33d()
          let mutable Vt = M33d()
          let mutable suc = false
          tensor {
              let! pS = &S
              let! pU = &U
              let! pVt = &Vt
              suc <- SVD.DecomposeInPlace(pU, pS, pVt)
          }
          if suc then
              Some (U, S, Vt)
          else
              None
  
      static member Decompose(m : M34d) =
          let mutable S = m
          let mutable U = M33d()
          let mutable Vt = M44d()
          let mutable suc = false
          tensor {
              let! pS = &S
              let! pU = &U
              let! pVt = &Vt
              suc <- SVD.DecomposeInPlace(pU, pS, pVt)
          }
          if suc then
              Some (U, S, Vt)
          else
              None
  
      static member Decompose(m : M44d) =
          let mutable S = m
          let mutable U = M44d()
          let mutable Vt = M44d()
          let mutable suc = false
          tensor {
              let! pS = &S
              let! pU = &U
              let! pVt = &Vt
              suc <- SVD.DecomposeInPlace(pU, pS, pVt)
          }
          if suc then
              Some (U, S, Vt)
          else
              None
  
  
      static member Decompose(m : M22f) =
          let mutable S = m
          let mutable U = M22f()
          let mutable Vt = M22f()
          let mutable suc = false
          tensor {
              let! pS = &S
              let! pU = &U
              let! pVt = &Vt
              suc <- SVD.DecomposeInPlace(pU, pS, pVt)
          }
          if suc then
              Some (U, S, Vt)
          else
              None
  
      static member Decompose(m : M23f) =
          let mutable S = m
          let mutable U = M22f()
          let mutable Vt = M33f()
          let mutable suc = false
          tensor {
              let! pS = &S
              let! pU = &U
              let! pVt = &Vt
              suc <- SVD.DecomposeInPlace(pU, pS, pVt)
          }
          if suc then
              Some (U, S, Vt)
          else
              None
  
      static member Decompose(m : M33f) =
          let mutable S = m
          let mutable U = M33f()
          let mutable Vt = M33f()
          let mutable suc = false
          tensor {
              let! pS = &S
              let! pU = &U
              let! pVt = &Vt
              suc <- SVD.DecomposeInPlace(pU, pS, pVt)
          }
          if suc then
              Some (U, S, Vt)
          else
              None
  
      static member Decompose(m : M34f) =
          let mutable S = m
          let mutable U = M33f()
          let mutable Vt = M44f()
          let mutable suc = false
          tensor {
              let! pS = &S
              let! pU = &U
              let! pVt = &Vt
              suc <- SVD.DecomposeInPlace(pU, pS, pVt)
          }
          if suc then
              Some (U, S, Vt)
          else
              None
  
      static member Decompose(m : M44f) =
          let mutable S = m
          let mutable U = M44f()
          let mutable Vt = M44f()
          let mutable suc = false
          tensor {
              let! pS = &S
              let! pU = &U
              let! pVt = &Vt
              suc <- SVD.DecomposeInPlace(pU, pS, pVt)
          }
          if suc then
              Some (U, S, Vt)
          else
              None
          
  
  
  