module Phonetic.Languages.Filters (
intervalNRealFrac
, unsafeTransfer1I5
, transfer1IEq3
, unsafeRearrangeIG
, unsafeRearrangeIGArr
, unsafeRearrangeIGV
, unsafeSwapIWithMaxI
, unsafeSwapVecIWithMaxI
) where
import Data.Filters.Basic
import GHC.Arr
import CaseBi.Arr
import Data.Monoid (mappend)
import Data.List (sort)
unsafeRearrangeIG
:: (RealFrac b, Integral c) => b
-> b
-> c
-> [(c,c)]
-> b
-> b
unsafeRearrangeIG :: b -> b -> c -> [(c, c)] -> b -> b
unsafeRearrangeIG b
minE b
maxE c
n [(c, c)]
xs b
x
| b
minE b -> b -> Bool
forall a. Eq a => a -> a -> Bool
== b
maxE = b
x
| Bool
otherwise = b
x b -> b -> b
forall a. Num a => a -> a -> a
+ c -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral (c -> [(c, c)] -> c -> c
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstL' c
n0 [(c, c)]
xs c
n0 c -> c -> c
forall a. Num a => a -> a -> a
- c
n0) b -> b -> b
forall a. Num a => a -> a -> a
* (b
maxE b -> b -> b
forall a. Num a => a -> a -> a
- b
minE) b -> b -> b
forall a. Fractional a => a -> a -> a
/ c -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral c
n
where n0 :: c
n0 = b -> b -> c -> b -> c
forall b c. (RealFrac b, Integral c) => b -> b -> c -> b -> c
intervalNRealFrac b
minE b
maxE c
n b
x
unsafeRearrangeIGArr
:: (RealFrac b, Integral c) => b
-> b
-> c
-> Array Int (c,c)
-> b
-> b
unsafeRearrangeIGArr :: b -> b -> c -> Array Int (c, c) -> b -> b
unsafeRearrangeIGArr b
minE b
maxE c
n Array Int (c, c)
arr b
x
| b
minE b -> b -> Bool
forall a. Eq a => a -> a -> Bool
== b
maxE = b
x
| Bool
otherwise = b
x b -> b -> b
forall a. Num a => a -> a -> a
+ c -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral ((c, Array Int (c, c)) -> c -> c
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (c
n0, Array Int (c, c)
arr) c
n0 c -> c -> c
forall a. Num a => a -> a -> a
- c
n0) b -> b -> b
forall a. Num a => a -> a -> a
* (b
maxE b -> b -> b
forall a. Num a => a -> a -> a
- b
minE) b -> b -> b
forall a. Fractional a => a -> a -> a
/ c -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral c
n
where n0 :: c
n0 = b -> b -> c -> b -> c
forall b c. (RealFrac b, Integral c) => b -> b -> c -> b -> c
intervalNRealFrac b
minE b
maxE c
n b
x
unsafeRearrangeIGV
:: (RealFrac b, Integral c, Ord c) => b
-> b
-> c
-> [c]
-> b
-> b
unsafeRearrangeIGV :: b -> b -> c -> [c] -> b -> b
unsafeRearrangeIGV b
minE b
maxE c
n [c]
xs = b -> b -> c -> Array Int (c, c) -> b -> b
forall b c.
(RealFrac b, Integral c) =>
b -> b -> c -> Array Int (c, c) -> b -> b
unsafeRearrangeIGArr b
minE b
maxE c
n Array Int (c, c)
arr
where ts :: [c]
ts = [c] -> [c]
forall a. Eq a => [a] -> [a]
f ([c] -> [c]) -> ([c] -> [c]) -> [c] -> [c]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [c] -> [c]
forall a. Ord a => [a] -> [a]
sort ([c] -> [c]) -> ([c] -> [c]) -> [c] -> [c]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (c -> Bool) -> [c] -> [c]
forall a. (a -> Bool) -> [a] -> [a]
filter (c -> c -> Bool
forall a. Ord a => a -> a -> Bool
<c
n) ([c] -> [c]) -> [c] -> [c]
forall a b. (a -> b) -> a -> b
$ [c]
xs
f :: [a] -> [a]
f (a
t:a
u:[a]
ts)
| a
t a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
u = [a] -> [a]
f (a
ta -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
ts)
| Bool
otherwise = a
ta -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a] -> [a]
f(a
ua -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
ts)
f [a]
ts = [a]
ts
ks :: [(c, c)]
ks = [c] -> [c] -> [(c, c)]
forall a b. [a] -> [b] -> [(a, b)]
zip [c]
ts ([c] -> [c]
forall a. [a] -> [a]
cycle [c
n]) [(c, c)] -> [(c, c)] -> [(c, c)]
forall a. Monoid a => a -> a -> a
`mappend` [(c
n,[c] -> c
forall a. [a] -> a
head [c]
xs)]
l :: Int
l = [c] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [c]
ts
arr :: Array Int (c, c)
arr = (Int, Int) -> [(c, c)] -> Array Int (c, c)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
l) [(c, c)]
ks
{-# INLINE unsafeRearrangeIGV #-}
unsafeSwapIWithMaxI
:: (RealFrac b, Integral c) => b
-> b
-> c
-> c
-> b
-> b
unsafeSwapIWithMaxI :: b -> b -> c -> c -> b -> b
unsafeSwapIWithMaxI b
minE b
maxE c
n c
k = b -> b -> c -> [(c, c)] -> b -> b
forall b c.
(RealFrac b, Integral c) =>
b -> b -> c -> [(c, c)] -> b -> b
unsafeRearrangeIG b
minE b
maxE c
n [(c
k,c
n),(c
n,c
k)]
{-# INLINE unsafeSwapIWithMaxI #-}
unsafeSwapVecIWithMaxI
:: (RealFrac b, Integral c, Ord c) => b
-> b
-> c
-> [c]
-> b
-> b
unsafeSwapVecIWithMaxI :: b -> b -> c -> [c] -> b -> b
unsafeSwapVecIWithMaxI = b -> b -> c -> [c] -> b -> b
forall b c.
(RealFrac b, Integral c, Ord c) =>
b -> b -> c -> [c] -> b -> b
unsafeRearrangeIGV
{-# INLINE unsafeSwapVecIWithMaxI #-}
{-# DEPRECATED unsafeSwapVecIWithMaxI "Is provided here for the compatibility with the previous ones versions. Please, use just 'unsafeRearrangeIGV' instead" #-}