Safe Haskell | Safe-Infered |
---|
Reference implementation of operators on unvectorised parallel arrays.
- In this module we just used boxed vectors as the array representation. This won't be fast, but it means we can write the operators without needing type class dictionaries such as PA. This makes them much easier to use as reference code.
- The operators should also all do bounds checks, sanity checks, and give nice error messages if something is wrong. The ideas is that this code can be run side-by-side production code during debugging.
- type PArray a = Vector a
- valid :: PArray a -> Bool
- nf :: PArray a -> ()
- empty :: PArray a
- singleton :: a -> PArray a
- singletonl :: PArray a -> PArray (PArray a)
- replicate :: Int -> a -> PArray a
- replicatel :: PArray Int -> PArray a -> PArray (PArray a)
- replicates :: Segd -> PArray a -> PArray a
- replicates' :: PArray Int -> PArray a -> PArray a
- append :: PArray a -> PArray a -> PArray a
- appendl :: PArray (PArray a) -> PArray (PArray a) -> PArray (PArray a)
- concat :: PArray (PArray a) -> PArray a
- concatl :: PArray (PArray (PArray a)) -> PArray (PArray a)
- unconcat :: PArray (PArray a) -> PArray b -> PArray (PArray b)
- nestUSegd :: Segd -> PArray a -> PArray (PArray a)
- length :: PArray a -> Int
- lengthl :: PArray (PArray a) -> PArray Int
- index :: PArray a -> Int -> a
- indexl :: PArray (PArray a) -> PArray Int -> PArray a
- extract :: PArray a -> Int -> Int -> PArray a
- extracts :: Vector (PArray a) -> SSegd -> PArray a
- extracts' :: Vector (PArray a) -> PArray Int -> PArray Int -> PArray Int -> PArray a
- slice :: Int -> Int -> PArray a -> PArray a
- slicel :: PArray Int -> PArray Int -> PArray (PArray a) -> PArray (PArray a)
- takeUSegd :: PArray (PArray a) -> Segd
- pack :: PArray a -> PArray Bool -> PArray a
- packl :: PArray (PArray a) -> PArray (PArray Bool) -> PArray (PArray a)
- packByTag :: PArray a -> Array Tag -> Tag -> PArray a
- combine2 :: Sel2 -> PArray a -> PArray a -> PArray a
- enumFromTo :: Int -> Int -> PArray Int
- enumFromTol :: PArray Int -> PArray Int -> PArray (PArray Int)
- zip :: PArray a -> PArray b -> PArray (a, b)
- zipl :: PArray (PArray a) -> PArray (PArray b) -> PArray (PArray (a, b))
- unzip :: PArray (a, b) -> (PArray a, PArray b)
- unzipl :: PArray (PArray (a, b)) -> PArray (PArray a, PArray b)
- fromVector :: Vector a -> PArray a
- toVector :: PArray a -> Vector a
- fromList :: [a] -> PArray a
- toList :: PArray a -> [a]
- fromUArray :: Elt a => Array a -> PArray a
- toUArray :: Elt a => PArray a -> Array a
- fromUArray2 :: (Elt a, Elt b) => Array (a, b) -> PArray (a, b)
Documentation
Constructors
singletonl :: PArray a -> PArray (PArray a)Source
O(n). Produce an array of singleton arrays.
replicate :: Int -> a -> PArray aSource
O(n). Define an array of the given size, that maps all elements to the same value.
replicates :: Segd -> PArray a -> PArray aSource
O(sum lengths). Segmented replicate.
replicates' :: PArray Int -> PArray a -> PArray aSource
O(sum lengths). Wrapper for segmented replicate that takes replication counts
and uses them to build the Segd
.
unconcat :: PArray (PArray a) -> PArray b -> PArray (PArray b)Source
Impose a nesting structure on a flat array
nestUSegd :: Segd -> PArray a -> PArray (PArray a)Source
Create a nested array from a segment descriptor and some flat data.
The segment descriptor must represent as many elements as present
in the flat data array, else error
Projections
indexl :: PArray (PArray a) -> PArray Int -> PArray aSource
Lookup a several elements from several source arrays.
slice :: Int -> Int -> PArray a -> PArray aSource
Extract a range of elements from an arrary.
Like extract
but with the parameters in a different order.
slicel :: PArray Int -> PArray Int -> PArray (PArray a) -> PArray (PArray a)Source
Extract some slices from some arrays. The arrays of starting indices and lengths must themselves have the same length.
takeUSegd :: PArray (PArray a) -> SegdSource
Take the segment descriptor from a nested array. This can cause index space overflow if the number of elements in the result does not can not be represented by a single machine word.
Pack and Combine
pack :: PArray a -> PArray Bool -> PArray aSource
Select the elements of an array that have their tag set to True.
Enumerations
Tuples
zip :: PArray a -> PArray b -> PArray (a, b)Source
O(n). Zip a pair of arrays into an array of pairs.
unzip :: PArray (a, b) -> (PArray a, PArray b)Source
O(n). Unzip an array of pairs into a pair of arrays.