@@ -22,7 +22,7 @@ module ArrayFire.Random
22
22
( createRandomEngine
23
23
, retainRandomEngine
24
24
, setRandomEngine
25
- , getRandomEngine
25
+ , getRandomEngineType
26
26
, randomEngineSetSeed
27
27
, getDefaultRandomEngine
28
28
, setDefaultRandomEngineType
@@ -49,10 +49,14 @@ import ArrayFire.Internal.Defines
49
49
import ArrayFire.Internal.Random
50
50
import ArrayFire.FFI
51
51
52
+ -- | Create random number generator object.
52
53
createRandomEngine
53
54
:: Int
55
+ -- ^ Initial seed value of random number generator
54
56
-> RandomEngineType
57
+ -- ^ Type of random engine to employ
55
58
-> IO RandomEngine
59
+ -- ^ Opaque RandomEngine handle
56
60
createRandomEngine (fromIntegral -> n) typ =
57
61
mask_ $ do
58
62
ptr <-
@@ -62,39 +66,52 @@ createRandomEngine (fromIntegral -> n) typ =
62
66
fptr <- newForeignPtr af_release_random_engine_finalizer ptr
63
67
pure (RandomEngine fptr)
64
68
69
+ -- | Retains 'RandomEngine' reference
65
70
retainRandomEngine
66
71
:: RandomEngine
72
+ -- ^ 'RandomEngine' to retain
67
73
-> IO RandomEngine
74
+ -- ^ Retained 'RandomEngine'
68
75
retainRandomEngine =
69
76
(`op1re` af_retain_random_engine)
70
77
71
78
foreign import ccall unsafe " af_random_engine_set_type_"
72
79
af_random_engine_set_type_ :: AFRandomEngine -> AFRandomEngineType -> IO AFErr
73
80
81
+ -- | Sets RandomEngine to a new 'RandomEngineType'
74
82
setRandomEngine
75
83
:: RandomEngine
84
+ -- ^ 'RandomEngine' as input
76
85
-> RandomEngineType
86
+ -- ^ 'RandomEngineType' to set 'RandomEngine' to
77
87
-> IO ()
78
88
setRandomEngine r t =
79
89
r `inPlaceEng` (`af_random_engine_set_type_` (fromRandomEngine t))
80
90
81
- getRandomEngine
91
+ -- | Retrieves 'RandomEngine'
92
+ getRandomEngineType
82
93
:: RandomEngine
94
+ -- ^ 'RandomEngine' argument
83
95
-> IO RandomEngineType
84
- getRandomEngine r =
96
+ -- ^ 'RandomEngineType' returned
97
+ getRandomEngineType r =
85
98
toRandomEngine <$>
86
99
r `infoFromRandomEngine` af_random_engine_get_type
87
100
88
101
foreign import ccall unsafe " af_random_engine_set_seed_"
89
102
af_random_engine_set_seed_ :: AFRandomEngine -> IntL -> IO AFErr
90
103
104
+ -- | Sets seed on 'RandomEngine'
91
105
randomEngineSetSeed
92
106
:: RandomEngine
107
+ -- ^ 'RandomEngine' argument
93
108
-> Int
109
+ -- ^ Seed
94
110
-> IO ()
95
111
randomEngineSetSeed r t =
96
112
r `inPlaceEng` (`af_random_engine_set_seed_` (fromIntegral t))
97
113
114
+ -- | Retrieve default 'RandomEngine'
98
115
getDefaultRandomEngine
99
116
:: IO RandomEngine
100
117
getDefaultRandomEngine =
@@ -106,22 +123,28 @@ getDefaultRandomEngine =
106
123
fptr <- newForeignPtr af_release_random_engine_finalizer ptr
107
124
pure (RandomEngine fptr)
108
125
126
+ -- | Set defualt 'RandomEngine' type
109
127
setDefaultRandomEngineType
110
128
:: RandomEngineType
129
+ -- ^ 'RandomEngine' type
111
130
-> IO ()
112
131
setDefaultRandomEngineType n =
113
132
afCall (af_set_default_random_engine_type (fromRandomEngine n))
114
133
134
+ -- | Retrieve seed of 'RandomEngine'
115
135
randomEngineGetSeed
116
136
:: RandomEngine
137
+ -- ^ RandomEngine argument
117
138
-> IO Int
118
139
randomEngineGetSeed r =
119
140
fromIntegral <$>
120
141
r `infoFromRandomEngine` af_random_engine_get_seed
121
142
143
+ -- | Set random seed
122
144
setSeed :: Int -> IO ()
123
145
setSeed = afCall . af_set_seed . fromIntegral
124
146
147
+ -- | Retrieve random seed
125
148
getSeed :: IO Int
126
149
getSeed = fromIntegral <$> afCall1 af_get_seed
127
150
@@ -145,9 +168,11 @@ randEng dims f (RandomEngine fptr) = mask_ $
145
168
n = fromIntegral (length dims)
146
169
typ = afType (Proxy @ a)
147
170
171
+ -- | Generate random 'Array'
148
172
rand
149
173
:: forall a . AFType a
150
174
=> [Int ]
175
+ -- ^ Dimensions
151
176
-> (Ptr AFArray -> CUInt -> Ptr DimT -> AFDtype -> IO AFErr )
152
177
-> IO (Array a )
153
178
rand dims f = mask_ $ do
@@ -163,32 +188,42 @@ rand dims f = mask_ $ do
163
188
n = fromIntegral (length dims)
164
189
typ = afType (Proxy @ a)
165
190
191
+ -- | Generate random 'Array'
166
192
randn
167
193
:: forall a
168
194
. AFType a
169
195
=> [Int ]
196
+ -- ^ Dimensions of random array
170
197
-> IO (Array a )
171
198
randn dims = rand @ a dims af_randn
172
199
200
+ -- | Generate random uniform 'Array'
173
201
randu
174
202
:: forall a . AFType a
175
203
=> [Int ]
204
+ -- ^ Dimensions of random array
176
205
-> IO (Array a )
177
206
randu dims = rand @ a dims af_randu
178
207
208
+ -- | Generate random 'Array' from uniform distribution
179
209
randomUniform
180
210
:: forall a . AFType a
181
211
=> [Int ]
212
+ -- ^ Dimensions of random array
182
213
-> RandomEngine
214
+ -- ^ 'RandomEngine' argument
183
215
-> IO (Array a )
184
216
randomUniform dims eng =
185
217
randEng @ a dims af_random_uniform eng
186
218
219
+ -- | Generate random 'Array' from normal distribution
187
220
randomNormal
188
221
:: forall a
189
222
. AFType a
190
223
=> [Int ]
224
+ -- ^ Dimensions of random array
191
225
-> RandomEngine
226
+ -- ^ 'RandomEngine' argument
192
227
-> IO (Array a )
193
228
randomNormal dims eng =
194
229
randEng @ a dims af_random_normal eng
0 commit comments