1
1
#:include "common.fypp"
2
-
3
2
#:set RANKS = range(1, MAXRANK + 1)
4
-
5
-
3
+ #:set RC_KINDS_TYPES = REAL_KINDS_TYPES + CMPLX_KINDS_TYPES
6
4
submodule (stdlib_experimental_stats) stdlib_experimental_stats_mean
7
5
8
6
use, intrinsic:: ieee_arithmetic, only: ieee_value, ieee_quiet_nan
@@ -12,28 +10,33 @@ submodule (stdlib_experimental_stats) stdlib_experimental_stats_mean
12
10
13
11
contains
14
12
15
- #:for k1, t1 in REAL_KINDS_TYPES
13
+ #:def name(Rank, Type, Kind)
14
+ $:"mean_{0}_all_{1}{2}_{1}{2}".format(Rank, Type[0], Kind)
15
+ #:enddef
16
+ #:for k1, t1 in RC_KINDS_TYPES
16
17
#:for rank in RANKS
17
- module function mean_${ rank}$_all_${k1}$_${k1}$ (x, mask) result(res)
18
+ module function ${name( rank, t1, k1)}$ (x, mask) result(res)
18
19
${t1}$, intent(in) :: x${ranksuffix(rank)}$
19
20
logical, intent(in), optional :: mask
20
21
${t1}$ :: res
21
22
22
23
if (.not.optval(mask, .true.)) then
23
- res = ieee_value(res, ieee_quiet_nan)
24
+ res = ieee_value(real( res, kind=${k1}$) , ieee_quiet_nan)
24
25
return
25
26
end if
26
27
27
28
res = sum(x) / real(size(x, kind = int64), ${k1}$)
28
29
29
- end function mean_${ rank}$_all_${k1}$_${k1 }$
30
+ end function ${name( rank, t1, k1) }$
30
31
#:endfor
31
32
#:endfor
32
33
33
-
34
+ #:def name(Rank, Type, Kind)
35
+ $:"mean_{0}_all_{1}{2}_rdp".format(Rank, Type[0], Kind)
36
+ #:enddef
34
37
#:for k1, t1 in INT_KINDS_TYPES
35
38
#:for rank in RANKS
36
- module function mean_${ rank}$_all_${k1}$_dp (x, mask) result(res)
39
+ module function ${name( rank, t1, k1)}$ (x, mask) result(res)
37
40
${t1}$, intent(in) :: x${ranksuffix(rank)}$
38
41
logical, intent(in), optional :: mask
39
42
real(dp) :: res
@@ -45,21 +48,24 @@ contains
45
48
46
49
res = sum(real(x, dp)) / real(size(x, kind = int64), dp)
47
50
48
- end function mean_${ rank}$_all_${k1}$_dp
51
+ end function ${name( rank, t1, k1)}$
49
52
#:endfor
50
53
#:endfor
51
54
52
55
53
- #:for k1, t1 in REAL_KINDS_TYPES
56
+ #:def name(Rank, Type, Kind)
57
+ $:"mean_{0}_{1}{2}_{1}{2}".format(Rank, Type[0], Kind)
58
+ #:enddef
59
+ #:for k1, t1 in RC_KINDS_TYPES
54
60
#:for rank in RANKS
55
- module function mean_${ rank}$_${k1}$_${k1 }$(x, dim, mask) result(res)
61
+ module function ${name( rank, t1, k1) }$(x, dim, mask) result(res)
56
62
${t1}$, intent(in) :: x${ranksuffix(rank)}$
57
63
integer, intent(in) :: dim
58
64
logical, intent(in), optional :: mask
59
65
${t1}$ :: res${reduced_shape('x', rank, 'dim')}$
60
66
61
67
if (.not.optval(mask, .true.)) then
62
- res = ieee_value(res, ieee_quiet_nan)
68
+ res = ieee_value(real( res, kind=${k1}$) , ieee_quiet_nan)
63
69
return
64
70
end if
65
71
@@ -69,14 +75,17 @@ contains
69
75
call error_stop("ERROR (mean): wrong dimension")
70
76
end if
71
77
72
- end function mean_${ rank}$_${k1}$_${k1 }$
78
+ end function ${name( rank, t1, k1) }$
73
79
#:endfor
74
80
#:endfor
75
81
76
82
83
+ #:def name(Rank, Type, Kind)
84
+ $:"mean_{0}_{1}{2}_rdp".format(Rank, Type[0], Kind)
85
+ #:enddef
77
86
#:for k1, t1 in INT_KINDS_TYPES
78
87
#:for rank in RANKS
79
- module function mean_${ rank}$_${k1}$_dp (x, dim, mask) result(res)
88
+ module function ${name( rank, t1, k1)}$ (x, dim, mask) result(res)
80
89
${t1}$, intent(in) :: x${ranksuffix(rank)}$
81
90
integer, intent(in) :: dim
82
91
logical, intent(in), optional :: mask
@@ -93,42 +102,49 @@ contains
93
102
call error_stop("ERROR (mean): wrong dimension")
94
103
end if
95
104
96
- end function mean_${ rank}$_${k1}$_dp
105
+ end function ${name( rank, t1, k1)}$
97
106
#:endfor
98
107
#:endfor
99
108
100
-
101
- #:for k1, t1 in REAL_KINDS_TYPES
109
+ #:def name(Rank, Type, Kind)
110
+ $:"mean_{0}_mask_all_{1}{2}_{1}{2}".format(Rank, Type[0], Kind)
111
+ #:enddef
112
+ #:for k1, t1 in RC_KINDS_TYPES
102
113
#:for rank in RANKS
103
- module function mean_${ rank}$_mask_all_${k1}$_${k1 }$(x, mask) result(res)
114
+ module function ${name( rank, t1, k1) }$(x, mask) result(res)
104
115
${t1}$, intent(in) :: x${ranksuffix(rank)}$
105
116
logical, intent(in) :: mask${ranksuffix(rank)}$
106
117
${t1}$ :: res
107
118
108
119
res = sum(x, mask) / real(count(mask, kind = int64), ${k1}$)
109
120
110
- end function mean_${ rank}$_mask_all_${k1}$_${k1 }$
121
+ end function ${name( rank, t1, k1) }$
111
122
#:endfor
112
123
#:endfor
113
124
114
125
126
+ #:def name(Rank, Type, Kind)
127
+ $:"mean_{0}_mask_all_{1}{2}_rdp".format(Rank, Type[0], Kind)
128
+ #:enddef
115
129
#:for k1, t1 in INT_KINDS_TYPES
116
130
#:for rank in RANKS
117
- module function mean_${ rank}$_mask_all_${k1}$_dp (x, mask) result(res)
131
+ module function ${name( rank, t1, k1)}$ (x, mask) result(res)
118
132
${t1}$, intent(in) :: x${ranksuffix(rank)}$
119
133
logical, intent(in) :: mask${ranksuffix(rank)}$
120
134
real(dp) :: res
121
135
122
136
res = sum(real(x, dp), mask) / real(count(mask, kind = int64), dp)
123
137
124
- end function mean_${ rank}$_mask_all_${k1}$_dp
138
+ end function ${name( rank, t1, k1)}$
125
139
#:endfor
126
140
#:endfor
127
141
128
-
129
- #:for k1, t1 in REAL_KINDS_TYPES
142
+ #:def name(Rank, Type, Kind)
143
+ $:"mean_{0}_mask_{1}{2}_{1}{2}".format(Rank, Type[0], Kind)
144
+ #:enddef
145
+ #:for k1, t1 in RC_KINDS_TYPES
130
146
#:for rank in RANKS
131
- module function mean_${ rank}$_mask_${k1}$_${k1 }$(x, dim, mask) result(res)
147
+ module function ${name( rank, t1, k1) }$(x, dim, mask) result(res)
132
148
${t1}$, intent(in) :: x${ranksuffix(rank)}$
133
149
integer, intent(in) :: dim
134
150
logical, intent(in) :: mask${ranksuffix(rank)}$
@@ -140,14 +156,17 @@ contains
140
156
call error_stop("ERROR (mean): wrong dimension")
141
157
end if
142
158
143
- end function mean_${ rank}$_mask_${k1}$_${k1 }$
159
+ end function ${name( rank, t1, k1) }$
144
160
#:endfor
145
161
#:endfor
146
162
147
163
164
+ #:def name(Rank, Type, Kind)
165
+ $:"mean_{0}_mask_{1}{2}_rdp".format(Rank, Type[0], Kind)
166
+ #:enddef
148
167
#:for k1, t1 in INT_KINDS_TYPES
149
168
#:for rank in RANKS
150
- module function mean_${ rank}$_mask_${k1}$_dp (x, dim, mask) result(res)
169
+ module function ${name( rank, t1, k1)}$ (x, dim, mask) result(res)
151
170
${t1}$, intent(in) :: x${ranksuffix(rank)}$
152
171
integer, intent(in) :: dim
153
172
logical, intent(in) :: mask${ranksuffix(rank)}$
@@ -159,7 +178,7 @@ contains
159
178
call error_stop("ERROR (mean): wrong dimension")
160
179
end if
161
180
162
- end function mean_${ rank}$_mask_${k1}$_dp
181
+ end function ${name( rank, t1, k1)}$
163
182
#:endfor
164
183
#:endfor
165
184
0 commit comments