module Math.Algebra.Jack.HypergeoPQ
( hypergeoPQ, _allPartitions
) 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
i forall 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
_allPartitions :: Int -> [[Int]]
_allPartitions :: Int -> [[Int]]
_allPartitions Int
m = [[]] forall a. [a] -> [a] -> [a]
++ (forall a b. (a -> b) -> [a] -> [b]
map forall a. [a] -> [a]
reverse (forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[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