Skip to content

Commit dedc284

Browse files
committed
stat_mean_dev_3: add kind=int64 in function size
1 parent 8d9e475 commit dedc284

File tree

2 files changed

+34
-51
lines changed

2 files changed

+34
-51
lines changed

src/stdlib_experimental_stats.fypp

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,15 @@ interface mean
4949
module function mean_2_${k1}$_${k1}$(x, dim) result(res)
5050
${t1}$, intent(in) :: x(:,:)
5151
integer, intent(in) :: dim
52-
${t1}$ :: res(size(x)/size(x, dim))
52+
${t1}$ :: res(merge(size(x, 1), size(x, 2), mask = 1 < dim ))
5353
end function mean_2_${k1}$_${k1}$
5454
#:endfor
5555

5656
#:for i1, k1, t1 in ikti
5757
module function mean_2_${k1}$_dp(x, dim) result(res)
5858
${t1}$, intent(in) :: x(:,:)
5959
integer, intent(in) :: dim
60-
real(dp) :: res(size(x)/size(x, dim))
60+
real(dp) :: res(merge(size(x, 1), size(x, 2), mask = 1 < dim ))
6161
end function mean_2_${k1}$_dp
6262
#:endfor
6363

@@ -75,47 +75,47 @@ interface mean
7575

7676
#:for i1, k1, t1 in iktr
7777
#:for rank in ranks
78-
module function mean_${rank}$_all_${k1}$_${k1}$(x) result(res)
79-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
80-
${t1}$ :: res
81-
end function mean_${rank}$_all_${k1}$_${k1}$
78+
module function mean_${rank}$_all_${k1}$_${k1}$(x) result(res)
79+
${t1}$, intent(in) :: x${ranksuffix(rank)}$
80+
${t1}$ :: res
81+
end function mean_${rank}$_all_${k1}$_${k1}$
8282
#:endfor
8383
#:endfor
8484

8585
#:for i1, k1, t1 in ikti
8686
#:for rank in ranks
87-
module function mean_${rank}$_all_${k1}$_dp(x) result(res)
88-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
89-
real(dp) :: res
90-
end function mean_${rank}$_all_${k1}$_dp
87+
module function mean_${rank}$_all_${k1}$_dp(x) result(res)
88+
${t1}$, intent(in) :: x${ranksuffix(rank)}$
89+
real(dp) :: res
90+
end function mean_${rank}$_all_${k1}$_dp
9191
#:endfor
9292
#:endfor
9393

9494
#:for i1, k1, t1 in iktr
9595
#:for rank in ranks
96-
module function mean_${rank}$_${k1}$_${k1}$(x, dim) result(res)
97-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
98-
integer, intent(in) :: dim
99-
${t1}$ :: res( &
96+
module function mean_${rank}$_${k1}$_${k1}$(x, dim) result(res)
97+
${t1}$, intent(in) :: x${ranksuffix(rank)}$
98+
integer, intent(in) :: dim
99+
${t1}$ :: res( &
100100
#:for imerge in range(1,rank-1)
101-
merge(size(x,${imerge}$),size(x,${imerge + 1}$),mask = ${imerge}$ < dim ), &
101+
merge(size(x,${imerge}$),size(x,${imerge + 1}$),mask = ${imerge}$ < dim ), &
102102
#:endfor
103-
merge(size(x,${rank-1}$),size(x,${rank}$),mask = ${rank-1}$ < dim ) )
104-
end function mean_${rank}$_${k1}$_${k1}$
103+
merge(size(x,${rank-1}$),size(x,${rank}$),mask = ${rank-1}$ < dim ) )
104+
end function mean_${rank}$_${k1}$_${k1}$
105105
#:endfor
106106
#:endfor
107107

108108
#:for i1, k1, t1 in ikti
109109
#:for rank in ranks
110-
module function mean_${rank}$_${k1}$_dp(x, dim) result(res)
111-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
112-
integer, intent(in) :: dim
113-
real(dp) :: res( &
110+
module function mean_${rank}$_${k1}$_dp(x, dim) result(res)
111+
${t1}$, intent(in) :: x${ranksuffix(rank)}$
112+
integer, intent(in) :: dim
113+
real(dp) :: res( &
114114
#:for imerge in range(1,rank-1)
115-
merge(size(x,${imerge}$),size(x,${imerge + 1}$),mask = ${imerge}$ < dim ), &
115+
merge(size(x,${imerge}$),size(x,${imerge + 1}$),mask = ${imerge}$ < dim ), &
116116
#:endfor
117-
merge(size(x,${rank-1}$),size(x,${rank}$),mask = ${rank-1}$ < dim ) )
118-
end function mean_${rank}$_${k1}$_dp
117+
merge(size(x,${rank-1}$),size(x,${rank}$),mask = ${rank-1}$ < dim ) )
118+
end function mean_${rank}$_${k1}$_dp
119119
#:endfor
120120
#:endfor
121121

src/stdlib_experimental_stats_mean.fypp

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ module function mean_1_${k1}$_${k1}$(x) result(res)
1818
${t1}$, intent(in) :: x(:)
1919
${t1}$ :: res
2020

21-
res = sum(x) / real(size(x), ${k1}$)
21+
res = sum(x) / real(size(x, kind = int64), ${k1}$)
2222

2323
end function mean_1_${k1}$_${k1}$
2424
#:endfor
@@ -28,7 +28,7 @@ module function mean_1_${k1}$_dp(x) result(res)
2828
${t1}$, intent(in) :: x(:)
2929
real(dp) :: res
3030

31-
res = sum(real(x, dp)) / real(size(x), dp)
31+
res = sum(real(x, dp)) / real(size(x, kind = int64), dp)
3232

3333
end function mean_1_${k1}$_dp
3434
#:endfor
@@ -39,7 +39,7 @@ module function mean_2_all_${k1}$_${k1}$(x) result(res)
3939
${t1}$, intent(in) :: x(:,:)
4040
${t1}$ :: res
4141

42-
res = sum(x) / real(size(x), ${k1}$)
42+
res = sum(x) / real(size(x, kind = int64), ${k1}$)
4343

4444
end function mean_2_all_${k1}$_${k1}$
4545
#:endfor
@@ -49,7 +49,7 @@ module function mean_2_all_${k1}$_dp(x) result(res)
4949
${t1}$, intent(in) :: x(:,:)
5050
real(dp) :: res
5151

52-
res = sum(real(x, dp)) / real(size(x), dp)
52+
res = sum(real(x, dp)) / real(size(x, kind = int64), dp)
5353

5454
end function mean_2_all_${k1}$_dp
5555
#:endfor
@@ -58,7 +58,7 @@ end function mean_2_all_${k1}$_dp
5858
module function mean_2_${k1}$_${k1}$(x, dim) result(res)
5959
${t1}$, intent(in) :: x(:,:)
6060
integer, intent(in) :: dim
61-
${t1}$ :: res(size(x)/size(x, dim))
61+
${t1}$ :: res(merge(size(x, 1), size(x, 2), mask = 1 < dim ))
6262

6363
select case(dim)
6464
case(1)
@@ -76,7 +76,7 @@ end function mean_2_${k1}$_${k1}$
7676
module function mean_2_${k1}$_dp(x, dim) result(res)
7777
${t1}$, intent(in) :: x(:,:)
7878
integer, intent(in) :: dim
79-
real(dp) :: res(size(x)/size(x, dim))
79+
real(dp) :: res(merge(size(x, 1), size(x, 2), mask = 1 < dim ))
8080

8181
select case(dim)
8282
case(1)
@@ -95,23 +95,6 @@ end function mean_2_${k1}$_dp
9595
#{if rank > 0}#(${":" + ",:" * (rank - 1)}$)#{endif}#
9696
#:enddef
9797

98-
!As proposed by @arady
99-
#:def varsuffix(rank)
100-
${str(rank)}$
101-
#:enddef
102-
103-
#:def varlist(varname, startlist, endlist)
104-
#:if startlist > 0
105-
${",".join([varname + varsuffix(i) for i in range(startlist, endlist + 1)])}$
106-
#:endif
107-
#:enddef
108-
109-
#:def varlistskip(varname, rank, dim)
110-
#:if rank > 0
111-
${varlist(varname,1,dim-1)}$#{if dim -1 > 0 and dim < rank}#,#{endif}#${varlist(varname,dim+1,rank)}$
112-
#:endif
113-
#:enddef
114-
11598
#:if VERSION90
11699
#:set ranks = range(3,8)
117100
#:else
@@ -124,7 +107,7 @@ module function mean_${rank}$_all_${k1}$_${k1}$(x) result(res)
124107
${t1}$, intent(in) :: x${ranksuffix(rank)}$
125108
${t1}$ :: res
126109

127-
res = sum(x) / real(size(x), ${k1}$)
110+
res = sum(x) / real(size(x, kind = int64), ${k1}$)
128111

129112
end function mean_${rank}$_all_${k1}$_${k1}$
130113
#:endfor
@@ -136,7 +119,7 @@ module function mean_${rank}$_all_${k1}$_dp(x) result(res)
136119
${t1}$, intent(in) :: x${ranksuffix(rank)}$
137120
real(dp) :: res
138121

139-
res = sum(real(x, dp)) / real(size(x), dp)
122+
res = sum(real(x, dp)) / real(size(x, kind = int64), dp)
140123

141124
end function mean_${rank}$_all_${k1}$_dp
142125
#:endfor
@@ -156,7 +139,7 @@ module function mean_${rank}$_${k1}$_${k1}$(x, dim) result(res)
156139
select case(dim)
157140
#:for fi in range(1,rank+1)
158141
case(${fi}$)
159-
res=sum(x, ${fi}$) / real(size(x, ${fi}$), ${k1}$)
142+
res=sum(x, ${fi}$) / real(size(x, ${fi}$), ${k1}$)
160143
#:endfor
161144
case default
162145
call error_stop("ERROR (mean): wrong dimension")
@@ -180,7 +163,7 @@ module function mean_${rank}$_${k1}$_dp(x, dim) result(res)
180163
select case(dim)
181164
#:for fi in range(1,rank+1)
182165
case(${fi}$)
183-
res=sum(real(x, dp), ${fi}$) / real(size(x, ${fi}$), dp)
166+
res=sum(real(x, dp), ${fi}$) / real(size(x, ${fi}$), dp)
184167
#:endfor
185168
case default
186169
call error_stop("ERROR (mean): wrong dimension")

0 commit comments

Comments
 (0)