Skip to content

Commit

Permalink
stat_dev: addition of integer cases
Browse files Browse the repository at this point in the history
  • Loading branch information
jvdp1 committed Jan 19, 2020
1 parent 6fb6ca5 commit 60ab523
Show file tree
Hide file tree
Showing 5 changed files with 372 additions and 92 deletions.
114 changes: 86 additions & 28 deletions src/stdlib_experimental_stat.f90
Original file line number Diff line number Diff line change
@@ -1,56 +1,114 @@
module stdlib_experimental_stat


use stdlib_experimental_kinds, only: sp, dp, qp


use stdlib_experimental_kinds, only: sp, dp, qp, &
int8, int16, int32, int64
implicit none
private
! Public API
public :: mean


interface mean
module function mean_1_sp_sp(mat) result(res)
real(sp), intent(in) :: mat(:)
real(sp) ::res
module function mean_1_sp_sp(x) result(res)
real(sp), intent(in) :: x(:)
real(sp) :: res
end function mean_1_sp_sp
module function mean_1_dp_dp(mat) result(res)
real(dp), intent(in) :: mat(:)
real(dp) ::res
module function mean_1_dp_dp(x) result(res)
real(dp), intent(in) :: x(:)
real(dp) :: res
end function mean_1_dp_dp
module function mean_1_qp_qp(mat) result(res)
real(qp), intent(in) :: mat(:)
real(qp) ::res
module function mean_1_qp_qp(x) result(res)
real(qp), intent(in) :: x(:)
real(qp) :: res
end function mean_1_qp_qp

module function mean_2_all_sp_sp(mat) result(res)
real(sp), intent(in) :: mat(:,:)
real(sp) ::res
module function mean_1_int8_dp(x) result(res)
integer(int8), intent(in) :: x(:)
real(dp) :: res
end function mean_1_int8_dp
module function mean_1_int16_dp(x) result(res)
integer(int16), intent(in) :: x(:)
real(dp) :: res
end function mean_1_int16_dp
module function mean_1_int32_dp(x) result(res)
integer(int32), intent(in) :: x(:)
real(dp) :: res
end function mean_1_int32_dp
module function mean_1_int64_dp(x) result(res)
integer(int64), intent(in) :: x(:)
real(dp) :: res
end function mean_1_int64_dp

module function mean_2_all_sp_sp(x) result(res)
real(sp), intent(in) :: x(:,:)
real(sp) :: res
end function mean_2_all_sp_sp
module function mean_2_all_dp_dp(mat) result(res)
real(dp), intent(in) :: mat(:,:)
real(dp) ::res
module function mean_2_all_dp_dp(x) result(res)
real(dp), intent(in) :: x(:,:)
real(dp) :: res
end function mean_2_all_dp_dp
module function mean_2_all_qp_qp(mat) result(res)
real(qp), intent(in) :: mat(:,:)
real(qp) ::res
module function mean_2_all_qp_qp(x) result(res)
real(qp), intent(in) :: x(:,:)
real(qp) :: res
end function mean_2_all_qp_qp

module function mean_2_all_int8_dp(x) result(res)
integer(int8), intent(in) :: x(:,:)
real(dp) :: res
end function mean_2_all_int8_dp
module function mean_2_all_int16_dp(x) result(res)
integer(int16), intent(in) :: x(:,:)
real(dp) :: res
end function mean_2_all_int16_dp
module function mean_2_all_int32_dp(x) result(res)
integer(int32), intent(in) :: x(:,:)
real(dp) :: res
end function mean_2_all_int32_dp
module function mean_2_all_int64_dp(x) result(res)
integer(int64), intent(in) :: x(:,:)
real(dp) :: res
end function mean_2_all_int64_dp

module function mean_2_sp_sp(mat, dim) result(res)
real(sp), intent(in) :: mat(:,:)
module function mean_2_sp_sp(x, dim) result(res)
real(sp), intent(in) :: x(:,:)
integer, intent(in) :: dim
real(sp) :: res(size(mat)/size(mat, dim))
real(sp) :: res(size(x)/size(x, dim))
end function mean_2_sp_sp
module function mean_2_dp_dp(mat, dim) result(res)
real(dp), intent(in) :: mat(:,:)
module function mean_2_dp_dp(x, dim) result(res)
real(dp), intent(in) :: x(:,:)
integer, intent(in) :: dim
real(dp) :: res(size(mat)/size(mat, dim))
real(dp) :: res(size(x)/size(x, dim))
end function mean_2_dp_dp
module function mean_2_qp_qp(mat, dim) result(res)
real(qp), intent(in) :: mat(:,:)
module function mean_2_qp_qp(x, dim) result(res)
real(qp), intent(in) :: x(:,:)
integer, intent(in) :: dim
real(qp) :: res(size(mat)/size(mat, dim))
real(qp) :: res(size(x)/size(x, dim))
end function mean_2_qp_qp

module function mean_2_int8_dp(x, dim) result(res)
integer(int8), intent(in) :: x(:,:)
integer, intent(in) :: dim
real(dp) :: res(size(x)/size(x, dim))
end function mean_2_int8_dp
module function mean_2_int16_dp(x, dim) result(res)
integer(int16), intent(in) :: x(:,:)
integer, intent(in) :: dim
real(dp) :: res(size(x)/size(x, dim))
end function mean_2_int16_dp
module function mean_2_int32_dp(x, dim) result(res)
integer(int32), intent(in) :: x(:,:)
integer, intent(in) :: dim
real(dp) :: res(size(x)/size(x, dim))
end function mean_2_int32_dp
module function mean_2_int64_dp(x, dim) result(res)
integer(int64), intent(in) :: x(:,:)
integer, intent(in) :: dim
real(dp) :: res(size(x)/size(x, dim))
end function mean_2_int64_dp

end interface

end module
45 changes: 36 additions & 9 deletions src/stdlib_experimental_stat.fypp.f90
Original file line number Diff line number Diff line change
@@ -1,40 +1,67 @@
module stdlib_experimental_stat

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

use stdlib_experimental_kinds, only: sp, dp, qp
#:set REALTYPES = ["real({})".format(k) for k in REALKINDS]
#:set INTTYPES = ["integer({})".format(k) for k in INTKINDS]

#:set iktr = list(zip(range(len(REALKINDS)), REALKINDS, REALTYPES))
#:set ikti = list(zip(range(len(INTKINDS)), INTKINDS, INTTYPES))

use stdlib_experimental_kinds, only: sp, dp, qp, &
int8, int16, int32, int64
implicit none
private
! Public API
public :: mean


interface mean
#:for i1, k1, t1 in ikt
#:for i1, k1, t1 in iktr
module function mean_1_${k1}$_${k1}$(x) result(res)
${t1}$, intent(in) :: x(:)
${t1}$ ::res
${t1}$ :: res
end function mean_1_${k1}$_${k1}$
#:endfor

#:for i1, k1, t1 in ikt
#:for i1, k1, t1 in ikti
module function mean_1_${k1}$_dp(x) result(res)
${t1}$, intent(in) :: x(:)
real(dp) :: res
end function mean_1_${k1}$_dp
#:endfor

#:for i1, k1, t1 in iktr
module function mean_2_all_${k1}$_${k1}$(x) result(res)
${t1}$, intent(in) :: x(:,:)
${t1}$ ::res
${t1}$ :: res
end function mean_2_all_${k1}$_${k1}$
#:endfor

#:for i1, k1, t1 in ikti
module function mean_2_all_${k1}$_dp(x) result(res)
${t1}$, intent(in) :: x(:,:)
real(dp) :: res
end function mean_2_all_${k1}$_dp
#:endfor

#:for i1, k1, t1 in ikt
#:for i1, k1, t1 in iktr
module function mean_2_${k1}$_${k1}$(x, dim) result(res)
${t1}$, intent(in) :: x(:,:)
integer, intent(in) :: dim
${t1}$ :: res(size(x)/size(x, dim))
end function mean_2_${k1}$_${k1}$
#:endfor

#:for i1, k1, t1 in ikti
module function mean_2_${k1}$_dp(x, dim) result(res)
${t1}$, intent(in) :: x(:,:)
integer, intent(in) :: dim
real(dp) :: res(size(x)/size(x, dim))
end function mean_2_${k1}$_dp
#:endfor

end interface

end module
Loading

0 comments on commit 60ab523

Please sign in to comment.