Skip to content

Commit 6fb6ca5

Browse files
committed
stat_dev: avoid allocatable functions
1 parent a1c6353 commit 6fb6ca5

File tree

3 files changed

+23
-20
lines changed

3 files changed

+23
-20
lines changed

src/stdlib_experimental_stat.fypp.f90

+7-7
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,25 @@ module stdlib_experimental_stat
1414

1515
interface mean
1616
#:for i1, k1, t1 in ikt
17-
module function mean_1_${k1}$_${k1}$(mat) result(res)
18-
${t1}$, intent(in) :: mat(:)
17+
module function mean_1_${k1}$_${k1}$(x) result(res)
18+
${t1}$, intent(in) :: x(:)
1919
${t1}$ ::res
2020
end function mean_1_${k1}$_${k1}$
2121
#:endfor
2222

2323
#:for i1, k1, t1 in ikt
24-
module function mean_2_all_${k1}$_${k1}$(mat) result(res)
25-
${t1}$, intent(in) :: mat(:,:)
24+
module function mean_2_all_${k1}$_${k1}$(x) result(res)
25+
${t1}$, intent(in) :: x(:,:)
2626
${t1}$ ::res
2727
end function mean_2_all_${k1}$_${k1}$
2828
#:endfor
2929

3030

3131
#:for i1, k1, t1 in ikt
32-
module function mean_2_${k1}$_${k1}$(mat, dim) result(res)
33-
${t1}$, intent(in) :: mat(:,:)
32+
module function mean_2_${k1}$_${k1}$(x, dim) result(res)
33+
${t1}$, intent(in) :: x(:,:)
3434
integer, intent(in) :: dim
35-
${t1}$ :: res(size(mat)/size(mat, dim))
35+
${t1}$ :: res(size(x)/size(x, dim))
3636
end function mean_2_${k1}$_${k1}$
3737
#:endfor
3838
end interface

src/stdlib_experimental_stat_mean.fypp.f90

+13-13
Original file line numberDiff line numberDiff line change
@@ -12,40 +12,40 @@
1212
contains
1313

1414
#:for i1, k1, t1 in ikt
15-
module function mean_1_${k1}$_${k1}$(mat) result(res)
16-
${t1}$, intent(in) :: mat(:)
15+
module function mean_1_${k1}$_${k1}$(x) result(res)
16+
${t1}$, intent(in) :: x(:)
1717
${t1}$ ::res
1818

19-
res = sum(mat) / real(size(mat), ${k1}$)
19+
res = sum(x) / real(size(x), ${k1}$)
2020

2121
end function mean_1_${k1}$_${k1}$
2222
#:endfor
2323

2424
#:for i1, k1, t1 in ikt
25-
module function mean_2_all_${k1}$_${k1}$(mat) result(res)
26-
${t1}$, intent(in) :: mat(:,:)
25+
module function mean_2_all_${k1}$_${k1}$(x) result(res)
26+
${t1}$, intent(in) :: x(:,:)
2727
${t1}$ ::res
2828

29-
res = sum(mat) / real(size(mat), ${k1}$)
29+
res = sum(x) / real(size(x), ${k1}$)
3030

3131
end function mean_2_all_${k1}$_${k1}$
3232
#:endfor
3333

3434
#:for i1, k1, t1 in ikt
35-
module function mean_2_${k1}$_${k1}$(mat, dim) result(res)
36-
${t1}$, intent(in) :: mat(:,:)
35+
module function mean_2_${k1}$_${k1}$(x, dim) result(res)
36+
${t1}$, intent(in) :: x(:,:)
3737
integer, intent(in) :: dim
38-
${t1}$ :: res(size(mat)/size(mat, dim))
38+
${t1}$ :: res(size(x)/size(x, dim))
3939

4040
integer :: i
4141

4242
if (dim == 1) then
43-
do i=1, size(mat)/size(mat, dim)
44-
res(i) = mean_1_${k1}$_${k1}$(mat(:,i))
43+
do i=1, size(x)/size(x, dim)
44+
res(i) = mean_1_${k1}$_${k1}$(x(:,i))
4545
end do
4646
else if (dim == 2) then
47-
do i=1, size(mat)/size(mat, dim)
48-
res(i) = mean_1_${k1}$_${k1}$(mat(i,:))
47+
do i=1, size(x)/size(x, dim)
48+
res(i) = mean_1_${k1}$_${k1}$(x(i,:))
4949
end do
5050
end if
5151

src/tests/stat/test_mean.f90

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ program test_mean
1515
call assert(sum( mean(s, dim = 1) - [4.0_sp, 5.0_sp] ) == 0.0_sp)
1616
call assert(sum( mean(s, dim = 2) - [1.5_dp, 3.5_dp, 5.5_dp, 7.5_dp] ) == 0.0_sp)
1717

18+
call assert( size(mean(s, dim = 1))- size(sum(s, dim = 1)) == 0)
19+
call assert( size(mean(s, dim = 2))- size(sum(s, dim = 2)) == 0)
20+
1821
!dp
1922
call loadtxt("array1.dat", d)
2023

0 commit comments

Comments
 (0)