@@ -11,93 +11,6 @@ submodule (stdlib_stats) stdlib_stats_moment
1111
1212contains
1313
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-
10114 #:for k1, t1 in RC_KINDS_TYPES
10215 #:for rank in RANKS
10316 #:set RName = rname("moment",rank, t1, k1)
@@ -146,33 +59,6 @@ contains
14659 #:endfor
14760
14861
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-
17662 #:for k1, t1 in INT_KINDS_TYPES
17763 #:for rank in RANKS
17864 #:set RName = rname("moment",rank, t1, k1, 'dp')
@@ -222,78 +108,6 @@ contains
222108 #:endfor
223109
224110
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-
297111 #:for k1, t1 in RC_KINDS_TYPES
298112 #:for rank in RANKS
299113 #:set RName = rname("moment_mask",rank, t1, k1)
@@ -350,28 +164,6 @@ contains
350164 #:endfor
351165
352166
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-
375167 #:for k1, t1 in INT_KINDS_TYPES
376168 #:for rank in RANKS
377169 #:set RName = rname("moment_mask",rank, t1, k1, 'dp')
0 commit comments