Skip to content

Commit 22a0f74

Browse files
committed
Update Array module documentation.
1 parent 15a52a7 commit 22a0f74

File tree

1 file changed

+113
-4
lines changed

1 file changed

+113
-4
lines changed

src/ArrayFire/Array.hs

Lines changed: 113 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@
2626
-- main :: 'IO' ()
2727
-- main = 'print' ('matrix' \@'Double' (2,2) [ [1..], [1..] ])
2828
-- @
29+
--
30+
-- @
31+
-- ArrayFire Array
32+
-- [2 2 1 1]
33+
-- 1.0000 2.0000
34+
-- 1.0000 2.0000
35+
-- @
2936
--------------------------------------------------------------------------------
3037
module ArrayFire.Array where
3138

@@ -93,7 +100,6 @@ matrix (x,y)
93100
-- 2.0000 2.0000
94101
-- 2.0000 2.0000
95102
-- @
96-
--
97103
cube :: AFType a => (Int,Int,Int) -> [[[a]]] -> Array a
98104
cube (x,y,z)
99105
= mkArray [x,y,z]
@@ -123,7 +129,6 @@ cube (x,y,z)
123129
-- 2.0000 2.0000
124130
-- 2.0000 2.0000
125131
-- @
126-
--
127132
tensor :: AFType a => (Int, Int,Int,Int) -> [[[[a]]]] -> Array a
128133
tensor (w,x,y,z)
129134
= mkArray [w,x,y,z]
@@ -138,11 +143,10 @@ tensor (w,x,y,z)
138143
-- | Internal function for 'Array' construction
139144
--
140145
-- >>> mkArray @Double [10] [1.0 .. 10.0]
141-
-- @
142146
-- ArrayFire Array
143147
-- [10 1 1 1]
144148
-- 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000
145-
-- @
149+
--
146150
mkArray
147151
:: forall array
148152
. AFType array
@@ -171,6 +175,11 @@ mkArray dims xs =
171175
-- af_err af_create_handle(af_array *arr, const unsigned ndims, const dim_t * const dims, const af_dtype type);
172176

173177
-- | Copies an 'Array' to a new 'Array'
178+
--
179+
-- >>> copyArray (scalar @Double 10)
180+
-- ArrayFire Array
181+
-- [1 1 1 1]
182+
-- 10.0000
174183
copyArray
175184
:: AFType a
176185
=> Array a
@@ -182,6 +191,11 @@ copyArray = (`op1` af_copy_array)
182191
-- af_err af_get_data_ptr(void *data, const af_array arr);
183192

184193
-- | Retains an 'Array', increases reference count
194+
--
195+
-- >>> retainArray (scalar @Double 10)
196+
-- ArrayFire Array
197+
-- [1 1 1 1]
198+
-- 10.0000
185199
retainArray
186200
:: AFType a
187201
=> Array a
@@ -191,6 +205,12 @@ retainArray =
191205
(`op1` af_retain_array)
192206

193207
-- | Retrieves 'Array' reference count
208+
--
209+
-- >>> initialArray = scalar @Double 10
210+
-- >>> retainedArray = retain initialArray
211+
-- >>> getDataRefCount retainedArray
212+
-- 2
213+
--
194214
getDataRefCount
195215
:: AFType a
196216
=> Array a
@@ -204,6 +224,9 @@ getDataRefCount =
204224
-- af_err af_eval_multiple(const int num, af_array *arrays);
205225

206226
-- | Should manual evaluation occur
227+
--
228+
-- >>> setManualEvalFlag True
229+
-- ()
207230
setManualEvalFlag
208231
:: Bool
209232
-- ^ Whether or not to perform manual evaluation
@@ -212,12 +235,21 @@ setManualEvalFlag (fromIntegral . fromEnum -> b) =
212235
afCall (af_set_manual_eval_flag b)
213236

214237
-- | Retrieve manual evaluation status
238+
--
239+
-- >>> setManualEvalFlag False
240+
-- >>> getManualEvalFlag
241+
-- False
242+
--
215243
getManualEvalFlag
216244
:: IO Bool
217245
getManualEvalFlag =
218246
toEnum . fromIntegral <$> afCall1 af_get_manual_eval_flag
219247

220248
-- | Retrieve element count
249+
--
250+
-- >>> getElements (vector @Double 10 [1..])
251+
-- 10
252+
--
221253
getElements
222254
:: AFType a
223255
=> Array a
@@ -228,13 +260,21 @@ getElements a =
228260
fromIntegral (a `infoFromArray` af_get_elements)
229261

230262
-- | Retrieve type of 'Array'
263+
--
264+
-- >>> getType (vector @Double 10 [1..])
265+
-- F64
266+
--
231267
getType
232268
:: AFType a
233269
=> Array a
234270
-> AFDType
235271
getType a = fromAFType (a `infoFromArray` af_get_type)
236272

237273
-- | Retrieves dimensions of 'Array'
274+
--
275+
-- >>> getDims (vector @Double 10 [1..])
276+
-- (10,1,1,1)
277+
--
238278
getDims
239279
:: AFType a
240280
=> Array a
@@ -244,111 +284,174 @@ getDims arr = do
244284
(fromIntegral a, fromIntegral b, fromIntegral c, fromIntegral d)
245285

246286
-- | Retrieves number of dimensions in 'Array'
287+
--
288+
-- >>> getNumDims (matrix @Double (2,2) [[1..],[1..]])
289+
-- 2
290+
--
247291
getNumDims
248292
:: AFType a
249293
=> Array a
250294
-> Int
251295
getNumDims = fromIntegral . (`infoFromArray` af_get_numdims)
252296

253297
-- | Checks if an 'Array' is empty
298+
--
299+
-- >>> isEmpty (matrix @Double (2,2) [[1..],[1..]])
300+
-- False
301+
--
254302
isEmpty
255303
:: AFType a
256304
=> Array a
257305
-> Bool
258306
isEmpty a = toEnum . fromIntegral $ (a `infoFromArray` af_is_empty)
259307

260308
-- | Checks if an 'Array' is a scalar (contains only one element)
309+
--
310+
-- >>> isScalar (matrix @Double (2,2) [[1..],[1..]])
311+
-- False
312+
-- >>> isScalar (1.0 :: Array Double)
313+
-- True
314+
--
261315
isScalar
262316
:: AFType a
263317
=> Array a
264318
-> Bool
265319
isScalar a = toEnum . fromIntegral $ (a `infoFromArray` af_is_scalar)
266320

267321
-- | Checks if an 'Array' is row-oriented
322+
--
323+
-- >>> isRow (matrix @Double (2,2) [[1..],[1..]])
324+
-- False
325+
--
268326
isRow
269327
:: AFType a
270328
=> Array a
271329
-> Bool
272330
isRow a = toEnum . fromIntegral $ (a `infoFromArray` af_is_row)
273331

274332
-- | Checks if an 'Array' is a column-oriented
333+
--
334+
-- >>> isColumn (vector @Double 10 [1..])
335+
-- True
336+
--
275337
isColumn
276338
:: AFType a
277339
=> Array a
278340
-> Bool
279341
isColumn a = toEnum . fromIntegral $ (a `infoFromArray` af_is_column)
280342

281343
-- | Checks if an 'Array' is a vector
344+
--
345+
-- >>> isVector (vector @Double 10 [1..])
346+
-- True
347+
-- >>> isVector (1.0 :: Array Double)
348+
-- False
349+
--
282350
isVector
283351
:: AFType a
284352
=> Array a
285353
-> Bool
286354
isVector a = toEnum . fromIntegral $ (a `infoFromArray` af_is_vector)
287355

288356
-- | Checks if an 'Array' is a 'Complex'
357+
--
358+
-- >>> isComplex (scalar (1.0 :+ 1.0) :: Array (Complex Double))
359+
-- True
360+
--
289361
isComplex
290362
:: AFType a
291363
=> Array a
292364
-> Bool
293365
isComplex a = toEnum . fromIntegral $ (a `infoFromArray` af_is_complex)
294366

295367
-- | Checks if an 'Array' is 'Real'
368+
--
369+
-- >>> isReal (scalar 1.0 :: Array Double)
370+
-- True
371+
--
296372
isReal
297373
:: AFType a
298374
=> Array a
299375
-> Bool
300376
isReal a = toEnum . fromIntegral $ (a `infoFromArray` af_is_real)
301377

302378
-- | Checks if an 'Array' is 'Double'
379+
--
380+
-- >>> isDouble (scalar 1.0 :: Array Double)
381+
-- True
382+
--
303383
isDouble
304384
:: AFType a
305385
=> Array a
306386
-> Bool
307387
isDouble a = toEnum . fromIntegral $ (a `infoFromArray` af_is_double)
308388

309389
-- | Checks if an 'Array' is 'Float'
390+
--
391+
-- >>> isSingle (scalar 1.0 :: Array Float)
392+
-- True
393+
--
310394
isSingle
311395
:: AFType a
312396
=> Array a
313397
-> Bool
314398
isSingle a = toEnum . fromIntegral $ (a `infoFromArray` af_is_single)
315399

316400
-- | Checks if an 'Array' is 'Double', 'Float', 'Complex Double', or 'Complex Float'
401+
--
402+
-- >>> isRealFloating (scalar 1.0 :: Array Double)
403+
-- True
404+
--
317405
isRealFloating
318406
:: AFType a
319407
=> Array a
320408
-> Bool
321409
isRealFloating a = toEnum . fromIntegral $ (a `infoFromArray` af_is_realfloating)
322410

323411
-- | Checks if an 'Array' is 'Double' or 'Float'
412+
--
413+
-- >>> isFloating (scalar 1.0 :: Array Double)
414+
-- True
324415
isFloating
325416
:: AFType a
326417
=> Array a
327418
-> Bool
328419
isFloating a = toEnum . fromIntegral $ (a `infoFromArray` af_is_floating)
329420

330421
-- | Checks if an 'Array' is of type 'Int16', 'Int32', or 'Int64'
422+
--
423+
-- >>> isInteger (scalar 1 :: Array Int16)
424+
-- True
331425
isInteger
332426
:: AFType a
333427
=> Array a
334428
-> Bool
335429
isInteger a = toEnum . fromIntegral $ (a `infoFromArray` af_is_integer)
336430

337431
-- | Checks if an 'Array' is of type 'CBool'
432+
--
433+
-- >>> isBool (scalar 1 :: Array CBool)
434+
-- True
338435
isBool
339436
:: AFType a
340437
=> Array a
341438
-> Bool
342439
isBool a = toEnum . fromIntegral $ (a `infoFromArray` af_is_bool)
343440

344441
-- | Checks if an 'Array' is sparse
442+
--
443+
-- >>> isSparse (scalar 1 :: Array Double)
444+
-- False
345445
isSparse
346446
:: AFType a
347447
=> Array a
348448
-> Bool
349449
isSparse a = toEnum . fromIntegral $ (a `infoFromArray` af_is_sparse)
350450

351451
-- | Converts an 'Array' to a 'Storable' 'Vector'
452+
--
453+
-- >>> toVector (vector @Double 10 [1..])
454+
-- [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0]
352455
toVector :: forall a . AFType a => Array a -> Vector a
353456
toVector arr@(Array fptr) = do
354457
unsafePerformIO . mask_ . withForeignPtr fptr $ \arrPtr -> do
@@ -360,10 +463,16 @@ toVector arr@(Array fptr) = do
360463
pure $ unsafeFromForeignPtr0 newFptr len
361464

362465
-- | Converts an 'Array' to [a]
466+
--
467+
-- >>> toList (vector @Double 10 [1..])
468+
-- [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0]
363469
toList :: forall a . AFType a => Array a -> [a]
364470
toList = V.toList . toVector
365471

366472
-- | Retrieves single scalar value from an 'Array'
473+
--
474+
-- >>> getScalar (scalar @Double 22.0) :: Double
475+
-- 22.0
367476
getScalar :: forall a b . (Storable a, AFType b) => Array b -> a
368477
getScalar (Array fptr) =
369478
unsafePerformIO . mask_ . withForeignPtr fptr $ \arrPtr -> do

0 commit comments

Comments
 (0)