src/Util.jl

Mon, 06 Dec 2021 11:52:10 +0200

author
Tuomo Valkonen <tuomov@iki.fi>
date
Mon, 06 Dec 2021 11:52:10 +0200
changeset 33
a60d2f12ef93
parent 29
69242e8598eb
permissions
-rw-r--r--

Split FunctionalProgramming.jl, VectorMath.jl, and ThreadUtil.jl out of Util.jl.

0
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
1 #########################
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
2 # Some utility functions
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
3 #########################
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
4
4
59fd17a3cea0 Add __precompile__() for what it is worth
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
5 __precompile__()
59fd17a3cea0 Add __precompile__() for what it is worth
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
6
0
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
7 module Util
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
8
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
9 ##############
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
10 # Our exports
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
11 ##############
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
12
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
13 export map_first_slice!,
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
14 reduce_first_slice,
33
a60d2f12ef93 Split FunctionalProgramming.jl, VectorMath.jl, and ThreadUtil.jl out of Util.jl.
Tuomo Valkonen <tuomov@iki.fi>
parents: 29
diff changeset
15 ⬿
0
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
16
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
17 ###############################
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
18 # For working with NamedTuples
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
19 ###############################
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
20
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
21 ⬿ = merge
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
22
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
23 ######
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
24 # map
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
25 ######
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
26
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
27 @inline function map_first_slice!(f!, y)
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
28 for i in CartesianIndices(size(y)[2:end])
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
29 @inbounds f!(@view(y[:, i]))
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
30 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
31 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
32
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
33 @inline function map_first_slice!(x, f!, y)
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
34 for i in CartesianIndices(size(y)[2:end])
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
35 @inbounds f!(@view(x[:, i]), @view(y[:, i]))
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
36 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
37 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
38
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
39 @inline function reduce_first_slice(f, y; init=0.0)
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
40 accum=init
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
41 for i in CartesianIndices(size(y)[2:end])
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
42 @inbounds accum=f(accum, @view(y[:, i]))
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
43 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
44 return accum
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
45 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
46
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
47 end # Module
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
48

mercurial