module Math.Algebra.Jack.GPochhammer where import Math.Algebra.Jack (zonal) gpochhammer :: Fractional a => a -> [Int] -> a -> a gpochhammer :: forall a. Fractional a => a -> [Int] -> a -> a gpochhammer a a [Int] kappa a alpha = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a product forall a b. (a -> b) -> a -> b $ forall a b. (a -> b) -> [a] -> [b] map (\Int i -> forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a product forall a b. (a -> b) -> a -> b $ forall a b. (a -> b) -> [a] -> [b] map (\Int j -> a a forall a. Num a => a -> a -> a - (forall a b. (Integral a, Num b) => a -> b fromIntegral Int i forall a. Num a => a -> a -> a - a 1)forall a. Fractional a => a -> a -> a /a alpha forall a. Num a => a -> a -> a + forall a b. (Integral a, Num b) => a -> b fromIntegral Int j forall a. Num a => a -> a -> a -a 1) [Int 1 .. [Int] kappa forall a. [a] -> Int -> a !! (Int iforall a. Num a => a -> a -> a -Int 1)]) [Int 1 .. forall (t :: * -> *) a. Foldable t => t a -> Int length [Int] kappa] hcoeff :: Fractional a => [a] -> [a] -> [Int] -> a -> a hcoeff :: forall a. Fractional a => [a] -> [a] -> [Int] -> a -> a hcoeff [a] a [a] b [Int] kappa a alpha = a numerator forall a. Fractional a => a -> a -> a / a denominator forall a. Fractional a => a -> a -> a / forall a b. (Integral a, Num b) => a -> b fromIntegral (forall {a}. (Num a, Enum a) => a -> a factorial (forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a sum [Int] kappa)) where factorial :: a -> a factorial a n = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a product [a 1 .. a n] numerator :: a numerator = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a product forall a b. (a -> b) -> a -> b $ forall a b. (a -> b) -> [a] -> [b] map (\a x -> forall a. Fractional a => a -> [Int] -> a -> a gpochhammer a x [Int] kappa a alpha) [a] a denominator :: a denominator = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a product forall a b. (a -> b) -> a -> b $ forall a b. (a -> b) -> [a] -> [b] map (\a x -> forall a. Fractional a => a -> [Int] -> a -> a gpochhammer a x [Int] kappa a alpha) [a] b testHypergeo :: Double testHypergeo :: Double testHypergeo = let a :: [Double] a = [Double 2,Double 3] in let b :: [Double] b = [Double 4] in let coeff :: [Int] -> Double coeff [Int] kappa = forall a. Fractional a => [a] -> [a] -> [Int] -> a -> a hcoeff [Double] a [Double] b [Int] kappa Double 2 in let kappas :: [[Int]] kappas = [[], [Int 1], [Int 1,Int 1], [Int 2]] in let x :: [Double] x = [Double 5,Double 6] in forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a sum forall a b. (a -> b) -> a -> b $ forall a b. (a -> b) -> [a] -> [b] map (\[Int] kappa -> [Int] -> Double coeff [Int] kappa forall a. Num a => a -> a -> a * forall a. (Fractional a, Ord a) => [a] -> [Int] -> a zonal [Double] x [Int] kappa) [[Int]] kappas _allPartitions :: Int -> [[Int]] _allPartitions :: Int -> [[Int]] _allPartitions Int m = forall a. [a] -> a last [[[Int]]] ps where ps :: [[[Int]]] ps = [] forall a. a -> [a] -> [a] : forall a b. (a -> b) -> [a] -> [b] map Int -> [[Int]] parts [Int 1..Int m] parts :: Int -> [[Int]] parts Int n = [Int n] forall a. a -> [a] -> [a] : [Int x forall a. a -> [a] -> [a] : [Int] p | Int x <- [Int 1..Int n], [Int] p <- [[[Int]]] ps forall a. [a] -> Int -> a !! (Int n forall a. Num a => a -> a -> a - Int x), Int x forall a. Ord a => a -> a -> Bool <= forall a. [a] -> a head [Int] p] hypergeoPQ :: (Fractional a, Ord a) => Int -> [a] -> [a] -> [a] -> a hypergeoPQ :: forall a. (Fractional a, Ord a) => Int -> [a] -> [a] -> [a] -> a hypergeoPQ Int m [a] a [a] b [a] x = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a sum forall a b. (a -> b) -> a -> b $ forall a b. (a -> b) -> [a] -> [b] map (\[Int] kappa -> [Int] -> a coeff [Int] kappa forall a. Num a => a -> a -> a * forall a. (Fractional a, Ord a) => [a] -> [Int] -> a zonal [a] x [Int] kappa) [[Int]] kappas where kappas :: [[Int]] kappas = forall a. (a -> Bool) -> [a] -> [a] filter (\[Int] kap -> forall (t :: * -> *) a. Foldable t => t a -> Int length [Int] kap forall a. Ord a => a -> a -> Bool <= forall (t :: * -> *) a. Foldable t => t a -> Int length [a] x) (Int -> [[Int]] _allPartitions Int m) coeff :: [Int] -> a coeff [Int] kappa = forall a. Fractional a => [a] -> [a] -> [Int] -> a -> a hcoeff [a] a [a] b [Int] kappa a 2