#include "fusion-phases.h"
module Data.Array.Parallel.Unlifted.Parallel.Extracts
(
indexsFromVector
, indexsFromVectorsUPVSegd
, extractsFromNestedUPSSegd
, extractsFromVectorsUPSSegd
, extractsFromVectorsUPVSegd)
where
import Data.Array.Parallel.Unlifted.Parallel.UPSSegd (UPSSegd)
import Data.Array.Parallel.Unlifted.Parallel.UPVSegd (UPVSegd)
import Data.Array.Parallel.Unlifted.Sequential.Vector as Seq
import Data.Array.Parallel.Unlifted.Vectors (Vectors)
import qualified Data.Array.Parallel.Unlifted.Parallel.UPSSegd as UPSSegd
import qualified Data.Array.Parallel.Unlifted.Parallel.UPVSegd as UPVSegd
import qualified Data.Array.Parallel.Unlifted.Sequential.UVSegd as UVSegd
import qualified Data.Array.Parallel.Unlifted.Vectors as US
import qualified Data.Array.Parallel.Unlifted.Stream as US
import qualified Data.Array.Parallel.Unlifted.Sequential as Seq
import qualified Data.Vector as V
indexsFromVector
:: Unbox a
=> Vector a -> Vector Int -> Vector a
indexsFromVector = Seq.indexsFromVector
indexsFromVectorsUPVSegd
:: (Unbox a, US.Unboxes a)
=> Vectors a -> UPVSegd -> Vector (Int, Int) -> Vector a
indexsFromVectorsUPVSegd vectors upvsegd vsrcixs
= let
!vsegids = UPVSegd.takeVSegidsRedundant upvsegd
!upssegd = UPVSegd.takeUPSSegdRedundant upvsegd
!ussegd = UPSSegd.takeUSSegd upssegd
in Seq.unstream
$ US.streamElemsFromVectors vectors
$ US.streamSrcIxsThroughUSSegd ussegd
$ US.streamSrcIxsThroughVSegids vsegids
$ Seq.stream vsrcixs
extractsFromNestedUPSSegd
:: Unbox a
=> UPSSegd -> V.Vector (Vector a) -> Vector a
extractsFromNestedUPSSegd upssegd vectors
= Seq.unstream
$ US.streamSegsFromNestedUSSegd
vectors
(UPSSegd.takeUSSegd upssegd)
extractsFromVectorsUPSSegd
:: (Unbox a, US.Unboxes a)
=> UPSSegd
-> Vectors a
-> Vector a
extractsFromVectorsUPSSegd upssegd vectors
= Seq.extractsFromVectorsUSSegd
(UPSSegd.takeUSSegd upssegd)
vectors
extractsFromVectorsUPVSegd
:: (Unbox a, US.Unboxes a)
=> UPVSegd
-> Vectors a
-> Vector a
extractsFromVectorsUPVSegd upvsegd vectors
= Seq.unstream
$ US.streamSegsFromVectorsUVSegd vectors
$ UVSegd.mkUVSegd
(UPVSegd.takeVSegidsRedundant upvsegd)
(UPSSegd.takeUSSegd $ UPVSegd.takeUPSSegdRedundant upvsegd)