@@ -11,93 +11,6 @@ submodule (stdlib_stats) stdlib_stats_moment
11
11
12
12
contains
13
13
14
- #:for k1, t1 in RC_KINDS_TYPES
15
- #:for rank in RANKS
16
- #:set RName = rname("moment_all",rank, t1, k1)
17
- module function ${RName}$(x, order, center, mask) result(res)
18
- ${t1}$, intent(in) :: x${ranksuffix(rank)}$
19
- integer, intent(in) :: order
20
- ${t1}$, intent(in), optional :: center
21
- logical, intent(in), optional :: mask
22
- ${t1}$ :: res
23
-
24
- real(${k1}$) :: n
25
-
26
- if (.not.optval(mask, .true.)) then
27
- res = ieee_value(1._${k1}$, ieee_quiet_nan)
28
- return
29
- end if
30
-
31
- n = real(size(x, kind = int64), ${k1}$)
32
-
33
- if (present(center)) then
34
- res = sum((x - center)**order) / n
35
- else
36
- res = sum((x - mean(x))**order) / n
37
- end if
38
-
39
- end function ${RName}$
40
- #:endfor
41
- #:endfor
42
-
43
-
44
- #:for k1, t1 in INT_KINDS_TYPES
45
- #:for rank in RANKS
46
- #:set RName = rname("moment_all",rank, t1, k1, 'dp')
47
- module function ${RName}$(x, order, center, mask) result(res)
48
- ${t1}$, intent(in) :: x${ranksuffix(rank)}$
49
- integer, intent(in) :: order
50
- real(dp), intent(in), optional :: center
51
- logical, intent(in), optional :: mask
52
- real(dp) :: res
53
-
54
- real(dp) :: n
55
-
56
- if (.not.optval(mask, .true.)) then
57
- res = ieee_value(1._dp, ieee_quiet_nan)
58
- return
59
- end if
60
-
61
- n = real(size(x, kind = int64), dp)
62
-
63
- if (present(center)) then
64
- res = sum((real(x, dp) - center)**order) / n
65
- else
66
- res = sum((real(x, dp) - mean(x))**order) / n
67
- end if
68
-
69
- end function ${RName}$
70
- #:endfor
71
- #:endfor
72
-
73
-
74
- #:for k1, t1 in RC_KINDS_TYPES
75
- #:for rank in REDRANKS
76
- #:set RName = rname("moment_scalar",rank, t1, k1)
77
- module function ${RName}$(x, order, dim, center, mask) result(res)
78
- ${t1}$, intent(in) :: x${ranksuffix(rank)}$
79
- integer, intent(in) :: order
80
- integer, intent(in) :: dim
81
- ${t1}$, intent(in) :: center
82
- logical, intent(in), optional :: mask
83
- ${t1}$ :: res${reduced_shape('x', rank, 'dim')}$
84
-
85
- if (.not.optval(mask, .true.)) then
86
- res = ieee_value(1._${k1}$, ieee_quiet_nan)
87
- return
88
- end if
89
-
90
- if (dim >= 1 .and. dim <= ${rank}$) then
91
- res = sum((x - center)**order, dim) / size(x, dim)
92
- else
93
- call error_stop("ERROR (moment): wrong dimension")
94
- end if
95
-
96
- end function ${RName}$
97
- #:endfor
98
- #:endfor
99
-
100
-
101
14
#:for k1, t1 in RC_KINDS_TYPES
102
15
#:for rank in RANKS
103
16
#:set RName = rname("moment",rank, t1, k1)
@@ -146,33 +59,6 @@ contains
146
59
#:endfor
147
60
148
61
149
- #:for k1, t1 in INT_KINDS_TYPES
150
- #:for rank in REDRANKS
151
- #:set RName = rname("moment_scalar",rank, t1, k1, 'dp')
152
- module function ${RName}$(x, order, dim, center, mask) result(res)
153
- ${t1}$, intent(in) :: x${ranksuffix(rank)}$
154
- integer, intent(in) :: order
155
- integer, intent(in) :: dim
156
- real(dp),intent(in) :: center
157
- logical, intent(in), optional :: mask
158
- real(dp) :: res${reduced_shape('x', rank, 'dim')}$
159
-
160
- if (.not.optval(mask, .true.)) then
161
- res = ieee_value(1._dp, ieee_quiet_nan)
162
- return
163
- end if
164
-
165
- if (dim >= 1 .and. dim <= ${rank}$) then
166
- res = sum( (real(x, dp) - center)**order, dim) / size(x, dim)
167
- else
168
- call error_stop("ERROR (moment): wrong dimension")
169
- end if
170
-
171
- end function ${RName}$
172
- #:endfor
173
- #:endfor
174
-
175
-
176
62
#:for k1, t1 in INT_KINDS_TYPES
177
63
#:for rank in RANKS
178
64
#:set RName = rname("moment",rank, t1, k1, 'dp')
@@ -222,78 +108,6 @@ contains
222
108
#:endfor
223
109
224
110
225
- #:for k1, t1 in RC_KINDS_TYPES
226
- #:for rank in RANKS
227
- #:set RName = rname("moment_mask_all",rank, t1, k1)
228
- module function ${RName}$(x, order, center, mask) result(res)
229
- ${t1}$, intent(in) :: x${ranksuffix(rank)}$
230
- integer, intent(in) :: order
231
- ${t1}$, intent(in), optional :: center
232
- logical, intent(in) :: mask${ranksuffix(rank)}$
233
- ${t1}$ :: res
234
-
235
- real(${k1}$) :: n
236
-
237
- n = real(count(mask, kind = int64), ${k1}$)
238
-
239
- if (present(center)) then
240
- res = sum((x - center)**order, mask) / n
241
- else
242
- res = sum((x - mean(x, mask))**order, mask) / n
243
- end if
244
-
245
- end function ${RName}$
246
- #:endfor
247
- #:endfor
248
-
249
-
250
- #:for k1, t1 in INT_KINDS_TYPES
251
- #:for rank in RANKS
252
- #:set RName = rname("moment_mask_all",rank, t1, k1, 'dp')
253
- module function ${RName}$(x, order, center, mask) result(res)
254
- ${t1}$, intent(in) :: x${ranksuffix(rank)}$
255
- integer, intent(in) :: order
256
- real(dp),intent(in), optional :: center
257
- logical, intent(in) :: mask${ranksuffix(rank)}$
258
- real(dp) :: res
259
-
260
- real(dp) :: n
261
-
262
- n = real(count(mask, kind = int64), dp)
263
-
264
- if (present(center)) then
265
- res = sum((real(x, dp) - center)**order, mask) / n
266
- else
267
- res = sum((real(x, dp) - mean(x,mask))**order, mask) / n
268
- end if
269
-
270
- end function ${RName}$
271
- #:endfor
272
- #:endfor
273
-
274
-
275
- #:for k1, t1 in RC_KINDS_TYPES
276
- #:for rank in REDRANKS
277
- #:set RName = rname("moment_mask_scalar",rank, t1, k1)
278
- module function ${RName}$(x, order, dim, center, mask) result(res)
279
- ${t1}$, intent(in) :: x${ranksuffix(rank)}$
280
- integer, intent(in) :: order
281
- integer, intent(in) :: dim
282
- ${t1}$, intent(in) :: center
283
- logical, intent(in) :: mask${ranksuffix(rank)}$
284
- ${t1}$ :: res${reduced_shape('x', rank, 'dim')}$
285
-
286
- if (dim >= 1 .and. dim <= ${rank}$) then
287
- res = sum((x - center)**order, dim, mask) / count(mask, dim)
288
- else
289
- call error_stop("ERROR (moment): wrong dimension")
290
- end if
291
-
292
- end function ${RName}$
293
- #:endfor
294
- #:endfor
295
-
296
-
297
111
#:for k1, t1 in RC_KINDS_TYPES
298
112
#:for rank in RANKS
299
113
#:set RName = rname("moment_mask",rank, t1, k1)
@@ -350,28 +164,6 @@ contains
350
164
#:endfor
351
165
352
166
353
- #:for k1, t1 in INT_KINDS_TYPES
354
- #:for rank in REDRANKS
355
- #:set RName = rname("moment_mask_scalar",rank, t1, k1, 'dp')
356
- module function ${RName}$(x, order, dim, center, mask) result(res)
357
- ${t1}$, intent(in) :: x${ranksuffix(rank)}$
358
- integer, intent(in) :: order
359
- integer, intent(in) :: dim
360
- real(dp), intent(in) :: center
361
- logical, intent(in) :: mask${ranksuffix(rank)}$
362
- real(dp) :: res${reduced_shape('x', rank, 'dim')}$
363
-
364
- if (dim >= 1 .and. dim <= ${rank}$) then
365
- res = sum(( real(x, dp) - center)**order, dim, mask) / count(mask, dim)
366
- else
367
- call error_stop("ERROR (moment): wrong dimension")
368
- end if
369
-
370
- end function ${RName}$
371
- #:endfor
372
- #:endfor
373
-
374
-
375
167
#:for k1, t1 in INT_KINDS_TYPES
376
168
#:for rank in RANKS
377
169
#:set RName = rname("moment_mask",rank, t1, k1, 'dp')
0 commit comments