diagrams-solve 0.2 → 0.3
raw patch · 3 files changed
+23/−13 lines, 3 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
- Diagrams.Solve.Tridiagonal: solveCyclicTriDiagonal :: Fractional a => [a] -> NonEmpty a -> NonEmpty a -> NonEmpty a -> a -> a -> NonEmpty a
+ Diagrams.Solve.Tridiagonal: solveCyclicTriDiagonal :: Fractional a => NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a -> a -> a -> NonEmpty a
- Diagrams.Solve.Tridiagonal: solveTriDiagonal :: Fractional a => [a] -> NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a
+ Diagrams.Solve.Tridiagonal: solveTriDiagonal :: Fractional a => NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a
Files
- CHANGES.markdown +5/−0
- diagrams-solve.cabal +3/−3
- src/Diagrams/Solve/Tridiagonal.hs +15/−10
CHANGES.markdown view
@@ -1,3 +1,8 @@+* 0.3 (27 June 2026)++ - Fix more pattern-match warnings, change additional list parameters+ to `NonEmpty` in `solveTriDiagonal` and `solveCyclicTridiagonal`.+ * 0.2 (2 May 2026) - Fixes for various pattern-match warnings
diagrams-solve.cabal view
@@ -1,5 +1,5 @@ name: diagrams-solve-version: 0.2+version: 0.3 synopsis: Pure Haskell solver routines used by diagrams description: Pure Haskell solver routines used by the diagrams project. Currently includes finding real roots@@ -23,7 +23,7 @@ library exposed-modules: Diagrams.Solve.Polynomial, Diagrams.Solve.Tridiagonal- build-depends: base >=4.5 && < 5.0+ build-depends: base >=4.5 && < 5 hs-source-dirs: src default-language: Haskell2010 @@ -33,7 +33,7 @@ -- other-modules: Instances hs-source-dirs: tests default-language: Haskell2010- build-depends: base >= 4.2 && < 5.0,+ build-depends: base >= 4.2 && < 5, diagrams-solve, tasty >= 0.10 && < 1.6, tasty-quickcheck >= 0.8 && < 0.12
src/Diagrams/Solve/Tridiagonal.hs view
@@ -19,22 +19,27 @@ -- where 'A' is an 'n' by 'n' matrix with 'bs' as the main diagonal -- and 'as' the diagonal below and 'cs' the diagonal above. See: -- <http://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm>-solveTriDiagonal :: Fractional a => [a] -> NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a+solveTriDiagonal :: Fractional a => NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a solveTriDiagonal as (b0 :| bs) (c0 :| cs) (d0 :| ds) = h cs' ds' where cs' = c0 / b0 : f cs' as bs cs- f _ [_] _ _ = []- f (c' : cs') (a : as) (b : bs) (c : cs) = c / (b - c' * a) : f cs' as bs cs- f _ _ _ _ = error "solveTriDiagonal.f: impossible!"+ f [] _ _ _ = []+ f _ (_ :| []) _ _ = []+ f _ _ [] _ = []+ f _ _ _ [] = []+ f (c' : cs') (a :| (a' : as)) (b : bs) (c : cs) = c / (b - c' * a) : f cs' (a' :| as) bs cs - ds' = d0 / b0 : g ds' as bs cs' ds+ ds' = d0 / b0 :| g (NE.toList ds') (NE.toList as) bs cs' ds+ g [] _ _ _ _ = [] g _ [] _ _ _ = []+ g _ _ [] _ _ = []+ g _ _ _ [] _ = []+ g _ _ _ _ [] = [] g (d' : ds') (a : as) (b : bs) (c' : cs') (d : ds) = (d - d' * a) / (b - c' * a) : g ds' as bs cs' ds- g _ _ _ _ _ = error "solveTriDiagonal.g: impossible!" - h _ [d] = d :| []- h (c : cs) (d : ds) = let xs@(x :| _) = h cs ds in d - c * x <| xs- h _ _ = error "solveTriDiagonal.h: impossible!"+ h _ (d :| []) = d :| []+ h [] (d :| _) = d :| []+ h (c : cs) (d :| (d' : ds)) = let xs@(x :| _) = h cs (d' :| ds) in d - c * x <| xs -- Helper that applies the passed function only to the last element of a list modifyLast :: (a -> a) -> [a] -> [a]@@ -54,7 +59,7 @@ -- | Solves a system similar to the tri-diagonal system using a special case -- of the Sherman-Morrison formula (<http://en.wikipedia.org/wiki/Sherman-Morrison_formula>). -- This code is based on /Numerical Recpies in C/'s @cyclic@ function in section 2.7.-solveCyclicTriDiagonal :: Fractional a => [a] -> NonEmpty a -> NonEmpty a -> NonEmpty a -> a -> a -> NonEmpty a+solveCyclicTriDiagonal :: Fractional a => NonEmpty a -> NonEmpty a -> NonEmpty a -> NonEmpty a -> a -> a -> NonEmpty a solveCyclicTriDiagonal as (b0 :| bs) cs ds alpha beta = NE.zipWith ((+) . (fact *)) zs xs where gamma = -b0