Skip to content

Commit 60ab523

Browse files
committed
stat_dev: addition of integer cases
1 parent 6fb6ca5 commit 60ab523

File tree

5 files changed

+372
-92
lines changed

5 files changed

+372
-92
lines changed

src/stdlib_experimental_stat.f90

Lines changed: 86 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,114 @@
11
module stdlib_experimental_stat
22

33

4-
use stdlib_experimental_kinds, only: sp, dp, qp
4+
5+
6+
use stdlib_experimental_kinds, only: sp, dp, qp, &
7+
int8, int16, int32, int64
58
implicit none
69
private
710
! Public API
811
public :: mean
912

1013

1114
interface mean
12-
module function mean_1_sp_sp(mat) result(res)
13-
real(sp), intent(in) :: mat(:)
14-
real(sp) ::res
15+
module function mean_1_sp_sp(x) result(res)
16+
real(sp), intent(in) :: x(:)
17+
real(sp) :: res
1518
end function mean_1_sp_sp
16-
module function mean_1_dp_dp(mat) result(res)
17-
real(dp), intent(in) :: mat(:)
18-
real(dp) ::res
19+
module function mean_1_dp_dp(x) result(res)
20+
real(dp), intent(in) :: x(:)
21+
real(dp) :: res
1922
end function mean_1_dp_dp
20-
module function mean_1_qp_qp(mat) result(res)
21-
real(qp), intent(in) :: mat(:)
22-
real(qp) ::res
23+
module function mean_1_qp_qp(x) result(res)
24+
real(qp), intent(in) :: x(:)
25+
real(qp) :: res
2326
end function mean_1_qp_qp
2427

25-
module function mean_2_all_sp_sp(mat) result(res)
26-
real(sp), intent(in) :: mat(:,:)
27-
real(sp) ::res
28+
module function mean_1_int8_dp(x) result(res)
29+
integer(int8), intent(in) :: x(:)
30+
real(dp) :: res
31+
end function mean_1_int8_dp
32+
module function mean_1_int16_dp(x) result(res)
33+
integer(int16), intent(in) :: x(:)
34+
real(dp) :: res
35+
end function mean_1_int16_dp
36+
module function mean_1_int32_dp(x) result(res)
37+
integer(int32), intent(in) :: x(:)
38+
real(dp) :: res
39+
end function mean_1_int32_dp
40+
module function mean_1_int64_dp(x) result(res)
41+
integer(int64), intent(in) :: x(:)
42+
real(dp) :: res
43+
end function mean_1_int64_dp
44+
45+
module function mean_2_all_sp_sp(x) result(res)
46+
real(sp), intent(in) :: x(:,:)
47+
real(sp) :: res
2848
end function mean_2_all_sp_sp
29-
module function mean_2_all_dp_dp(mat) result(res)
30-
real(dp), intent(in) :: mat(:,:)
31-
real(dp) ::res
49+
module function mean_2_all_dp_dp(x) result(res)
50+
real(dp), intent(in) :: x(:,:)
51+
real(dp) :: res
3252
end function mean_2_all_dp_dp
33-
module function mean_2_all_qp_qp(mat) result(res)
34-
real(qp), intent(in) :: mat(:,:)
35-
real(qp) ::res
53+
module function mean_2_all_qp_qp(x) result(res)
54+
real(qp), intent(in) :: x(:,:)
55+
real(qp) :: res
3656
end function mean_2_all_qp_qp
3757

58+
module function mean_2_all_int8_dp(x) result(res)
59+
integer(int8), intent(in) :: x(:,:)
60+
real(dp) :: res
61+
end function mean_2_all_int8_dp
62+
module function mean_2_all_int16_dp(x) result(res)
63+
integer(int16), intent(in) :: x(:,:)
64+
real(dp) :: res
65+
end function mean_2_all_int16_dp
66+
module function mean_2_all_int32_dp(x) result(res)
67+
integer(int32), intent(in) :: x(:,:)
68+
real(dp) :: res
69+
end function mean_2_all_int32_dp
70+
module function mean_2_all_int64_dp(x) result(res)
71+
integer(int64), intent(in) :: x(:,:)
72+
real(dp) :: res
73+
end function mean_2_all_int64_dp
3874

39-
module function mean_2_sp_sp(mat, dim) result(res)
40-
real(sp), intent(in) :: mat(:,:)
75+
module function mean_2_sp_sp(x, dim) result(res)
76+
real(sp), intent(in) :: x(:,:)
4177
integer, intent(in) :: dim
42-
real(sp) :: res(size(mat)/size(mat, dim))
78+
real(sp) :: res(size(x)/size(x, dim))
4379
end function mean_2_sp_sp
44-
module function mean_2_dp_dp(mat, dim) result(res)
45-
real(dp), intent(in) :: mat(:,:)
80+
module function mean_2_dp_dp(x, dim) result(res)
81+
real(dp), intent(in) :: x(:,:)
4682
integer, intent(in) :: dim
47-
real(dp) :: res(size(mat)/size(mat, dim))
83+
real(dp) :: res(size(x)/size(x, dim))
4884
end function mean_2_dp_dp
49-
module function mean_2_qp_qp(mat, dim) result(res)
50-
real(qp), intent(in) :: mat(:,:)
85+
module function mean_2_qp_qp(x, dim) result(res)
86+
real(qp), intent(in) :: x(:,:)
5187
integer, intent(in) :: dim
52-
real(qp) :: res(size(mat)/size(mat, dim))
88+
real(qp) :: res(size(x)/size(x, dim))
5389
end function mean_2_qp_qp
90+
91+
module function mean_2_int8_dp(x, dim) result(res)
92+
integer(int8), intent(in) :: x(:,:)
93+
integer, intent(in) :: dim
94+
real(dp) :: res(size(x)/size(x, dim))
95+
end function mean_2_int8_dp
96+
module function mean_2_int16_dp(x, dim) result(res)
97+
integer(int16), intent(in) :: x(:,:)
98+
integer, intent(in) :: dim
99+
real(dp) :: res(size(x)/size(x, dim))
100+
end function mean_2_int16_dp
101+
module function mean_2_int32_dp(x, dim) result(res)
102+
integer(int32), intent(in) :: x(:,:)
103+
integer, intent(in) :: dim
104+
real(dp) :: res(size(x)/size(x, dim))
105+
end function mean_2_int32_dp
106+
module function mean_2_int64_dp(x, dim) result(res)
107+
integer(int64), intent(in) :: x(:,:)
108+
integer, intent(in) :: dim
109+
real(dp) :: res(size(x)/size(x, dim))
110+
end function mean_2_int64_dp
111+
54112
end interface
55113

56114
end module

src/stdlib_experimental_stat.fypp.f90

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,67 @@
11
module stdlib_experimental_stat
22

33
#:set REALKINDS = ["sp", "dp", "qp"]
4-
#:set KINDS = REALKINDS
5-
#:set TYPES = ["real({})".format(k) for k in REALKINDS]
6-
#:set ikt = list(zip(range(len(KINDS)), KINDS, TYPES))
4+
#:set INTKINDS = ["int8", "int16", "int32", "int64"]
75

8-
use stdlib_experimental_kinds, only: sp, dp, qp
6+
#:set REALTYPES = ["real({})".format(k) for k in REALKINDS]
7+
#:set INTTYPES = ["integer({})".format(k) for k in INTKINDS]
8+
9+
#:set iktr = list(zip(range(len(REALKINDS)), REALKINDS, REALTYPES))
10+
#:set ikti = list(zip(range(len(INTKINDS)), INTKINDS, INTTYPES))
11+
12+
use stdlib_experimental_kinds, only: sp, dp, qp, &
13+
int8, int16, int32, int64
914
implicit none
1015
private
1116
! Public API
1217
public :: mean
1318

1419

1520
interface mean
16-
#:for i1, k1, t1 in ikt
21+
#:for i1, k1, t1 in iktr
1722
module function mean_1_${k1}$_${k1}$(x) result(res)
1823
${t1}$, intent(in) :: x(:)
19-
${t1}$ ::res
24+
${t1}$ :: res
2025
end function mean_1_${k1}$_${k1}$
2126
#:endfor
2227

23-
#:for i1, k1, t1 in ikt
28+
#:for i1, k1, t1 in ikti
29+
module function mean_1_${k1}$_dp(x) result(res)
30+
${t1}$, intent(in) :: x(:)
31+
real(dp) :: res
32+
end function mean_1_${k1}$_dp
33+
#:endfor
34+
35+
#:for i1, k1, t1 in iktr
2436
module function mean_2_all_${k1}$_${k1}$(x) result(res)
2537
${t1}$, intent(in) :: x(:,:)
26-
${t1}$ ::res
38+
${t1}$ :: res
2739
end function mean_2_all_${k1}$_${k1}$
2840
#:endfor
2941

42+
#:for i1, k1, t1 in ikti
43+
module function mean_2_all_${k1}$_dp(x) result(res)
44+
${t1}$, intent(in) :: x(:,:)
45+
real(dp) :: res
46+
end function mean_2_all_${k1}$_dp
47+
#:endfor
3048

31-
#:for i1, k1, t1 in ikt
49+
#:for i1, k1, t1 in iktr
3250
module function mean_2_${k1}$_${k1}$(x, dim) result(res)
3351
${t1}$, intent(in) :: x(:,:)
3452
integer, intent(in) :: dim
3553
${t1}$ :: res(size(x)/size(x, dim))
3654
end function mean_2_${k1}$_${k1}$
3755
#:endfor
56+
57+
#:for i1, k1, t1 in ikti
58+
module function mean_2_${k1}$_dp(x, dim) result(res)
59+
${t1}$, intent(in) :: x(:,:)
60+
integer, intent(in) :: dim
61+
real(dp) :: res(size(x)/size(x, dim))
62+
end function mean_2_${k1}$_dp
63+
#:endfor
64+
3865
end interface
3966

4067
end module

0 commit comments

Comments
 (0)