packages feed

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 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