Skip to content

Commit b307eb0

Browse files
committed
Add Random documentation.
1 parent e592b4c commit b307eb0

File tree

3 files changed

+42
-8
lines changed

3 files changed

+42
-8
lines changed

src/ArrayFire/Random.hs

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ module ArrayFire.Random
2222
( createRandomEngine
2323
, retainRandomEngine
2424
, setRandomEngine
25-
, getRandomEngine
25+
, getRandomEngineType
2626
, randomEngineSetSeed
2727
, getDefaultRandomEngine
2828
, setDefaultRandomEngineType
@@ -49,10 +49,14 @@ import ArrayFire.Internal.Defines
4949
import ArrayFire.Internal.Random
5050
import ArrayFire.FFI
5151

52+
-- | Create random number generator object.
5253
createRandomEngine
5354
:: Int
55+
-- ^ Initial seed value of random number generator
5456
-> RandomEngineType
57+
-- ^ Type of random engine to employ
5558
-> IO RandomEngine
59+
-- ^ Opaque RandomEngine handle
5660
createRandomEngine (fromIntegral -> n) typ =
5761
mask_ $ do
5862
ptr <-
@@ -62,39 +66,52 @@ createRandomEngine (fromIntegral -> n) typ =
6266
fptr <- newForeignPtr af_release_random_engine_finalizer ptr
6367
pure (RandomEngine fptr)
6468

69+
-- | Retains 'RandomEngine' reference
6570
retainRandomEngine
6671
:: RandomEngine
72+
-- ^ 'RandomEngine' to retain
6773
-> IO RandomEngine
74+
-- ^ Retained 'RandomEngine'
6875
retainRandomEngine =
6976
(`op1re` af_retain_random_engine)
7077

7178
foreign import ccall unsafe "af_random_engine_set_type_"
7279
af_random_engine_set_type_ :: AFRandomEngine -> AFRandomEngineType -> IO AFErr
7380

81+
-- | Sets RandomEngine to a new 'RandomEngineType'
7482
setRandomEngine
7583
:: RandomEngine
84+
-- ^ 'RandomEngine' as input
7685
-> RandomEngineType
86+
-- ^ 'RandomEngineType' to set 'RandomEngine' to
7787
-> IO ()
7888
setRandomEngine r t =
7989
r `inPlaceEng` (`af_random_engine_set_type_` (fromRandomEngine t))
8090

81-
getRandomEngine
91+
-- | Retrieves 'RandomEngine'
92+
getRandomEngineType
8293
:: RandomEngine
94+
-- ^ 'RandomEngine' argument
8395
-> IO RandomEngineType
84-
getRandomEngine r =
96+
-- ^ 'RandomEngineType' returned
97+
getRandomEngineType r =
8598
toRandomEngine <$>
8699
r `infoFromRandomEngine` af_random_engine_get_type
87100

88101
foreign import ccall unsafe "af_random_engine_set_seed_"
89102
af_random_engine_set_seed_ :: AFRandomEngine -> IntL -> IO AFErr
90103

104+
-- | Sets seed on 'RandomEngine'
91105
randomEngineSetSeed
92106
:: RandomEngine
107+
-- ^ 'RandomEngine' argument
93108
-> Int
109+
-- ^ Seed
94110
-> IO ()
95111
randomEngineSetSeed r t =
96112
r `inPlaceEng` (`af_random_engine_set_seed_` (fromIntegral t))
97113

114+
-- | Retrieve default 'RandomEngine'
98115
getDefaultRandomEngine
99116
:: IO RandomEngine
100117
getDefaultRandomEngine =
@@ -106,22 +123,28 @@ getDefaultRandomEngine =
106123
fptr <- newForeignPtr af_release_random_engine_finalizer ptr
107124
pure (RandomEngine fptr)
108125

126+
-- | Set defualt 'RandomEngine' type
109127
setDefaultRandomEngineType
110128
:: RandomEngineType
129+
-- ^ 'RandomEngine' type
111130
-> IO ()
112131
setDefaultRandomEngineType n =
113132
afCall (af_set_default_random_engine_type (fromRandomEngine n))
114133

134+
-- | Retrieve seed of 'RandomEngine'
115135
randomEngineGetSeed
116136
:: RandomEngine
137+
-- ^ RandomEngine argument
117138
-> IO Int
118139
randomEngineGetSeed r =
119140
fromIntegral <$>
120141
r `infoFromRandomEngine` af_random_engine_get_seed
121142

143+
-- | Set random seed
122144
setSeed :: Int -> IO ()
123145
setSeed = afCall . af_set_seed . fromIntegral
124146

147+
-- | Retrieve random seed
125148
getSeed :: IO Int
126149
getSeed = fromIntegral <$> afCall1 af_get_seed
127150

@@ -145,9 +168,11 @@ randEng dims f (RandomEngine fptr) = mask_ $
145168
n = fromIntegral (length dims)
146169
typ = afType (Proxy @ a)
147170

171+
-- | Generate random 'Array'
148172
rand
149173
:: forall a . AFType a
150174
=> [Int]
175+
-- ^ Dimensions
151176
-> (Ptr AFArray -> CUInt -> Ptr DimT -> AFDtype -> IO AFErr)
152177
-> IO (Array a)
153178
rand dims f = mask_ $ do
@@ -163,32 +188,42 @@ rand dims f = mask_ $ do
163188
n = fromIntegral (length dims)
164189
typ = afType (Proxy @ a)
165190

191+
-- | Generate random 'Array'
166192
randn
167193
:: forall a
168194
. AFType a
169195
=> [Int]
196+
-- ^ Dimensions of random array
170197
-> IO (Array a)
171198
randn dims = rand @a dims af_randn
172199

200+
-- | Generate random uniform 'Array'
173201
randu
174202
:: forall a . AFType a
175203
=> [Int]
204+
-- ^ Dimensions of random array
176205
-> IO (Array a)
177206
randu dims = rand @a dims af_randu
178207

208+
-- | Generate random 'Array' from uniform distribution
179209
randomUniform
180210
:: forall a . AFType a
181211
=> [Int]
212+
-- ^ Dimensions of random array
182213
-> RandomEngine
214+
-- ^ 'RandomEngine' argument
183215
-> IO (Array a)
184216
randomUniform dims eng =
185217
randEng @a dims af_random_uniform eng
186218

219+
-- | Generate random 'Array' from normal distribution
187220
randomNormal
188221
:: forall a
189222
. AFType a
190223
=> [Int]
224+
-- ^ Dimensions of random array
191225
-> RandomEngine
226+
-- ^ 'RandomEngine' argument
192227
-> IO (Array a)
193228
randomNormal dims eng =
194229
randEng @a dims af_random_normal eng

test/ArrayFire/FeaturesSpec.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
module ArrayFire.FeaturesSpec where
33

44
import ArrayFire
5-
65
import Test.Hspec
76

87
spec :: Spec

test/ArrayFire/RandomSpec.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@ spec =
1111
describe "Random engine spec" $ do
1212
it "Should create random engine" $ do
1313
(`shouldBe` Philox)
14-
=<< getRandomEngine
14+
=<< getRandomEngineType
1515
=<< createRandomEngine 5000 Philox
1616
(`shouldBe` Mersenne)
17-
=<< getRandomEngine
17+
=<< getRandomEngineType
1818
=<< createRandomEngine 5000 Mersenne
1919
(`shouldBe` ThreeFry)
20-
=<< getRandomEngine
20+
=<< getRandomEngineType
2121
=<< createRandomEngine 5000 ThreeFry
2222
it "Should set random engine" $ do
2323
r <- createRandomEngine 5000 ThreeFry
2424
setRandomEngine r Philox
25-
(`shouldBe` Philox) =<< getRandomEngine r
25+
(`shouldBe` Philox) =<< getRandomEngineType r
2626
it "Should set and get seed" $ do
2727
setSeed 100
2828
(`shouldBe` 100) =<< getSeed

0 commit comments

Comments
 (0)