From edf8e54297139171d7a96925558ca3ccc4917709 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 18 Oct 2020 13:32:28 -0400 Subject: [PATCH 01/73] change in Makefile.manual changed the object name from stdlib_stats_distribution_implementation.o to stdlib_stats_distribution_imp.o --- src/Makefile.manual | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index 1c731b9bb..129dbe553 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -12,7 +12,10 @@ SRC = f18estop.f90 \ stdlib_stats.f90 \ stdlib_stats_mean.f90 \ stdlib_stats_moment.f90 \ - stdlib_stats_var.f90 + stdlib_stats_var.f90 \ + stdlib_stats_distribution.f90 \ + stdlib_stats_distribution_rvs.f90 \ + stdlib_stats_distribution_implementation.f90 \ LIB = libstdlib.a @@ -61,7 +64,13 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o - +stdlib_stats_distribution_rvs.o: stdlib_kinds.o +stdlib_stats_distribution.o: \ + stdlib_error.o \ + stdlib_kinds.o \ + stdlib_stats_distribution_rvs.o \ +stdlib_stats_distribution_imp.o: \ + stdlib_stats_distribution.o # Fortran sources that are built from fypp templates stdlib_io.f90: stdlib_io.fypp stdlib_linalg.f90: stdlib_linalg.fypp @@ -71,3 +80,7 @@ stdlib_stats.f90: stdlib_stats.fypp stdlib_stats_mean.f90: stdlib_stats_mean.fypp stdlib_stats_moment.f90: stdlib_stats_moment.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp +stdlib_stats_distribution_rvs.f90: stdlib_stats_distribution_rvs.fypp +stdlib_stats_distribution.f90: stdlib_stats_distribution.fypp +stdlib_stats_distribution_implementation.f90: \ + stdlib_stats_distribution_implementation.fypp \ No newline at end of file From 680b8afb1eb627345eb1d8ee97eb14fc194adb88 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sat, 19 Dec 2020 13:24:44 -0500 Subject: [PATCH 02/73] New --- src/stdlib_stats_distribution_PRNG.fypp | 202 ++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 src/stdlib_stats_distribution_PRNG.fypp diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp new file mode 100644 index 000000000..fba0910c4 --- /dev/null +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -0,0 +1,202 @@ +#:include "common.fypp" +module stdlib_stats_distribution_PRNG + use stdlib_kinds + implicit none + private + integer, parameter :: MAX_INT_BIT_SIZE = 64 + integer(int64), save :: st(4), si = 614872703977525537_int64 + logical, save :: seed_initialized = .false. + + public :: random_distribution_seed + + ! distribution internal use + public :: rand, jump, long_jump + + + interface rand + ! Generation of random integers with different kinds + ! + #:for k1, t1 in INT_KINDS_TYPES + module procedure rand_${t1[0]}$${k1}$ + #:endfor + end interface rand + + interface random_distribution_seed + ! Set seed of PRNG for statistical distributions + ! + #:for k1, t1 in INT_KINDS_TYPES + module procedure random_distribution_seed_${t1[0]}$${k1}$ + #:endfor + end interface random_distribution_seed + + + contains + + #:for k1, t1 in INT_KINDS_TYPES + module function rand_${t1[0]}$${k1}$(n) result(res) + ! Random integer generation for various kinds + ! result = [0, 2^k - 1], k = 8, 16, 32, 64, depending on input kind + ! + ${t1}$, intent(in) :: n + ${t1}$ :: res + integer :: k + + k = MAX_INT_BIT_SIZE - bit_size(n) + res = shiftr(xoshiro256ss( ), k) + end function rand_${t1[0]}$${k1}$ + + #:endfor + + function xoshiro256ss( ) result (res) + ! Generate random 64-bit integers + ! Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) + ! + ! This is xoshiro256** 1.0, one of our all-purpose, rock-solid + ! generators. It has excellent (sub-ns) speed, a state (256 bits) that is + ! large enough for any parallel application, and it passes all tests we + ! are aware of. + ! + ! The state must be seeded so that it is not everywhere zero. If you have + ! a 64-bit seed, we suggest to seed a splitmix64 generator and use its + ! output to fill st. + ! + ! Fortran 90 version translated from C by Jim-215-Fisher + ! + integer(int64) :: res, t + + if(.not. seed_initialized) call random_distribution_seed_iint64(si,t) + res = rol64(st(2) * 5 , 7) * 9 + t = shiftl(st(2), 17) + st(3) = ieor(st(3), st(1)) + st(4) = ieor(st(4), st(2)) + st(2) = ieor(st(2), st(3)) + st(1) = ieor(st(1), st(4)) + st(3) = ieor(st(3), t) + st(4) = rol64(st(4), 45) + return + end function xoshiro256ss + + function rol64(x, k) result(res) + integer(int64), intent(in) :: x + integer(int32), intent(in) :: k + integer(int64) :: t1, t2, res + + t1 = shiftr(x, (64 - k)) + t2 = shiftl(x, k) + res = ior(t1, t2) + return + end function rol64 + + + subroutine jump + ! This is the jump function for the xoshiro256ss generator. It is equivalent + ! to 2^128 calls to xoshiro256ss(); it can be used to generate 2^128 + ! non-overlapping subsequences for parallel computations. + ! Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) + ! + ! Fortran 90 version translated from C by Jim-215-Fisher + integer(int64) :: jp(4) = [1733541517147835066_int64, & + -3051731464161248980_int64, & + -6244198995065845334_int64, & + 4155657270789760540_int64] + integer(int64) :: s1 = 0, s2 = 0, s3 = 0, s4 = 0, c = 1_int64 + integer(int32) :: i, j, k + + do i = 1, 4 + do j = 1, 64 + if(iand(jp(i), shiftl(c, j - 1)) /= 0) then + s1 = ieor(s1, st(1)) + s2 = ieor(s2, st(2)) + s3 = ieor(s3, st(3)) + s4 = ieor(s4, st(4)) + end if + k = xoshiro256ss( ) + end do + end do + st(1) = s1 + st(2) = s2 + st(3) = s3 + st(4) = s4 + end subroutine jump + + subroutine long_jump + ! This is the long-jump function for the xoshiro256ss generator. It is + ! equivalent to 2^192 calls to xoshiro256ss(); it can be used to generate + ! 2^64 starting points, from each of which jump() will generate 2^64 + ! non-overlapping subsequences for parallel distributed computations + ! Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) + ! + ! Fortran 90 version translated from C by Jim-215-Fisher + integer(int64) :: jp(4) = [8566230491382795199_int64, & + -4251311993797857357_int64, & + 8606660816089834049_int64, & + 4111957640723818037_int64] + integer(int64) :: s1 = 0, s2 = 0, s3 = 0, s4 = 0, c = 1_int64 + integer(int32) :: i, j, k + + do i = 1, 4 + do j = 1, 64 + if(iand(jp(i), shiftl(c, j - 1)) /= 0) then + s1 = ieor(s1, st(1)) + s2 = ieor(s2, st(2)) + s3 = ieor(s3, st(3)) + s4 = ieor(s4, st(4)) + end if + k = xoshiro256ss() + end do + end do + st(1) = s1 + st(2) = s2 + st(3) = s3 + st(4) = s4 + end subroutine long_jump + + function splitmix64(s) result(res) + ! Written in 2015 by Sebastiano Vigna (vigna@acm.org) + ! This is a fixed-increment version of Java 8's SplittableRandom + ! generator. + ! See http://dx.doi.org/10.1145/2714064.2660195 and + ! http://docs.oracle.com/javase/8/docs/api/java/util/SplittableRandom.html + ! + ! It is a very fast generator passing BigCrush, and it can be useful if + ! for some reason you absolutely want 64 bits of state. + ! + ! Fortran 90 translated from C by Jim-215-Fisher + ! + integer(int64) :: res, int01, int02, int03 + integer(int64), intent(in), optional :: s + data int01, int02, int03/-7046029254386353131_int64, & + -4658895280553007687_int64, & + -7723592293110705685_int64/ + + if(present(s)) si = s + res = si + si = res + int01 + res = ieor(res, shiftr(res, 30)) * int02 + res = ieor(res, shiftr(res, 27)) * int03 + res = ieor(res, shiftr(res, 31)) + return + end function splitmix64 + + #:for k1, t1 in INT_KINDS_TYPES + subroutine random_distribution_seed_${t1[0]}$${k1}$(put, get) + ! Random seed for distribution + ${t1}$, intent(in) :: put + ${t1}$, intent(out) :: get + integer(int64) :: tmp + integer :: i + + tmp = splitmix64(int(put, kind = int64)) + do i = 1, 10 + tmp = splitmix64( ) + end do + do i = 1, 4 + tmp = splitmix64( ) + st(i) = tmp + end do + get = int(tmp, kind = ${k1}$) + seed_initialized = .true. + end subroutine random_distribution_seed_${t1[0]}$${k1}$ + + #:endfor +end module stdlib_stats_distribution_PRNG \ No newline at end of file From 56ce45ec5b439e98f775f0fa4e28bcbc1924d49f Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sat, 19 Dec 2020 13:25:45 -0500 Subject: [PATCH 03/73] New --- src/CMakeLists.txt | 4 ++++ src/Makefile.manual | 29 ++++++++++++++--------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ea7403663..d569ebcb1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,9 @@ # Create a list of the files to be preprocessed set(fppFiles + stdlib_bitsets.fypp + stdlib_bitsets_64.fypp + stdlib_bitsets_large.fypp stdlib_io.fypp stdlib_linalg.fypp stdlib_linalg_diag.fypp @@ -15,6 +18,7 @@ set(fppFiles stdlib_quadrature.fypp stdlib_quadrature_trapz.fypp stdlib_quadrature_simps.fypp + stdlib_stats_distributions_PRNG.fypp ) diff --git a/src/Makefile.manual b/src/Makefile.manual index 129dbe553..f4885240a 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -1,5 +1,8 @@ SRC = f18estop.f90 \ stdlib_ascii.f90 \ + stdlib_bitsets.f90 \ + stdlib_bitsets_64.f90 \ + stdlib_bitsets_large.f90 \ stdlib_error.f90 \ stdlib_io.f90 \ stdlib_kinds.f90 \ @@ -13,10 +16,8 @@ SRC = f18estop.f90 \ stdlib_stats_mean.f90 \ stdlib_stats_moment.f90 \ stdlib_stats_var.f90 \ - stdlib_stats_distribution.f90 \ - stdlib_stats_distribution_rvs.f90 \ - stdlib_stats_distribution_implementation.f90 \ - + stdlib_stats_distribution_PRNG.f90 + LIB = libstdlib.a @@ -43,6 +44,9 @@ clean: # Fortran module dependencies f18estop.o: stdlib_error.o +stdlib_bitsets.o: stdlib_kinds.o +stdlib_bitsets_64.o: stdlib_bitsets.o +stdlib_bitsets_large.o: stdlib_bitsets.o stdlib_error.o: stdlib_optval.o stdlib_io.o: \ stdlib_error.o \ @@ -64,14 +68,12 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o -stdlib_stats_distribution_rvs.o: stdlib_kinds.o -stdlib_stats_distribution.o: \ - stdlib_error.o \ - stdlib_kinds.o \ - stdlib_stats_distribution_rvs.o \ -stdlib_stats_distribution_imp.o: \ - stdlib_stats_distribution.o +stdlib_stats_distribution_PRNG.o: stdlib_kinds.o + # Fortran sources that are built from fypp templates +stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp +stdlib_bitsets_large.f90: stdlib_bitsets_large.fypp +stdlib_bitsets.f90: stdlib_bitsets.fypp stdlib_io.f90: stdlib_io.fypp stdlib_linalg.f90: stdlib_linalg.fypp stdlib_linalg_diag.f90: stdlib_linalg_diag.fypp @@ -80,7 +82,4 @@ stdlib_stats.f90: stdlib_stats.fypp stdlib_stats_mean.f90: stdlib_stats_mean.fypp stdlib_stats_moment.f90: stdlib_stats_moment.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp -stdlib_stats_distribution_rvs.f90: stdlib_stats_distribution_rvs.fypp -stdlib_stats_distribution.f90: stdlib_stats_distribution.fypp -stdlib_stats_distribution_implementation.f90: \ - stdlib_stats_distribution_implementation.fypp \ No newline at end of file +stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution_PRNG.fypp \ No newline at end of file From ba5e11fe9e3aae70d2b1cf9a2cb63edcc9b7d030 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sat, 19 Dec 2020 13:27:12 -0500 Subject: [PATCH 04/73] New --- src/tests/stats/CMakeLists.txt | 1 + src/tests/stats/Makefile.manual | 6 +- src/tests/stats/test_distribution_PRNG.fypp | 66 +++++++++++++++++++++ 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 src/tests/stats/test_distribution_PRNG.fypp diff --git a/src/tests/stats/CMakeLists.txt b/src/tests/stats/CMakeLists.txt index 36ffc7aeb..38f9bb84b 100644 --- a/src/tests/stats/CMakeLists.txt +++ b/src/tests/stats/CMakeLists.txt @@ -5,6 +5,7 @@ ADDTEST(moment) ADDTEST(rawmoment) ADDTEST(var) ADDTEST(varn) +ADDTEST(distribution_PRNG) if(DEFINED CMAKE_MAXIMUM_RANK) if(${CMAKE_MAXIMUM_RANK} GREATER 7) diff --git a/src/tests/stats/Makefile.manual b/src/tests/stats/Makefile.manual index aacaf98ab..a0731e8f4 100644 --- a/src/tests/stats/Makefile.manual +++ b/src/tests/stats/Makefile.manual @@ -1,3 +1,5 @@ -PROGS_SRC = test_mean.f90 test_moment.f90 test_var.f90 -include ../Makefile.manual.test.mk +PROGS_SRC = test_mean.f90 test_moment.f90 test_var.f90 \ + test_distribution_PRNG.f90 + +include ../Makefile.manual.test.mk \ No newline at end of file diff --git a/src/tests/stats/test_distribution_PRNG.fypp b/src/tests/stats/test_distribution_PRNG.fypp new file mode 100644 index 000000000..d43d82b60 --- /dev/null +++ b/src/tests/stats/test_distribution_PRNG.fypp @@ -0,0 +1,66 @@ +#:include "common.fypp" +program test_distribution_PRNG + use stdlib_error, only : check + use stdlib_kinds + use stdlib_stats_distribution_PRNG, only : & + random_seed => random_distribution_seed, random_rand => rand + + implicit none + logical :: warn = .true. + + call test_random_seed + #:for k1, t1 in INT_KINDS_TYPES + call test_random_rand_${t1[0]}$${k1}$ + #:endfor + contains + + subroutine test_random_seed + integer :: put, get, res(5) + integer :: ans(5) = [-1859553078, -1933696596, -642834430, & + 1711399314, 1548311463] + integer :: i + + print *, "" + print *, "Test random_seed" + put = 135792468 + do i = 1, 5 + call random_seed(put,get) + res(i) = get + put = get + end do + call check(all(res == ans), msg="random seed test failed.",warn=warn) + end subroutine test_random_seed + + #:for k1, t1 in INT_KINDS_TYPES + subroutine test_random_rand_${t1[0]}$${k1}$ + integer :: put, get, i + + #:if k1 == "int8" + ${t1}$ :: res(5), ans(5)=[118, -15, -72, 101, 70] + #:elif k1 == "int16" + ${t1}$ :: res(5), ans(5)=[30286, -3799, -18204, 25947, 18148] + #:elif k1 == "int32" + ${t1}$ :: res(5), ans(5)=[1984865646, -248954393, -1192993267, & + 1700514835, 1189401802] + #:else + ${t1}$ :: res(5), ans(5)=[8524933037632333570_int64, & + -1069250973542918798_int64, & + -5123867065024149335_int64, & + 7303655603304982073_int64, & + 5108441843522503546_int64] + #:endif + + + print *, "" + print *, "Test random_rand with kind ${k1}$" + put = 12345678 + call random_seed(put, get) + do i = 1, 5 + res(i) = random_rand(1_${k1}$) + end do + call check(all(res == ans), msg="random_rand with kind ${k1}$ test" & + //" failed.", warn=warn) + end subroutine test_random_rand_${t1[0]}$${k1}$ + + #:endfor +end program test_distribution_PRNG \ No newline at end of file From cb7c376d9727d3c9983d506b9634e6bbef93e0cc Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sat, 19 Dec 2020 13:47:07 -0500 Subject: [PATCH 05/73] convert .fypp .f90 for test file --- src/tests/stats/test_distribution_PRNG.f90 | 103 +++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/tests/stats/test_distribution_PRNG.f90 diff --git a/src/tests/stats/test_distribution_PRNG.f90 b/src/tests/stats/test_distribution_PRNG.f90 new file mode 100644 index 000000000..26a6a031d --- /dev/null +++ b/src/tests/stats/test_distribution_PRNG.f90 @@ -0,0 +1,103 @@ +program test_distribution_PRNG + use stdlib_error, only : check + use stdlib_kinds + use stdlib_stats_distribution_PRNG, only : & + random_seed => random_distribution_seed, random_rand => rand + + implicit none + logical :: warn = .true. + + call test_random_seed + call test_random_rand_iint8 + call test_random_rand_iint16 + call test_random_rand_iint32 + call test_random_rand_iint64 + contains + + subroutine test_random_seed + integer :: put, get, res(5) + integer :: ans(5) = [-1859553078, -1933696596, -642834430, & + 1711399314, 1548311463] + integer :: i + + print *, "" + print *, "Test random_seed" + put = 135792468 + do i = 1, 5 + call random_seed(put,get) + res(i) = get + put = get + end do + call check(all(res == ans), msg="random seed test failed.",warn=warn) + end subroutine test_random_seed + + subroutine test_random_rand_iint8 + integer :: put, get, i + + integer(int8) :: res(5), ans(5)=[118, -15, -72, 101, 70] + + + print *, "" + print *, "Test random_rand with kind int8" + put = 12345678 + call random_seed(put, get) + do i = 1, 5 + res(i) = random_rand(1_int8) + end do + call check(all(res == ans), msg="random seed test failed.",warn=warn) + end subroutine test_random_rand_iint8 + + subroutine test_random_rand_iint16 + integer :: put, get, i + + integer(int16) :: res(5), ans(5)=[30286, -3799, -18204, 25947, 18148] + + + print *, "" + print *, "Test random_rand with kind int16" + put = 12345678 + call random_seed(put, get) + do i = 1, 5 + res(i) = random_rand(1_int16) + end do + call check(all(res == ans), msg="random seed test failed.",warn=warn) + end subroutine test_random_rand_iint16 + + subroutine test_random_rand_iint32 + integer :: put, get, i + + integer(int32) :: res(5), ans(5)=[1984865646, -248954393, -1192993267, & + 1700514835, 1189401802] + + + print *, "" + print *, "Test random_rand with kind int32" + put = 12345678 + call random_seed(put, get) + do i = 1, 5 + res(i) = random_rand(1_int32) + end do + call check(all(res == ans), msg="random seed test failed.",warn=warn) + end subroutine test_random_rand_iint32 + + subroutine test_random_rand_iint64 + integer :: put, get, i + + integer(int64) :: res(5), ans(5)=[8524933037632333570_int64, & + -1069250973542918798_int64, & + -5123867065024149335_int64, & + 7303655603304982073_int64, & + 5108441843522503546_int64] + + + print *, "" + print *, "Test random_rand with kind int64" + put = 12345678 + call random_seed(put, get) + do i = 1, 5 + res(i) = random_rand(1_int64) + end do + call check(all(res == ans), msg="random seed test failed.",warn=warn) + end subroutine test_random_rand_iint64 + +end program test_distribution_PRNG \ No newline at end of file From f23580bd59fd9d09b3e9ffba72e1b9ab9d45a9e4 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sat, 19 Dec 2020 14:12:34 -0500 Subject: [PATCH 06/73] correct mispell in CMakeLists.txt --- src/CMakeLists.txt | 2 +- src/stdlib_stats_distribution_PRNG.fypp | 40 ++++++++++++------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d569ebcb1..b515bc9f4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,7 +18,7 @@ set(fppFiles stdlib_quadrature.fypp stdlib_quadrature_trapz.fypp stdlib_quadrature_simps.fypp - stdlib_stats_distributions_PRNG.fypp + stdlib_stats_distribution_PRNG.fypp ) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index fba0910c4..ce9475127 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -7,23 +7,23 @@ module stdlib_stats_distribution_PRNG integer(int64), save :: st(4), si = 614872703977525537_int64 logical, save :: seed_initialized = .false. - public :: random_distribution_seed - + public :: random_distribution_seed + ! distribution internal use public :: rand, jump, long_jump interface rand ! Generation of random integers with different kinds - ! + ! #:for k1, t1 in INT_KINDS_TYPES module procedure rand_${t1[0]}$${k1}$ - #:endfor + #:endfor end interface rand interface random_distribution_seed - ! Set seed of PRNG for statistical distributions - ! + ! Set seed of PRNG for statistical distributions + ! #:for k1, t1 in INT_KINDS_TYPES module procedure random_distribution_seed_${t1[0]}$${k1}$ #:endfor @@ -34,19 +34,19 @@ module stdlib_stats_distribution_PRNG #:for k1, t1 in INT_KINDS_TYPES module function rand_${t1[0]}$${k1}$(n) result(res) - ! Random integer generation for various kinds - ! result = [0, 2^k - 1], k = 8, 16, 32, 64, depending on input kind - ! + ! Random integer generation for various kinds + ! result = [0, 2^k - 1], k = 8, 16, 32, 64, depending on input kind + ! ${t1}$, intent(in) :: n ${t1}$ :: res integer :: k - + k = MAX_INT_BIT_SIZE - bit_size(n) res = shiftr(xoshiro256ss( ), k) end function rand_${t1[0]}$${k1}$ - + #:endfor - + function xoshiro256ss( ) result (res) ! Generate random 64-bit integers ! Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) @@ -63,7 +63,7 @@ module stdlib_stats_distribution_PRNG ! Fortran 90 version translated from C by Jim-215-Fisher ! integer(int64) :: res, t - + if(.not. seed_initialized) call random_distribution_seed_iint64(si,t) res = rol64(st(2) * 5 , 7) * 9 t = shiftl(st(2), 17) @@ -120,9 +120,9 @@ module stdlib_stats_distribution_PRNG end subroutine jump subroutine long_jump - ! This is the long-jump function for the xoshiro256ss generator. It is - ! equivalent to 2^192 calls to xoshiro256ss(); it can be used to generate - ! 2^64 starting points, from each of which jump() will generate 2^64 + ! This is the long-jump function for the xoshiro256ss generator. It is + ! equivalent to 2^192 calls to xoshiro256ss(); it can be used to generate + ! 2^64 starting points, from each of which jump() will generate 2^64 ! non-overlapping subsequences for parallel distributed computations ! Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) ! @@ -130,7 +130,7 @@ module stdlib_stats_distribution_PRNG integer(int64) :: jp(4) = [8566230491382795199_int64, & -4251311993797857357_int64, & 8606660816089834049_int64, & - 4111957640723818037_int64] + 4111957640723818037_int64] integer(int64) :: s1 = 0, s2 = 0, s3 = 0, s4 = 0, c = 1_int64 integer(int32) :: i, j, k @@ -150,7 +150,7 @@ module stdlib_stats_distribution_PRNG st(3) = s3 st(4) = s4 end subroutine long_jump - + function splitmix64(s) result(res) ! Written in 2015 by Sebastiano Vigna (vigna@acm.org) ! This is a fixed-increment version of Java 8's SplittableRandom @@ -167,7 +167,7 @@ module stdlib_stats_distribution_PRNG integer(int64), intent(in), optional :: s data int01, int02, int03/-7046029254386353131_int64, & -4658895280553007687_int64, & - -7723592293110705685_int64/ + -7723592293110705685_int64/ if(present(s)) si = s res = si @@ -197,6 +197,6 @@ module stdlib_stats_distribution_PRNG get = int(tmp, kind = ${k1}$) seed_initialized = .true. end subroutine random_distribution_seed_${t1[0]}$${k1}$ - + #:endfor end module stdlib_stats_distribution_PRNG \ No newline at end of file From 1e873fc48eb5584c24ddaeb3bed1614af0bb8904 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sat, 19 Dec 2020 14:26:59 -0500 Subject: [PATCH 07/73] change rand to dist_rand --- src/stdlib_stats_distribution_PRNG.fypp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index ce9475127..ef138b216 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -10,16 +10,16 @@ module stdlib_stats_distribution_PRNG public :: random_distribution_seed ! distribution internal use - public :: rand, jump, long_jump + public :: dist_rand, jump, long_jump - interface rand + interface dist_rand ! Generation of random integers with different kinds ! #:for k1, t1 in INT_KINDS_TYPES - module procedure rand_${t1[0]}$${k1}$ + module procedure dist_rand_${t1[0]}$${k1}$ #:endfor - end interface rand + end interface dist_rand interface random_distribution_seed ! Set seed of PRNG for statistical distributions @@ -33,7 +33,7 @@ module stdlib_stats_distribution_PRNG contains #:for k1, t1 in INT_KINDS_TYPES - module function rand_${t1[0]}$${k1}$(n) result(res) + module function dist_rand_${t1[0]}$${k1}$(n) result(res) ! Random integer generation for various kinds ! result = [0, 2^k - 1], k = 8, 16, 32, 64, depending on input kind ! @@ -43,7 +43,7 @@ module stdlib_stats_distribution_PRNG k = MAX_INT_BIT_SIZE - bit_size(n) res = shiftr(xoshiro256ss( ), k) - end function rand_${t1[0]}$${k1}$ + end function dist_rand_${t1[0]}$${k1}$ #:endfor From 561fbf25aa72fa06749d5e06e7ac51da45fc58f1 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sat, 19 Dec 2020 14:27:37 -0500 Subject: [PATCH 08/73] change rand to dist_rand --- src/tests/stats/test_distribution_PRNG.f90 | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/tests/stats/test_distribution_PRNG.f90 b/src/tests/stats/test_distribution_PRNG.f90 index 26a6a031d..984c4fe35 100644 --- a/src/tests/stats/test_distribution_PRNG.f90 +++ b/src/tests/stats/test_distribution_PRNG.f90 @@ -2,7 +2,7 @@ program test_distribution_PRNG use stdlib_error, only : check use stdlib_kinds use stdlib_stats_distribution_PRNG, only : & - random_seed => random_distribution_seed, random_rand => rand + random_seed => random_distribution_seed, random_rand => dist_rand implicit none logical :: warn = .true. @@ -44,7 +44,8 @@ subroutine test_random_rand_iint8 do i = 1, 5 res(i) = random_rand(1_int8) end do - call check(all(res == ans), msg="random seed test failed.",warn=warn) + call check(all(res == ans), msg="random_rand with kind int8 test" & + //" failed.", warn=warn) end subroutine test_random_rand_iint8 subroutine test_random_rand_iint16 @@ -60,7 +61,8 @@ subroutine test_random_rand_iint16 do i = 1, 5 res(i) = random_rand(1_int16) end do - call check(all(res == ans), msg="random seed test failed.",warn=warn) + call check(all(res == ans), msg="random_rand with kind int16 test" & + //" failed.", warn=warn) end subroutine test_random_rand_iint16 subroutine test_random_rand_iint32 @@ -77,7 +79,8 @@ subroutine test_random_rand_iint32 do i = 1, 5 res(i) = random_rand(1_int32) end do - call check(all(res == ans), msg="random seed test failed.",warn=warn) + call check(all(res == ans), msg="random_rand with kind int32 test" & + //" failed.", warn=warn) end subroutine test_random_rand_iint32 subroutine test_random_rand_iint64 @@ -97,7 +100,8 @@ subroutine test_random_rand_iint64 do i = 1, 5 res(i) = random_rand(1_int64) end do - call check(all(res == ans), msg="random seed test failed.",warn=warn) + call check(all(res == ans), msg="random_rand with kind int64 test" & + //" failed.", warn=warn) end subroutine test_random_rand_iint64 end program test_distribution_PRNG \ No newline at end of file From 7ddde0be83ebbc667e3a90b9b07323dddf5c57c3 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sat, 19 Dec 2020 14:44:02 -0500 Subject: [PATCH 09/73] Add files via upload --- src/stdlib_stats_distribution_PRNG.fypp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index ef138b216..5f95a13b1 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -33,7 +33,7 @@ module stdlib_stats_distribution_PRNG contains #:for k1, t1 in INT_KINDS_TYPES - module function dist_rand_${t1[0]}$${k1}$(n) result(res) + function dist_rand_${t1[0]}$${k1}$(n) result(res) ! Random integer generation for various kinds ! result = [0, 2^k - 1], k = 8, 16, 32, 64, depending on input kind ! @@ -78,7 +78,7 @@ module stdlib_stats_distribution_PRNG function rol64(x, k) result(res) integer(int64), intent(in) :: x - integer(int32), intent(in) :: k + integer, intent(in) :: k integer(int64) :: t1, t2, res t1 = shiftr(x, (64 - k)) @@ -100,7 +100,7 @@ module stdlib_stats_distribution_PRNG -6244198995065845334_int64, & 4155657270789760540_int64] integer(int64) :: s1 = 0, s2 = 0, s3 = 0, s4 = 0, c = 1_int64 - integer(int32) :: i, j, k + integer :: i, j, k do i = 1, 4 do j = 1, 64 From 30da4374d570c035b274556dd557750f913acf1d Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sat, 19 Dec 2020 14:44:39 -0500 Subject: [PATCH 10/73] remove tab --- src/tests/stats/test_distribution_PRNG.f90 | 112 +++++++++++---------- 1 file changed, 57 insertions(+), 55 deletions(-) diff --git a/src/tests/stats/test_distribution_PRNG.f90 b/src/tests/stats/test_distribution_PRNG.f90 index 984c4fe35..e76182bac 100644 --- a/src/tests/stats/test_distribution_PRNG.f90 +++ b/src/tests/stats/test_distribution_PRNG.f90 @@ -2,22 +2,24 @@ program test_distribution_PRNG use stdlib_error, only : check use stdlib_kinds use stdlib_stats_distribution_PRNG, only : & - random_seed => random_distribution_seed, random_rand => dist_rand - + random_seed => random_distribution_seed, random_rand => dist_rand + implicit none logical :: warn = .true. call test_random_seed - call test_random_rand_iint8 - call test_random_rand_iint16 - call test_random_rand_iint32 - call test_random_rand_iint64 + call test_random_rand_iint8 + call test_random_rand_iint16 + call test_random_rand_iint32 + call test_random_rand_iint64 + + contains subroutine test_random_seed integer :: put, get, res(5) - integer :: ans(5) = [-1859553078, -1933696596, -642834430, & - 1711399314, 1548311463] + integer :: ans(5) = [-1859553078, -1933696596, -642834430, & + 1711399314, 1548311463] integer :: i print *, "" @@ -32,76 +34,76 @@ subroutine test_random_seed end subroutine test_random_seed subroutine test_random_rand_iint8 - integer :: put, get, i - - integer(int8) :: res(5), ans(5)=[118, -15, -72, 101, 70] + integer :: put, get, i + integer(int8) :: res(5), ans(5)=[118, -15, -72, 101, 70] - print *, "" - print *, "Test random_rand with kind int8" + + print *, "" + print *, "Test random_rand with kind int8" put = 12345678 - call random_seed(put, get) - do i = 1, 5 - res(i) = random_rand(1_int8) - end do + call random_seed(put, get) + do i = 1, 5 + res(i) = random_rand(1_int8) + end do call check(all(res == ans), msg="random_rand with kind int8 test" & - //" failed.", warn=warn) - end subroutine test_random_rand_iint8 + //" failed.", warn=warn) + end subroutine test_random_rand_iint8 subroutine test_random_rand_iint16 - integer :: put, get, i - + integer :: put, get, i + integer(int16) :: res(5), ans(5)=[30286, -3799, -18204, 25947, 18148] - print *, "" - print *, "Test random_rand with kind int16" + print *, "" + print *, "Test random_rand with kind int16" put = 12345678 - call random_seed(put, get) - do i = 1, 5 - res(i) = random_rand(1_int16) - end do + call random_seed(put, get) + do i = 1, 5 + res(i) = random_rand(1_int16) + end do call check(all(res == ans), msg="random_rand with kind int16 test" & - //" failed.", warn=warn) - end subroutine test_random_rand_iint16 + //" failed.", warn=warn) + end subroutine test_random_rand_iint16 subroutine test_random_rand_iint32 - integer :: put, get, i - + integer :: put, get, i + integer(int32) :: res(5), ans(5)=[1984865646, -248954393, -1192993267, & - 1700514835, 1189401802] + 1700514835, 1189401802] - print *, "" - print *, "Test random_rand with kind int32" + print *, "" + print *, "Test random_rand with kind int32" put = 12345678 - call random_seed(put, get) - do i = 1, 5 - res(i) = random_rand(1_int32) - end do + call random_seed(put, get) + do i = 1, 5 + res(i) = random_rand(1_int32) + end do call check(all(res == ans), msg="random_rand with kind int32 test" & - //" failed.", warn=warn) - end subroutine test_random_rand_iint32 + //" failed.", warn=warn) + end subroutine test_random_rand_iint32 subroutine test_random_rand_iint64 - integer :: put, get, i - - integer(int64) :: res(5), ans(5)=[8524933037632333570_int64, & - -1069250973542918798_int64, & - -5123867065024149335_int64, & - 7303655603304982073_int64, & - 5108441843522503546_int64] + integer :: put, get, i + integer(int64) :: res(5), ans(5)=[8524933037632333570_int64, & + -1069250973542918798_int64, & + -5123867065024149335_int64, & + 7303655603304982073_int64, & + 5108441843522503546_int64] - print *, "" - print *, "Test random_rand with kind int64" + + print *, "" + print *, "Test random_rand with kind int64" put = 12345678 - call random_seed(put, get) - do i = 1, 5 - res(i) = random_rand(1_int64) - end do + call random_seed(put, get) + do i = 1, 5 + res(i) = random_rand(1_int64) + end do call check(all(res == ans), msg="random_rand with kind int64 test" & - //" failed.", warn=warn) - end subroutine test_random_rand_iint64 + //" failed.", warn=warn) + end subroutine test_random_rand_iint64 end program test_distribution_PRNG \ No newline at end of file From c107d1246e53b93e29de9fbafa964b3f399fd1f3 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sat, 19 Dec 2020 23:55:43 -0500 Subject: [PATCH 11/73] minor change --- src/stdlib_stats_distribution_PRNG.fypp | 37 +++++++++++++++---------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 5f95a13b1..90d9f367e 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -7,36 +7,44 @@ module stdlib_stats_distribution_PRNG integer(int64), save :: st(4), si = 614872703977525537_int64 logical, save :: seed_initialized = .false. - public :: random_distribution_seed - - ! distribution internal use - public :: dist_rand, jump, long_jump + public :: random_seed + public :: dist_rand + public :: jump + public :: long_jump interface dist_rand - ! Generation of random integers with different kinds - ! + !! Version experimental + !! + !! Generation of random integers with different kinds + !! ([Specification](../page/specs/stdlib_stats_distribution_PRNG.html# + !! description)) #:for k1, t1 in INT_KINDS_TYPES module procedure dist_rand_${t1[0]}$${k1}$ #:endfor end interface dist_rand - interface random_distribution_seed - ! Set seed of PRNG for statistical distributions - ! + interface random_seed + !! Version experimental + !! + !! Set seed value for random number generator + !! ([Specification](../page/specs/stdlib_stats_distribution_PRNG.html# + !! description)) + !! #:for k1, t1 in INT_KINDS_TYPES module procedure random_distribution_seed_${t1[0]}$${k1}$ #:endfor - end interface random_distribution_seed + end interface random_seed contains #:for k1, t1 in INT_KINDS_TYPES function dist_rand_${t1[0]}$${k1}$(n) result(res) - ! Random integer generation for various kinds - ! result = [0, 2^k - 1], k = 8, 16, 32, 64, depending on input kind - ! + !! Random integer generation for various kinds + !! result = [-2^k, 2^k - 1], k = 7, 15, 31, 63, depending on input kind + !! Result is used as bit model number instead of regular arithmetic number + !! ${t1}$, intent(in) :: n ${t1}$ :: res integer :: k @@ -180,7 +188,8 @@ module stdlib_stats_distribution_PRNG #:for k1, t1 in INT_KINDS_TYPES subroutine random_distribution_seed_${t1[0]}$${k1}$(put, get) - ! Random seed for distribution + !! Set seed value for random number generator + !! ${t1}$, intent(in) :: put ${t1}$, intent(out) :: get integer(int64) :: tmp From aee71b67b71f3c173cc4ff13f976cbc785b7ac4f Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sat, 19 Dec 2020 23:56:44 -0500 Subject: [PATCH 12/73] Add specs --- doc/specs/index.md | 1 + doc/specs/stdlib_stats_distribution_PRNG.md | 87 +++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 doc/specs/stdlib_stats_distribution_PRNG.md diff --git a/doc/specs/index.md b/doc/specs/index.md index 91284c2df..4a9938dbb 100644 --- a/doc/specs/index.md +++ b/doc/specs/index.md @@ -17,6 +17,7 @@ This is and index/directory of the specifications (specs) for each new module/fe - [optval](./stdlib_optval.html) - Fallback value for optional arguments - [quadrature](./stdlib_quadrature.html) - Numerical integration - [stats](./stdlib_stats.html) - Descriptive Statistics + - [stats_distribution](./stdlib_stats_distribution_PRNG.html) - Probability Distributions random number generator ## Missing specs diff --git a/doc/specs/stdlib_stats_distribution_PRNG.md b/doc/specs/stdlib_stats_distribution_PRNG.md new file mode 100644 index 000000000..cfe090104 --- /dev/null +++ b/doc/specs/stdlib_stats_distribution_PRNG.md @@ -0,0 +1,87 @@ +--- +title: stats_distribution +--- + +# Statistical Distributions PRNG module + +[TOC] + +## `random_seed` - set or get a value of seed to the random distribution pseudorandom number generator + +### Status + +Experimental + +### Description + +Set or get the seed value before calling random distribution for variates. + +### Syntax + +`call random_seed(put, get)` + +### Arguments + +`put`: argument has intent `in` and may be a scalar of type `integer`. + +`get`: argument has intent `out` and is a scalar of type `integer`. + +### Return value + +Return a scalar of type `integer`. + +### Example + +```fortran +program demo_random_seed + use stdlib_stats_distribution_PRNG, only : random_seed + implicit none + integer :: seed_put, seed_get + + seed_put = 1234567 + call random_seed(seed_put, seed_get) ! set and get current value of seed +end program demo_random_seed +``` + +## `dist_rand` - Get a random integer with specified kind + +### Status + +Experimental + +### Description + +Generate a integer random number in a specific range [-2^k, 2^k - 1] according to the input integer kind n. This random number will be operated by bit opeartors instead of normal arithmetic operators. + +### Syntax + +`result = dist_rand(n)` + +### Arguments + +`n`: argument has intent `in` is a scalar of type `integer`. + +### Return value + +Return a scalar of type `integer`. + +### Example + +```fortran +program demo_dist_rand + use stdlib_stats_distribution_PRNG, only : dist_rand, random_seed + implicit none + integer :: put, get + + put = 135792468 + call random_seed(put, get) ! set and get current value of seed + print *, dist_rand(1_int8) ! random integer in [-2^7, 2^7 - 1] +! -90 + print *, dist_rand(1_int16) ! random integer in [-2^15, 2^15 - 1] +! -32725 + print *, dist_rand(1_int32) ! random integer in [-2^31, 2^31 - 1] +! -1601563881 + print *, dist_rand(1_int64) ! random integer in [-2^63, 2^63 - 1] +! 180977695517992208 +end program demo_dist_rand +``` From 899302eba8438c4ce7a809a98d384721b973d6b0 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 00:04:17 -0500 Subject: [PATCH 13/73] correct random_seed --- src/tests/stats/test_distribution_PRNG.f90 | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/tests/stats/test_distribution_PRNG.f90 b/src/tests/stats/test_distribution_PRNG.f90 index e76182bac..9910ae49c 100644 --- a/src/tests/stats/test_distribution_PRNG.f90 +++ b/src/tests/stats/test_distribution_PRNG.f90 @@ -1,8 +1,7 @@ program test_distribution_PRNG use stdlib_error, only : check use stdlib_kinds - use stdlib_stats_distribution_PRNG, only : & - random_seed => random_distribution_seed, random_rand => dist_rand + use stdlib_stats_distribution_PRNG, only : random_seed, dist_rand implicit none logical :: warn = .true. @@ -44,7 +43,7 @@ subroutine test_random_rand_iint8 put = 12345678 call random_seed(put, get) do i = 1, 5 - res(i) = random_rand(1_int8) + res(i) = dist_rand(1_int8) end do call check(all(res == ans), msg="random_rand with kind int8 test" & //" failed.", warn=warn) @@ -61,7 +60,7 @@ subroutine test_random_rand_iint16 put = 12345678 call random_seed(put, get) do i = 1, 5 - res(i) = random_rand(1_int16) + res(i) = dist_rand(1_int16) end do call check(all(res == ans), msg="random_rand with kind int16 test" & //" failed.", warn=warn) @@ -79,7 +78,7 @@ subroutine test_random_rand_iint32 put = 12345678 call random_seed(put, get) do i = 1, 5 - res(i) = random_rand(1_int32) + res(i) = dist_rand(1_int32) end do call check(all(res == ans), msg="random_rand with kind int32 test" & //" failed.", warn=warn) @@ -100,7 +99,7 @@ subroutine test_random_rand_iint64 put = 12345678 call random_seed(put, get) do i = 1, 5 - res(i) = random_rand(1_int64) + res(i) = dist_rand(1_int64) end do call check(all(res == ans), msg="random_rand with kind int64 test" & //" failed.", warn=warn) From 6ce74dc39cac839c3d00361df8f7b757c10fc03e Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 00:20:50 -0500 Subject: [PATCH 14/73] minor change --- doc/specs/index.md | 2 +- doc/specs/stdlib_stats_distribution_PRNG.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/specs/index.md b/doc/specs/index.md index 4a9938dbb..ad99ebf78 100644 --- a/doc/specs/index.md +++ b/doc/specs/index.md @@ -17,7 +17,7 @@ This is and index/directory of the specifications (specs) for each new module/fe - [optval](./stdlib_optval.html) - Fallback value for optional arguments - [quadrature](./stdlib_quadrature.html) - Numerical integration - [stats](./stdlib_stats.html) - Descriptive Statistics - - [stats_distribution](./stdlib_stats_distribution_PRNG.html) - Probability Distributions random number generator + - [stats_distribution_PRNG](./stdlib_stats_distribution_PRNG.html) - Probability Distributions random number generator ## Missing specs diff --git a/doc/specs/stdlib_stats_distribution_PRNG.md b/doc/specs/stdlib_stats_distribution_PRNG.md index cfe090104..63bcdc3bc 100644 --- a/doc/specs/stdlib_stats_distribution_PRNG.md +++ b/doc/specs/stdlib_stats_distribution_PRNG.md @@ -6,7 +6,7 @@ title: stats_distribution [TOC] -## `random_seed` - set or get a value of seed to the random distribution pseudorandom number generator +## `random_seed` - set or get a value of seed to the probability distribution pseudorandom number generator ### Status @@ -14,7 +14,7 @@ Experimental ### Description -Set or get the seed value before calling random distribution for variates. +Set or get the seed value before calling probability distribution for variates. ### Syntax From da37e07e0e7baba62fd4cacd7e520bd819f7f04a Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 01:00:41 -0500 Subject: [PATCH 15/73] correct syntax --- doc/specs/stdlib_stats_distribution_PRNG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/specs/stdlib_stats_distribution_PRNG.md b/doc/specs/stdlib_stats_distribution_PRNG.md index 63bcdc3bc..138376760 100644 --- a/doc/specs/stdlib_stats_distribution_PRNG.md +++ b/doc/specs/stdlib_stats_distribution_PRNG.md @@ -18,7 +18,7 @@ Set or get the seed value before calling probability distribution for variates. ### Syntax -`call random_seed(put, get)` +`call [[stdlib_stats_distribution_PRNG(module):random_seed(interface)]](put, get)` ### Arguments @@ -55,7 +55,7 @@ Generate a integer random number in a specific range [-2^k, 2^k - 1] according t ### Syntax -`result = dist_rand(n)` +`result = [[stdlib_stats_distribution_PRNG(module):dist_rand(interface)]](n)` ### Arguments From 29710867f930302ae7b49357c8e1a76dc2d9b346 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 17:49:54 -0500 Subject: [PATCH 16/73] Update doc/specs/stdlib_stats_distribution_PRNG.md Co-authored-by: Jeremie Vandenplas --- doc/specs/stdlib_stats_distribution_PRNG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/specs/stdlib_stats_distribution_PRNG.md b/doc/specs/stdlib_stats_distribution_PRNG.md index 138376760..0c4f235e8 100644 --- a/doc/specs/stdlib_stats_distribution_PRNG.md +++ b/doc/specs/stdlib_stats_distribution_PRNG.md @@ -14,7 +14,7 @@ Experimental ### Description -Set or get the seed value before calling probability distribution for variates. +Set or get the seed value before calling the probability distribution pseudorandom number generator for variates. ### Syntax From c7d3373c47839a55985eec138222635353d17df4 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 17:50:16 -0500 Subject: [PATCH 17/73] Update doc/specs/stdlib_stats_distribution_PRNG.md Co-authored-by: Jeremie Vandenplas --- doc/specs/stdlib_stats_distribution_PRNG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/specs/stdlib_stats_distribution_PRNG.md b/doc/specs/stdlib_stats_distribution_PRNG.md index 0c4f235e8..fc540850e 100644 --- a/doc/specs/stdlib_stats_distribution_PRNG.md +++ b/doc/specs/stdlib_stats_distribution_PRNG.md @@ -22,7 +22,7 @@ Set or get the seed value before calling the probability distribution pseudorand ### Arguments -`put`: argument has intent `in` and may be a scalar of type `integer`. +`put`: argument has `intent(in)` and may be a scalar of type `integer`. `get`: argument has intent `out` and is a scalar of type `integer`. From 93e73fcf80b1c5534a14cbd944c77b519d81aad2 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 17:50:27 -0500 Subject: [PATCH 18/73] Update doc/specs/stdlib_stats_distribution_PRNG.md Co-authored-by: Jeremie Vandenplas --- doc/specs/stdlib_stats_distribution_PRNG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/specs/stdlib_stats_distribution_PRNG.md b/doc/specs/stdlib_stats_distribution_PRNG.md index fc540850e..2467f61d9 100644 --- a/doc/specs/stdlib_stats_distribution_PRNG.md +++ b/doc/specs/stdlib_stats_distribution_PRNG.md @@ -24,7 +24,7 @@ Set or get the seed value before calling the probability distribution pseudorand `put`: argument has `intent(in)` and may be a scalar of type `integer`. -`get`: argument has intent `out` and is a scalar of type `integer`. +`get`: argument has `intent(out)` and is a scalar of type `integer`. ### Return value From 77ce08216e93832923347b7569c3e2b69647cf2c Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 17:55:21 -0500 Subject: [PATCH 19/73] Update doc/specs/stdlib_stats_distribution_PRNG.md Co-authored-by: Jeremie Vandenplas --- doc/specs/stdlib_stats_distribution_PRNG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/specs/stdlib_stats_distribution_PRNG.md b/doc/specs/stdlib_stats_distribution_PRNG.md index 2467f61d9..fd8bd460e 100644 --- a/doc/specs/stdlib_stats_distribution_PRNG.md +++ b/doc/specs/stdlib_stats_distribution_PRNG.md @@ -59,7 +59,7 @@ Generate a integer random number in a specific range [-2^k, 2^k - 1] according t ### Arguments -`n`: argument has intent `in` is a scalar of type `integer`. +`n`: argument has `intent(in)` is a scalar of type `integer`. ### Return value From 6acf1e3758082adc3a958cf7542ea60bb239e4f4 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 17:55:37 -0500 Subject: [PATCH 20/73] Update src/stdlib_stats_distribution_PRNG.fypp Co-authored-by: Jeremie Vandenplas --- src/stdlib_stats_distribution_PRNG.fypp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 90d9f367e..c94a9bbc8 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -1,6 +1,6 @@ #:include "common.fypp" module stdlib_stats_distribution_PRNG - use stdlib_kinds + use stdlib_kinds, only: int8, int16, int32, int64 implicit none private integer, parameter :: MAX_INT_BIT_SIZE = 64 @@ -208,4 +208,4 @@ module stdlib_stats_distribution_PRNG end subroutine random_distribution_seed_${t1[0]}$${k1}$ #:endfor -end module stdlib_stats_distribution_PRNG \ No newline at end of file +end module stdlib_stats_distribution_PRNG From a552a6161b59668726930f71c36f802a27272839 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 17:56:27 -0500 Subject: [PATCH 21/73] Update src/stdlib_stats_distribution_PRNG.fypp Co-authored-by: Jeremie Vandenplas --- src/stdlib_stats_distribution_PRNG.fypp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index c94a9bbc8..832bcd9f7 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -3,7 +3,7 @@ module stdlib_stats_distribution_PRNG use stdlib_kinds, only: int8, int16, int32, int64 implicit none private - integer, parameter :: MAX_INT_BIT_SIZE = 64 + integer, parameter :: MAX_INT_BIT_SIZE = bit_size(1_int64) integer(int64), save :: st(4), si = 614872703977525537_int64 logical, save :: seed_initialized = .false. From 0044e1a9cd8dd00a954927cc0737b6c2167e77b3 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 18:31:47 -0500 Subject: [PATCH 22/73] Update src/stdlib_stats_distribution_PRNG.fypp Co-authored-by: Jeremie Vandenplas --- src/stdlib_stats_distribution_PRNG.fypp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 832bcd9f7..492b0be88 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -92,7 +92,6 @@ module stdlib_stats_distribution_PRNG t1 = shiftr(x, (64 - k)) t2 = shiftl(x, k) res = ior(t1, t2) - return end function rol64 From 72ce0775e890f9efc08db3153b5bf1c36ebf55c2 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 18:35:19 -0500 Subject: [PATCH 23/73] Update src/stdlib_stats_distribution_PRNG.fypp Co-authored-by: Jeremie Vandenplas --- src/stdlib_stats_distribution_PRNG.fypp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 492b0be88..761a76aaa 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -182,7 +182,6 @@ module stdlib_stats_distribution_PRNG res = ieor(res, shiftr(res, 30)) * int02 res = ieor(res, shiftr(res, 27)) * int03 res = ieor(res, shiftr(res, 31)) - return end function splitmix64 #:for k1, t1 in INT_KINDS_TYPES From 9f80a6731280676e0d31f6ca2cb6beb6c0b8445e Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 18:35:50 -0500 Subject: [PATCH 24/73] Update src/stdlib_stats_distribution_PRNG.fypp Co-authored-by: Jeremie Vandenplas --- src/stdlib_stats_distribution_PRNG.fypp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 761a76aaa..aeeb45978 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -81,7 +81,6 @@ module stdlib_stats_distribution_PRNG st(1) = ieor(st(1), st(4)) st(3) = ieor(st(3), t) st(4) = rol64(st(4), 45) - return end function xoshiro256ss function rol64(x, k) result(res) From 3fcea38ffb829c95b557e573d375ddfc57447bba Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 18:36:15 -0500 Subject: [PATCH 25/73] Update src/tests/stats/test_distribution_PRNG.f90 Co-authored-by: Jeremie Vandenplas --- src/tests/stats/test_distribution_PRNG.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/stats/test_distribution_PRNG.f90 b/src/tests/stats/test_distribution_PRNG.f90 index 9910ae49c..426d87ddc 100644 --- a/src/tests/stats/test_distribution_PRNG.f90 +++ b/src/tests/stats/test_distribution_PRNG.f90 @@ -1,6 +1,6 @@ program test_distribution_PRNG use stdlib_error, only : check - use stdlib_kinds + use stdlib_kinds, only: int8, int16, int32, int64 use stdlib_stats_distribution_PRNG, only : random_seed, dist_rand implicit none @@ -105,4 +105,4 @@ subroutine test_random_rand_iint64 //" failed.", warn=warn) end subroutine test_random_rand_iint64 -end program test_distribution_PRNG \ No newline at end of file +end program test_distribution_PRNG From 730927bb08998d2de8bb359f86d10144de144928 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 19:08:30 -0500 Subject: [PATCH 26/73] Some grammer change --- doc/specs/stdlib_stats_distribution_PRNG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/specs/stdlib_stats_distribution_PRNG.md b/doc/specs/stdlib_stats_distribution_PRNG.md index fd8bd460e..a0e2b83a5 100644 --- a/doc/specs/stdlib_stats_distribution_PRNG.md +++ b/doc/specs/stdlib_stats_distribution_PRNG.md @@ -51,7 +51,7 @@ Experimental ### Description -Generate a integer random number in a specific range [-2^k, 2^k - 1] according to the input integer kind n. This random number will be operated by bit opeartors instead of normal arithmetic operators. +Generate an integer pseudorandom number in a specific range [-2^k, 2^k - 1] according to the input integer kind n. This pseudorandom number will be operated by bit opeartors instead of normal arithmetic operators. ### Syntax From c5f721cea2a0dedbcf82c5ea80f29e0c5037d044 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 19:12:45 -0500 Subject: [PATCH 27/73] Add reference link --- src/stdlib_stats_distribution_PRNG.fypp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index aeeb45978..b1ec9b43e 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -58,6 +58,7 @@ module stdlib_stats_distribution_PRNG function xoshiro256ss( ) result (res) ! Generate random 64-bit integers ! Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) + ! http://prng.di.unimi.it/xoshiro256starstar.c ! ! This is xoshiro256** 1.0, one of our all-purpose, rock-solid ! generators. It has excellent (sub-ns) speed, a state (256 bits) that is From 188b011cb150a8a9dc3df06e72b9c8ca5fe96fc5 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Sun, 20 Dec 2020 19:27:43 -0500 Subject: [PATCH 28/73] Add reference links --- src/stdlib_stats_distribution_PRNG.fypp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index b1ec9b43e..adfce2bad 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -100,6 +100,7 @@ module stdlib_stats_distribution_PRNG ! to 2^128 calls to xoshiro256ss(); it can be used to generate 2^128 ! non-overlapping subsequences for parallel computations. ! Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) + ! http://prng.di.unimi.it/xoshiro256starstar.c ! ! Fortran 90 version translated from C by Jim-215-Fisher integer(int64) :: jp(4) = [1733541517147835066_int64, & @@ -132,6 +133,7 @@ module stdlib_stats_distribution_PRNG ! 2^64 starting points, from each of which jump() will generate 2^64 ! non-overlapping subsequences for parallel distributed computations ! Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) + ! http://prng.di.unimi.it/xoshiro256starstar.c ! ! Fortran 90 version translated from C by Jim-215-Fisher integer(int64) :: jp(4) = [8566230491382795199_int64, & From d96bf8bbb1bb3b60b38beb6cdd567d063069fae2 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Mon, 21 Dec 2020 17:05:06 -0500 Subject: [PATCH 29/73] change description for dist_rand function --- src/stdlib_stats_distribution_PRNG.fypp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index adfce2bad..460b3c348 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -43,7 +43,8 @@ module stdlib_stats_distribution_PRNG function dist_rand_${t1[0]}$${k1}$(n) result(res) !! Random integer generation for various kinds !! result = [-2^k, 2^k - 1], k = 7, 15, 31, 63, depending on input kind - !! Result is used as bit model number instead of regular arithmetic number + !! Result will be operated by bitwise operators to generate desired integer + !! and real pseudorandom numbers !! ${t1}$, intent(in) :: n ${t1}$ :: res From 2a495abc6144d8d8cec86d82c838578dbcf10f83 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Mon, 21 Dec 2020 19:10:52 -0500 Subject: [PATCH 30/73] Add files via upload --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6143b5ab5..d62689913 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,9 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU) endif() elseif(CMAKE_Fortran_COMPILER_ID STREQUAL Intel) add_compile_options(-warn declarations,general,usage,interfaces,unused) - add_compile_options(-standard-semantics) + if(NOT CMAKE_Fortran_COMPILER_VERSION VERSION_EQUAL 20.2.1.20200827) + add_compile_options(-standard-semantics) + endif() if(CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 18.0) add_compile_options(-stand f15) else() @@ -35,7 +37,7 @@ endif() # --- compiler feature checks include(CheckFortranSourceCompiles) include(CheckFortranSourceRuns) -check_fortran_source_compiles("error stop i; end" f18errorstop SRC_EXT f90) +check_fortran_source_runs("i=0; error stop i; end" f18errorstop SRC_EXT f90) check_fortran_source_compiles("real, allocatable :: array(:, :, :, :, :, :, :, :, :, :); end" f03rank SRC_EXT f90) check_fortran_source_runs("use, intrinsic :: iso_fortran_env, only : real128; real(real128) :: x; x = x+1; end" f03real128) From 8e95e05633fbb8fc4da16f602250c764851c9cde Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Mon, 21 Dec 2020 19:11:19 -0500 Subject: [PATCH 31/73] Add files via upload From 3d8e3e69ef4bce57b210e853362722c5058c12ce Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Mon, 21 Dec 2020 19:25:20 -0500 Subject: [PATCH 32/73] Add files via upload --- src/CMakeLists.txt | 3 +++ src/Makefile.manual | 26 +++++++++++--------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ea7403663..02604959e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,9 @@ # Create a list of the files to be preprocessed set(fppFiles + stdlib_bitsets.fypp + stdlib_bitsets_64.fypp + stdlib_bitsets_large.fypp stdlib_io.fypp stdlib_linalg.fypp stdlib_linalg_diag.fypp diff --git a/src/Makefile.manual b/src/Makefile.manual index 129dbe553..872f704c0 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -1,5 +1,8 @@ SRC = f18estop.f90 \ stdlib_ascii.f90 \ + stdlib_bitsets.f90 \ + stdlib_bitsets_64.f90 \ + stdlib_bitsets_large.f90 \ stdlib_error.f90 \ stdlib_io.f90 \ stdlib_kinds.f90 \ @@ -12,10 +15,7 @@ SRC = f18estop.f90 \ stdlib_stats.f90 \ stdlib_stats_mean.f90 \ stdlib_stats_moment.f90 \ - stdlib_stats_var.f90 \ - stdlib_stats_distribution.f90 \ - stdlib_stats_distribution_rvs.f90 \ - stdlib_stats_distribution_implementation.f90 \ + stdlib_stats_var.f90 LIB = libstdlib.a @@ -43,6 +43,9 @@ clean: # Fortran module dependencies f18estop.o: stdlib_error.o +stdlib_bitsets.o: stdlib_kinds.o +stdlib_bitsets_64.o: stdlib_bitsets.o +stdlib_bitsets_large.o: stdlib_bitsets.o stdlib_error.o: stdlib_optval.o stdlib_io.o: \ stdlib_error.o \ @@ -64,14 +67,11 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o -stdlib_stats_distribution_rvs.o: stdlib_kinds.o -stdlib_stats_distribution.o: \ - stdlib_error.o \ - stdlib_kinds.o \ - stdlib_stats_distribution_rvs.o \ -stdlib_stats_distribution_imp.o: \ - stdlib_stats_distribution.o + # Fortran sources that are built from fypp templates +stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp +stdlib_bitsets_large.f90: stdlib_bitsets_large.fypp +stdlib_bitsets.f90: stdlib_bitsets.fypp stdlib_io.f90: stdlib_io.fypp stdlib_linalg.f90: stdlib_linalg.fypp stdlib_linalg_diag.f90: stdlib_linalg_diag.fypp @@ -80,7 +80,3 @@ stdlib_stats.f90: stdlib_stats.fypp stdlib_stats_mean.f90: stdlib_stats_mean.fypp stdlib_stats_moment.f90: stdlib_stats_moment.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp -stdlib_stats_distribution_rvs.f90: stdlib_stats_distribution_rvs.fypp -stdlib_stats_distribution.f90: stdlib_stats_distribution.fypp -stdlib_stats_distribution_implementation.f90: \ - stdlib_stats_distribution_implementation.fypp \ No newline at end of file From a8c1b6c3c0b4e831032687b608dcf348d4714ae3 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 22 Dec 2020 10:03:04 -0500 Subject: [PATCH 33/73] Update stdlib_stats_distribution_PRNG.md --- doc/specs/stdlib_stats_distribution_PRNG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/specs/stdlib_stats_distribution_PRNG.md b/doc/specs/stdlib_stats_distribution_PRNG.md index a0e2b83a5..1dd441729 100644 --- a/doc/specs/stdlib_stats_distribution_PRNG.md +++ b/doc/specs/stdlib_stats_distribution_PRNG.md @@ -2,7 +2,7 @@ title: stats_distribution --- -# Statistical Distributions PRNG module +# Statistical Distributions -- Pseudorandom Number Generator module [TOC] From c4429e962a4c13fafdbfd35cf3cc9241ef4575c2 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 22 Dec 2020 10:03:21 -0500 Subject: [PATCH 34/73] Update stdlib_stats_distribution_PRNG.md --- doc/specs/stdlib_stats_distribution_PRNG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/specs/stdlib_stats_distribution_PRNG.md b/doc/specs/stdlib_stats_distribution_PRNG.md index 1dd441729..60067bde6 100644 --- a/doc/specs/stdlib_stats_distribution_PRNG.md +++ b/doc/specs/stdlib_stats_distribution_PRNG.md @@ -2,7 +2,7 @@ title: stats_distribution --- -# Statistical Distributions -- Pseudorandom Number Generator module +# Statistical Distributions -- Pseudorandom Number Generator Module [TOC] From 941a8d7073621dbeaab906114029a493f94c7609 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 17:43:18 -0500 Subject: [PATCH 35/73] Update Makefile.manual --- src/Makefile.manual | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index f4885240a..ad910ceef 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -14,7 +14,9 @@ SRC = f18estop.f90 \ stdlib_quadrature_trapz.f90 \ stdlib_stats.f90 \ stdlib_stats_mean.f90 \ - stdlib_stats_moment.f90 \ + stdlib_stats_moment_all.f90 \ + stdlib_stats_moment_mask.f90 \ + stdlib_stats_moment_scalar.f90 \ stdlib_stats_var.f90 \ stdlib_stats_distribution_PRNG.f90 @@ -82,4 +84,4 @@ stdlib_stats.f90: stdlib_stats.fypp stdlib_stats_mean.f90: stdlib_stats_mean.fypp stdlib_stats_moment.f90: stdlib_stats_moment.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp -stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution_PRNG.fypp \ No newline at end of file +stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution_PRNG.fypp From 3e61529a1a72164e5025ab78fa7ee2cfa572950d Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 17:46:43 -0500 Subject: [PATCH 36/73] Update Makefile.manual --- src/Makefile.manual | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Makefile.manual b/src/Makefile.manual index ad910ceef..1d5a46936 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -14,6 +14,7 @@ SRC = f18estop.f90 \ stdlib_quadrature_trapz.f90 \ stdlib_stats.f90 \ stdlib_stats_mean.f90 \ + stdlib_stats_moment.f90 \ stdlib_stats_moment_all.f90 \ stdlib_stats_moment_mask.f90 \ stdlib_stats_moment_scalar.f90 \ From afb881e8bc1fd6d669e4141202e5ecb46a812f4b Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 17:52:40 -0500 Subject: [PATCH 37/73] Update Makefile.manual --- src/Makefile.manual | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Makefile.manual b/src/Makefile.manual index 872f704c0..dd6f12708 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -15,6 +15,9 @@ SRC = f18estop.f90 \ stdlib_stats.f90 \ stdlib_stats_mean.f90 \ stdlib_stats_moment.f90 \ + stdlib_stats_moment_all.f90 \ + stdlib_stats_moment_mask.f90 \ + stdlib_stats_moment_scalar.f90 \ stdlib_stats_var.f90 LIB = libstdlib.a @@ -79,4 +82,7 @@ stdlib_quadrature.f90: stdlib_quadrature.fypp stdlib_stats.f90: stdlib_stats.fypp stdlib_stats_mean.f90: stdlib_stats_mean.fypp stdlib_stats_moment.f90: stdlib_stats_moment.fypp +stdlib_stats_moment_all.f90: stdlib_stats_moment_all.fypp +stdlib_stats_moment_mask.f90: stdlib_stats_moment_mask.fypp +stdlib_stats_moment_scalar.f90: stdlib_stats_moment_scalar.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp From 9c3b6ff44aa39bfeae1c629145287fb8b5b77aad Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 17:55:23 -0500 Subject: [PATCH 38/73] Update Makefile.manual --- src/Makefile.manual | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index 1d5a46936..9131425ca 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -20,7 +20,7 @@ SRC = f18estop.f90 \ stdlib_stats_moment_scalar.f90 \ stdlib_stats_var.f90 \ stdlib_stats_distribution_PRNG.f90 - + LIB = libstdlib.a @@ -71,7 +71,7 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o -stdlib_stats_distribution_PRNG.o: stdlib_kinds.o +stdlib_stats_distribution_PRNG.o: stdlib_kinds.o stdlib_error.o # Fortran sources that are built from fypp templates stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp @@ -84,5 +84,8 @@ stdlib_quadrature.f90: stdlib_quadrature.fypp stdlib_stats.f90: stdlib_stats.fypp stdlib_stats_mean.f90: stdlib_stats_mean.fypp stdlib_stats_moment.f90: stdlib_stats_moment.fypp +stdlib_stats_moment_all.f90: stdlib_stats_moment_all.fypp +stdlib_stats_moment_mask.f90: stdlib_stats_moment_mask.fypp +stdlib_stats_moment_scalar.f90: stdlib_stats_moment_scalar.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp -stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution_PRNG.fypp +stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution.PRNG.fypp From 8abb168c53e184b82b2b1976d732d145a3b80d21 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 18:00:43 -0500 Subject: [PATCH 39/73] Update CMakeLists.txt --- src/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 02604959e..e2caa0bbc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -14,6 +14,9 @@ set(fppFiles stdlib_stats_cov.fypp stdlib_stats_mean.fypp stdlib_stats_moment.fypp + stdlib_stats_moment_all.fypp + stdlib_stats_moment_mask.fypp + stdlib_stats_moment_scalar.fypp stdlib_stats_var.fypp stdlib_quadrature.fypp stdlib_quadrature_trapz.fypp From ad51937b099d6db25bdd84583f61ec1b0adff3c2 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 18:01:18 -0500 Subject: [PATCH 40/73] Update CMakeLists.txt --- src/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b515bc9f4..e2caa0bbc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -14,11 +14,13 @@ set(fppFiles stdlib_stats_cov.fypp stdlib_stats_mean.fypp stdlib_stats_moment.fypp + stdlib_stats_moment_all.fypp + stdlib_stats_moment_mask.fypp + stdlib_stats_moment_scalar.fypp stdlib_stats_var.fypp stdlib_quadrature.fypp stdlib_quadrature_trapz.fypp stdlib_quadrature_simps.fypp - stdlib_stats_distribution_PRNG.fypp ) From 131cf0d23dc57b68f2493879bea6d6fc6d04959c Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 18:16:45 -0500 Subject: [PATCH 41/73] Update Makefile.manual --- src/Makefile.manual | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index 9131425ca..dd6f12708 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -18,8 +18,7 @@ SRC = f18estop.f90 \ stdlib_stats_moment_all.f90 \ stdlib_stats_moment_mask.f90 \ stdlib_stats_moment_scalar.f90 \ - stdlib_stats_var.f90 \ - stdlib_stats_distribution_PRNG.f90 + stdlib_stats_var.f90 LIB = libstdlib.a @@ -71,7 +70,6 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o -stdlib_stats_distribution_PRNG.o: stdlib_kinds.o stdlib_error.o # Fortran sources that are built from fypp templates stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp @@ -88,4 +86,3 @@ stdlib_stats_moment_all.f90: stdlib_stats_moment_all.fypp stdlib_stats_moment_mask.f90: stdlib_stats_moment_mask.fypp stdlib_stats_moment_scalar.f90: stdlib_stats_moment_scalar.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp -stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution.PRNG.fypp From 157dba80e588a64f1e85505ddf11d9fe6c9979c0 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 18:19:44 -0500 Subject: [PATCH 42/73] Update CMakeLists.txt --- src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e2caa0bbc..8cdccdf68 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,6 +21,7 @@ set(fppFiles stdlib_quadrature.fypp stdlib_quadrature_trapz.fypp stdlib_quadrature_simps.fypp + stdlib_stats_distribution_PRNG.fypp ) From d7643cbc5d9ad4f25d9346e5cdc27a9508a49ab2 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 18:21:31 -0500 Subject: [PATCH 43/73] Update Makefile.manual --- src/Makefile.manual | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index dd6f12708..302d1e21b 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -18,7 +18,8 @@ SRC = f18estop.f90 \ stdlib_stats_moment_all.f90 \ stdlib_stats_moment_mask.f90 \ stdlib_stats_moment_scalar.f90 \ - stdlib_stats_var.f90 + stdlib_stats_var.f90 \ + stdlib_stats_distribution_PRNG.f90 LIB = libstdlib.a @@ -70,6 +71,7 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o +stdlib_stats_distribution.PRNG.o: stdlib_kinds.o stdlib_error.o # Fortran sources that are built from fypp templates stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp @@ -86,3 +88,4 @@ stdlib_stats_moment_all.f90: stdlib_stats_moment_all.fypp stdlib_stats_moment_mask.f90: stdlib_stats_moment_mask.fypp stdlib_stats_moment_scalar.f90: stdlib_stats_moment_scalar.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp +stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution_PRNG.fypp From 5651f5e62f92caa30326fe888f1b97616a9a90f6 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 18:22:09 -0500 Subject: [PATCH 44/73] Update CMakeLists.txt --- src/tests/stats/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tests/stats/CMakeLists.txt b/src/tests/stats/CMakeLists.txt index 36ffc7aeb..38f9bb84b 100644 --- a/src/tests/stats/CMakeLists.txt +++ b/src/tests/stats/CMakeLists.txt @@ -5,6 +5,7 @@ ADDTEST(moment) ADDTEST(rawmoment) ADDTEST(var) ADDTEST(varn) +ADDTEST(distribution_PRNG) if(DEFINED CMAKE_MAXIMUM_RANK) if(${CMAKE_MAXIMUM_RANK} GREATER 7) From ed12254204984c5540ad34b142d03507f14fdf7b Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 18:23:14 -0500 Subject: [PATCH 45/73] Update CMakeLists.txt --- src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e2caa0bbc..8cdccdf68 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,6 +21,7 @@ set(fppFiles stdlib_quadrature.fypp stdlib_quadrature_trapz.fypp stdlib_quadrature_simps.fypp + stdlib_stats_distribution_PRNG.fypp ) From 6fd08842741226e201e3b53603ddeb5222f13edb Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 18:24:34 -0500 Subject: [PATCH 46/73] Update Makefile.manual --- src/Makefile.manual | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index dd6f12708..da621ccd8 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -18,7 +18,8 @@ SRC = f18estop.f90 \ stdlib_stats_moment_all.f90 \ stdlib_stats_moment_mask.f90 \ stdlib_stats_moment_scalar.f90 \ - stdlib_stats_var.f90 + stdlib_stats_var.f90 \ + stdlib_stats_distribution_PRNG.f90 LIB = libstdlib.a @@ -70,6 +71,7 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o +stdlib_stats_distribution_PRNG.o: stdlib_kinds.o stdlib_error.o # Fortran sources that are built from fypp templates stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp @@ -86,3 +88,4 @@ stdlib_stats_moment_all.f90: stdlib_stats_moment_all.fypp stdlib_stats_moment_mask.f90: stdlib_stats_moment_mask.fypp stdlib_stats_moment_scalar.f90: stdlib_stats_moment_scalar.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp +stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution_PRNG.fypp From 5afcba5801a34115ca638eb9cc95804af73d7f16 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 18:26:08 -0500 Subject: [PATCH 47/73] Update CMakeLists.txt --- src/tests/stats/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/tests/stats/CMakeLists.txt b/src/tests/stats/CMakeLists.txt index 38f9bb84b..36ffc7aeb 100644 --- a/src/tests/stats/CMakeLists.txt +++ b/src/tests/stats/CMakeLists.txt @@ -5,7 +5,6 @@ ADDTEST(moment) ADDTEST(rawmoment) ADDTEST(var) ADDTEST(varn) -ADDTEST(distribution_PRNG) if(DEFINED CMAKE_MAXIMUM_RANK) if(${CMAKE_MAXIMUM_RANK} GREATER 7) From 4cb0041d95e536c2fc325b828ac083b086286d4f Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 18:26:30 -0500 Subject: [PATCH 48/73] Update CMakeLists.txt --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8cdccdf68..1704e12ab 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,7 +21,7 @@ set(fppFiles stdlib_quadrature.fypp stdlib_quadrature_trapz.fypp stdlib_quadrature_simps.fypp - stdlib_stats_distribution_PRNG.fypp + ) From 91c1ad42b9abfbcc4544bb1b977467368c86846a Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Tue, 29 Dec 2020 18:27:11 -0500 Subject: [PATCH 49/73] Update Makefile.manual --- src/Makefile.manual | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index 302d1e21b..dd6f12708 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -18,8 +18,7 @@ SRC = f18estop.f90 \ stdlib_stats_moment_all.f90 \ stdlib_stats_moment_mask.f90 \ stdlib_stats_moment_scalar.f90 \ - stdlib_stats_var.f90 \ - stdlib_stats_distribution_PRNG.f90 + stdlib_stats_var.f90 LIB = libstdlib.a @@ -71,7 +70,6 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o -stdlib_stats_distribution.PRNG.o: stdlib_kinds.o stdlib_error.o # Fortran sources that are built from fypp templates stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp @@ -88,4 +86,3 @@ stdlib_stats_moment_all.f90: stdlib_stats_moment_all.fypp stdlib_stats_moment_mask.f90: stdlib_stats_moment_mask.fypp stdlib_stats_moment_scalar.f90: stdlib_stats_moment_scalar.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp -stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution_PRNG.fypp From 46f206f4b130f9ae669c96c66d0a6e795818eec1 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Thu, 31 Dec 2020 14:46:28 -0500 Subject: [PATCH 50/73] Update CMakeLists.txt --- src/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8cdccdf68..e2caa0bbc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,7 +21,6 @@ set(fppFiles stdlib_quadrature.fypp stdlib_quadrature_trapz.fypp stdlib_quadrature_simps.fypp - stdlib_stats_distribution_PRNG.fypp ) From 50ac589e1ed373b3c01276404b7d7b608d856d45 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Thu, 31 Dec 2020 14:47:06 -0500 Subject: [PATCH 51/73] Update Makefile.manual --- src/Makefile.manual | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index da621ccd8..56f2df3a2 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -19,7 +19,6 @@ SRC = f18estop.f90 \ stdlib_stats_moment_mask.f90 \ stdlib_stats_moment_scalar.f90 \ stdlib_stats_var.f90 \ - stdlib_stats_distribution_PRNG.f90 LIB = libstdlib.a @@ -71,7 +70,6 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o -stdlib_stats_distribution_PRNG.o: stdlib_kinds.o stdlib_error.o # Fortran sources that are built from fypp templates stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp @@ -88,4 +86,3 @@ stdlib_stats_moment_all.f90: stdlib_stats_moment_all.fypp stdlib_stats_moment_mask.f90: stdlib_stats_moment_mask.fypp stdlib_stats_moment_scalar.f90: stdlib_stats_moment_scalar.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp -stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution_PRNG.fypp From 13ba182efc3841000ab26086f405f41fb0b2ad02 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Thu, 31 Dec 2020 14:48:58 -0500 Subject: [PATCH 52/73] Update Makefile.manual --- src/Makefile.manual | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index 56f2df3a2..dd6f12708 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -18,7 +18,7 @@ SRC = f18estop.f90 \ stdlib_stats_moment_all.f90 \ stdlib_stats_moment_mask.f90 \ stdlib_stats_moment_scalar.f90 \ - stdlib_stats_var.f90 \ + stdlib_stats_var.f90 LIB = libstdlib.a From 98d698a29b49c3b9000534183fb5391543b159fd Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Thu, 31 Dec 2020 14:50:05 -0500 Subject: [PATCH 53/73] Update CMakeLists.txt --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1704e12ab..8cdccdf68 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,7 +21,7 @@ set(fppFiles stdlib_quadrature.fypp stdlib_quadrature_trapz.fypp stdlib_quadrature_simps.fypp - + stdlib_stats_distribution_PRNG.fypp ) From 9d2be18d15e33e054922285ea73265b02bbe0964 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Thu, 31 Dec 2020 14:51:46 -0500 Subject: [PATCH 54/73] Update Makefile.manual --- src/Makefile.manual | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index dd6f12708..ce1b22ffb 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -18,7 +18,8 @@ SRC = f18estop.f90 \ stdlib_stats_moment_all.f90 \ stdlib_stats_moment_mask.f90 \ stdlib_stats_moment_scalar.f90 \ - stdlib_stats_var.f90 + stdlib_stats_var.f90 \ + stdlib_stats_distribution_PRNG.f90 LIB = libstdlib.a @@ -70,6 +71,7 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o +stdlib_stats_distribution_PRNG.o: stdlib_kinds.o stdlib_error.o # Fortran sources that are built from fypp templates stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp @@ -86,3 +88,4 @@ stdlib_stats_moment_all.f90: stdlib_stats_moment_all.fypp stdlib_stats_moment_mask.f90: stdlib_stats_moment_mask.fypp stdlib_stats_moment_scalar.f90: stdlib_stats_moment_scalar.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp +stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution.fypp From 2671c8e102577ac0db15fc029cc1e43c8fe63a22 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Thu, 31 Dec 2020 14:52:16 -0500 Subject: [PATCH 55/73] Delete test_distribution_PRNG.fypp --- src/tests/stats/test_distribution_PRNG.fypp | 66 --------------------- 1 file changed, 66 deletions(-) delete mode 100644 src/tests/stats/test_distribution_PRNG.fypp diff --git a/src/tests/stats/test_distribution_PRNG.fypp b/src/tests/stats/test_distribution_PRNG.fypp deleted file mode 100644 index d43d82b60..000000000 --- a/src/tests/stats/test_distribution_PRNG.fypp +++ /dev/null @@ -1,66 +0,0 @@ -#:include "common.fypp" -program test_distribution_PRNG - use stdlib_error, only : check - use stdlib_kinds - use stdlib_stats_distribution_PRNG, only : & - random_seed => random_distribution_seed, random_rand => rand - - implicit none - logical :: warn = .true. - - call test_random_seed - #:for k1, t1 in INT_KINDS_TYPES - call test_random_rand_${t1[0]}$${k1}$ - #:endfor - contains - - subroutine test_random_seed - integer :: put, get, res(5) - integer :: ans(5) = [-1859553078, -1933696596, -642834430, & - 1711399314, 1548311463] - integer :: i - - print *, "" - print *, "Test random_seed" - put = 135792468 - do i = 1, 5 - call random_seed(put,get) - res(i) = get - put = get - end do - call check(all(res == ans), msg="random seed test failed.",warn=warn) - end subroutine test_random_seed - - #:for k1, t1 in INT_KINDS_TYPES - subroutine test_random_rand_${t1[0]}$${k1}$ - integer :: put, get, i - - #:if k1 == "int8" - ${t1}$ :: res(5), ans(5)=[118, -15, -72, 101, 70] - #:elif k1 == "int16" - ${t1}$ :: res(5), ans(5)=[30286, -3799, -18204, 25947, 18148] - #:elif k1 == "int32" - ${t1}$ :: res(5), ans(5)=[1984865646, -248954393, -1192993267, & - 1700514835, 1189401802] - #:else - ${t1}$ :: res(5), ans(5)=[8524933037632333570_int64, & - -1069250973542918798_int64, & - -5123867065024149335_int64, & - 7303655603304982073_int64, & - 5108441843522503546_int64] - #:endif - - - print *, "" - print *, "Test random_rand with kind ${k1}$" - put = 12345678 - call random_seed(put, get) - do i = 1, 5 - res(i) = random_rand(1_${k1}$) - end do - call check(all(res == ans), msg="random_rand with kind ${k1}$ test" & - //" failed.", warn=warn) - end subroutine test_random_rand_${t1[0]}$${k1}$ - - #:endfor -end program test_distribution_PRNG \ No newline at end of file From 650331857ae823cd2353cf6875d4c6bffe3ce3fd Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Thu, 31 Dec 2020 15:19:25 -0500 Subject: [PATCH 56/73] Update Makefile.manual --- src/Makefile.manual | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index ce1b22ffb..da621ccd8 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -88,4 +88,4 @@ stdlib_stats_moment_all.f90: stdlib_stats_moment_all.fypp stdlib_stats_moment_mask.f90: stdlib_stats_moment_mask.fypp stdlib_stats_moment_scalar.f90: stdlib_stats_moment_scalar.fypp stdlib_stats_var.f90: stdlib_stats_var.fypp -stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution.fypp +stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution_PRNG.fypp From 2d95db0ca8585c0e7ff0f3cba6155a4f89846f17 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Thu, 31 Dec 2020 19:04:57 -0500 Subject: [PATCH 57/73] Update Makefile.manual --- src/Makefile.manual | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index da621ccd8..59147887d 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -71,7 +71,7 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o -stdlib_stats_distribution_PRNG.o: stdlib_kinds.o stdlib_error.o +stdlib_stats_distribution_PRNG.o: stdlib_kinds.o # Fortran sources that are built from fypp templates stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp From 06b349022a5be7424fc95623fa6a05cae8380b95 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Fri, 8 Jan 2021 12:54:18 -0500 Subject: [PATCH 58/73] Removed jump and long_jump procedures --- src/stdlib_stats_distribution_PRNG.fypp | 78 +++---------------------- 1 file changed, 8 insertions(+), 70 deletions(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 460b3c348..e567d7651 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -1,16 +1,15 @@ #:include "common.fypp" module stdlib_stats_distribution_PRNG use stdlib_kinds, only: int8, int16, int32, int64 + use stdlib_error implicit none private integer, parameter :: MAX_INT_BIT_SIZE = bit_size(1_int64) - integer(int64), save :: st(4), si = 614872703977525537_int64 + integer(int64), save :: st(4), si = 614872703977525537_int64 ! default seed logical, save :: seed_initialized = .false. public :: random_seed public :: dist_rand - public :: jump - public :: long_jump interface dist_rand @@ -51,6 +50,8 @@ module stdlib_stats_distribution_PRNG integer :: k k = MAX_INT_BIT_SIZE - bit_size(n) + if(k < 0) call error_stop("Error: Integer bit size is greater than 64' & + //" bit" res = shiftr(xoshiro256ss( ), k) end function dist_rand_${t1[0]}$${k1}$ @@ -96,71 +97,6 @@ module stdlib_stats_distribution_PRNG end function rol64 - subroutine jump - ! This is the jump function for the xoshiro256ss generator. It is equivalent - ! to 2^128 calls to xoshiro256ss(); it can be used to generate 2^128 - ! non-overlapping subsequences for parallel computations. - ! Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) - ! http://prng.di.unimi.it/xoshiro256starstar.c - ! - ! Fortran 90 version translated from C by Jim-215-Fisher - integer(int64) :: jp(4) = [1733541517147835066_int64, & - -3051731464161248980_int64, & - -6244198995065845334_int64, & - 4155657270789760540_int64] - integer(int64) :: s1 = 0, s2 = 0, s3 = 0, s4 = 0, c = 1_int64 - integer :: i, j, k - - do i = 1, 4 - do j = 1, 64 - if(iand(jp(i), shiftl(c, j - 1)) /= 0) then - s1 = ieor(s1, st(1)) - s2 = ieor(s2, st(2)) - s3 = ieor(s3, st(3)) - s4 = ieor(s4, st(4)) - end if - k = xoshiro256ss( ) - end do - end do - st(1) = s1 - st(2) = s2 - st(3) = s3 - st(4) = s4 - end subroutine jump - - subroutine long_jump - ! This is the long-jump function for the xoshiro256ss generator. It is - ! equivalent to 2^192 calls to xoshiro256ss(); it can be used to generate - ! 2^64 starting points, from each of which jump() will generate 2^64 - ! non-overlapping subsequences for parallel distributed computations - ! Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) - ! http://prng.di.unimi.it/xoshiro256starstar.c - ! - ! Fortran 90 version translated from C by Jim-215-Fisher - integer(int64) :: jp(4) = [8566230491382795199_int64, & - -4251311993797857357_int64, & - 8606660816089834049_int64, & - 4111957640723818037_int64] - integer(int64) :: s1 = 0, s2 = 0, s3 = 0, s4 = 0, c = 1_int64 - integer(int32) :: i, j, k - - do i = 1, 4 - do j = 1, 64 - if(iand(jp(i), shiftl(c, j - 1)) /= 0) then - s1 = ieor(s1, st(1)) - s2 = ieor(s2, st(2)) - s3 = ieor(s3, st(3)) - s4 = ieor(s4, st(4)) - end if - k = xoshiro256ss() - end do - end do - st(1) = s1 - st(2) = s2 - st(3) = s3 - st(4) = s4 - end subroutine long_jump - function splitmix64(s) result(res) ! Written in 2015 by Sebastiano Vigna (vigna@acm.org) ! This is a fixed-increment version of Java 8's SplittableRandom @@ -178,8 +114,10 @@ module stdlib_stats_distribution_PRNG data int01, int02, int03/-7046029254386353131_int64, & -4658895280553007687_int64, & -7723592293110705685_int64/ + ! Values are converted from C unsigned integer of 0x9e3779b97f4a7c15, + ! 0xbf58476d1ce4e5b9, 0x94d049bb133111eb - if(present(s)) si = s + if(present(s)) si = s res = si si = res + int01 res = ieor(res, shiftr(res, 30)) * int02 @@ -209,4 +147,4 @@ module stdlib_stats_distribution_PRNG end subroutine random_distribution_seed_${t1[0]}$${k1}$ #:endfor -end module stdlib_stats_distribution_PRNG +end module stdlib_stats_distribution_PRNG \ No newline at end of file From 57e920e7aef45c380154a28e4ab1cbd0b28ffdce Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Fri, 8 Jan 2021 12:55:28 -0500 Subject: [PATCH 59/73] Update Makefile.manual --- src/Makefile.manual | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index 59147887d..da621ccd8 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -71,7 +71,7 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o -stdlib_stats_distribution_PRNG.o: stdlib_kinds.o +stdlib_stats_distribution_PRNG.o: stdlib_kinds.o stdlib_error.o # Fortran sources that are built from fypp templates stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp From 2b4a7358b7818f1eeffdd96aeb5769588918a076 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Fri, 8 Jan 2021 13:02:04 -0500 Subject: [PATCH 60/73] Update stdlib_stats_distribution_PRNG.fypp --- src/stdlib_stats_distribution_PRNG.fypp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index e567d7651..574bd1e9f 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -50,8 +50,8 @@ module stdlib_stats_distribution_PRNG integer :: k k = MAX_INT_BIT_SIZE - bit_size(n) - if(k < 0) call error_stop("Error: Integer bit size is greater than 64' & - //" bit" + if(k < 0) call error_stop("Error: Integer bit size is greater than 64" & + //" bit") res = shiftr(xoshiro256ss( ), k) end function dist_rand_${t1[0]}$${k1}$ @@ -147,4 +147,4 @@ module stdlib_stats_distribution_PRNG end subroutine random_distribution_seed_${t1[0]}$${k1}$ #:endfor -end module stdlib_stats_distribution_PRNG \ No newline at end of file +end module stdlib_stats_distribution_PRNG From 1228cb02336532649b655a7e6e97fddc7bd41981 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Fri, 8 Jan 2021 13:02:38 -0500 Subject: [PATCH 61/73] Update stdlib_stats_distribution_PRNG.fypp --- src/stdlib_stats_distribution_PRNG.fypp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 574bd1e9f..2acf3e83e 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -1,7 +1,7 @@ #:include "common.fypp" module stdlib_stats_distribution_PRNG use stdlib_kinds, only: int8, int16, int32, int64 - use stdlib_error + use stdlib_error implicit none private integer, parameter :: MAX_INT_BIT_SIZE = bit_size(1_int64) From 435cbb577fffe943b0fdff2a6627fe57486e42c5 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Mon, 11 Jan 2021 09:30:11 -0500 Subject: [PATCH 62/73] Update stdlib_stats_distribution_PRNG.fypp --- src/stdlib_stats_distribution_PRNG.fypp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 2acf3e83e..e6d8be960 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -50,8 +50,8 @@ module stdlib_stats_distribution_PRNG integer :: k k = MAX_INT_BIT_SIZE - bit_size(n) - if(k < 0) call error_stop("Error: Integer bit size is greater than 64" & - //" bit") + if(k < 0) call error_stop("Error(dist_rand): Integer bit size is" & + //" greater than 64bit") res = shiftr(xoshiro256ss( ), k) end function dist_rand_${t1[0]}$${k1}$ @@ -117,7 +117,7 @@ module stdlib_stats_distribution_PRNG ! Values are converted from C unsigned integer of 0x9e3779b97f4a7c15, ! 0xbf58476d1ce4e5b9, 0x94d049bb133111eb - if(present(s)) si = s + if(present(s)) si = s res = si si = res + int01 res = ieor(res, shiftr(res, 30)) * int02 From 48e76577161c6933a9f48f82d32532a4e4f7552a Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Mon, 11 Jan 2021 09:36:03 -0500 Subject: [PATCH 63/73] Update stdlib_stats_distribution_PRNG.fypp --- src/stdlib_stats_distribution_PRNG.fypp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index e6d8be960..87460f4d2 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -5,7 +5,8 @@ module stdlib_stats_distribution_PRNG implicit none private integer, parameter :: MAX_INT_BIT_SIZE = bit_size(1_int64) - integer(int64), save :: st(4), si = 614872703977525537_int64 ! default seed + integer(int64), save :: st(4) ! internal states for xoshiro256ss function + integer(int64), save :: si = 614872703977525537_int64 ! default seed value logical, save :: seed_initialized = .false. public :: random_seed From 3e89cdc6a7a24d1fa25a46ce27b5932f32b5561a Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Thu, 21 Jan 2021 11:47:43 -0500 Subject: [PATCH 64/73] Update Makefile.manual From 200b3074a69f6b6ed610b0d2c070dd019000fcb4 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Thu, 21 Jan 2021 20:22:05 -0500 Subject: [PATCH 65/73] Update Makefile.manual --- src/Makefile.manual | 93 ++++++++++++++++++++++++++------------------- 1 file changed, 54 insertions(+), 39 deletions(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index da621ccd8..9351a374a 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -1,30 +1,35 @@ +SRCFYPP =\ + stdlib_bitsets_64.fypp \ + stdlib_bitsets_large.fypp \ + stdlib_bitsets.fypp \ + stdlib_io.fypp \ + stdlib_linalg.fypp \ + stdlib_linalg_diag.fypp \ + stdlib_optval.fypp \ + stdlib_quadrature.fypp \ + stdlib_quadrature_trapz.fypp \ + stdlib_quadrature_simps.fypp \ + stdlib_stats.fypp \ + stdlib_stats_corr.fypp \ + stdlib_stats_cov.fypp \ + stdlib_stats_mean.fypp \ + stdlib_stats_moment.fypp \ + stdlib_stats_moment_all.fypp \ + stdlib_stats_moment_mask.fypp \ + stdlib_stats_moment_scalar.fypp \ + stdlib_stats_var.fypp + SRC = f18estop.f90 \ stdlib_ascii.f90 \ - stdlib_bitsets.f90 \ - stdlib_bitsets_64.f90 \ - stdlib_bitsets_large.f90 \ stdlib_error.f90 \ - stdlib_io.f90 \ stdlib_kinds.f90 \ - stdlib_linalg.f90 \ - stdlib_linalg_diag.f90 \ stdlib_logger.f90 \ - stdlib_optval.f90 \ - stdlib_quadrature.f90 \ - stdlib_quadrature_trapz.f90 \ - stdlib_stats.f90 \ - stdlib_stats_mean.f90 \ - stdlib_stats_moment.f90 \ - stdlib_stats_moment_all.f90 \ - stdlib_stats_moment_mask.f90 \ - stdlib_stats_moment_scalar.f90 \ - stdlib_stats_var.f90 \ - stdlib_stats_distribution_PRNG.f90 + $(SRCGEN) LIB = libstdlib.a - +SRCGEN = $(SRCFYPP:.fypp=.f90) OBJS = $(SRC:.f90=.o) MODS = $(OBJS:.o=.mod) SMODS = $(OBJS:.o=*.smod) @@ -37,12 +42,12 @@ $(LIB): $(OBJS) ar rcs $@ $(OBJS) clean: - $(RM) $(LIB) $(OBJS) $(MODS) $(SMODS) + $(RM) $(LIB) $(OBJS) $(MODS) $(SMODS) $(SRCGEN) %.o: %.f90 $(FC) $(FFLAGS) -c $< -%.f90: %.fypp +$(SRCGEN): %.f90: %.fypp common.fypp fypp $(FYPPFLAGS) $< $@ # Fortran module dependencies @@ -55,10 +60,32 @@ stdlib_io.o: \ stdlib_error.o \ stdlib_optval.o \ stdlib_kinds.o -stdlib_linalg_diag.o: stdlib_kinds.o +stdlib_linalg.o: \ + stdlib_kinds.o +stdlib_linalg_diag.o: \ + stdlib_linalg.o \ + stdlib_kinds.o stdlib_logger.o: stdlib_ascii.o stdlib_optval.o stdlib_optval.o: stdlib_kinds.o stdlib_quadrature.o: stdlib_kinds.o +stdlib_quadrature_simps.o: \ + stdlib_quadrature.o \ + stdlib_error.o \ + stdlib_kinds.o +stdlib_quadrature_trapz.o: \ + stdlib_quadrature.o \ + stdlib_error.o \ + stdlib_kinds.o +stdlib_stats.o: \ + stdlib_kinds.o +stdlib_stats_corr.o: \ + stdlib_optval.o \ + stdlib_kinds.o \ + stdlib_stats.o +stdlib_stats_cov.o: \ + stdlib_optval.o \ + stdlib_kinds.o \ + stdlib_stats.o stdlib_stats_mean.o: \ stdlib_optval.o \ stdlib_kinds.o \ @@ -67,25 +94,13 @@ stdlib_stats_moment.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o +stdlib_stats_moment_all.o: \ + stdlib_stats_moment.o +stdlib_stats_moment_mask.o: \ + stdlib_stats_moment.o +stdlib_stats_moment_scalar.o: \ + stdlib_stats_moment.o stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o -stdlib_stats_distribution_PRNG.o: stdlib_kinds.o stdlib_error.o - -# Fortran sources that are built from fypp templates -stdlib_bitsets_64.f90: stdlib_bitsets_64.fypp -stdlib_bitsets_large.f90: stdlib_bitsets_large.fypp -stdlib_bitsets.f90: stdlib_bitsets.fypp -stdlib_io.f90: stdlib_io.fypp -stdlib_linalg.f90: stdlib_linalg.fypp -stdlib_linalg_diag.f90: stdlib_linalg_diag.fypp -stdlib_quadrature.f90: stdlib_quadrature.fypp -stdlib_stats.f90: stdlib_stats.fypp -stdlib_stats_mean.f90: stdlib_stats_mean.fypp -stdlib_stats_moment.f90: stdlib_stats_moment.fypp -stdlib_stats_moment_all.f90: stdlib_stats_moment_all.fypp -stdlib_stats_moment_mask.f90: stdlib_stats_moment_mask.fypp -stdlib_stats_moment_scalar.f90: stdlib_stats_moment_scalar.fypp -stdlib_stats_var.f90: stdlib_stats_var.fypp -stdlib_stats_distribution_PRNG.f90: stdlib_stats_distribution_PRNG.fypp From 9e3cfba44afeb281945ab66fb4a3f27e96e39f5c Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Thu, 21 Jan 2021 20:24:50 -0500 Subject: [PATCH 66/73] Update Makefile.manual --- src/Makefile.manual | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Makefile.manual b/src/Makefile.manual index 9351a374a..a57253e2b 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -17,7 +17,8 @@ SRCFYPP =\ stdlib_stats_moment_all.fypp \ stdlib_stats_moment_mask.fypp \ stdlib_stats_moment_scalar.fypp \ - stdlib_stats_var.fypp + stdlib_stats_var.fypp \ + stdlib_stats_distribution_PRNG.fypp SRC = f18estop.f90 \ stdlib_ascii.f90 \ @@ -104,3 +105,6 @@ stdlib_stats_var.o: \ stdlib_optval.o \ stdlib_kinds.o \ stdlib_stats.o +stdlib_stats_distribution_PRNG.o: \ + stdlib_kinds.o \ + stdlib_error.o From abad998bcca7aa410c5d58ce972fc912d5c790d4 Mon Sep 17 00:00:00 2001 From: milancurcic Date: Fri, 5 Feb 2021 11:15:13 -0500 Subject: [PATCH 67/73] explicit import --- src/stdlib_stats_distribution_PRNG.fypp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 87460f4d2..83dd783f3 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -1,7 +1,7 @@ #:include "common.fypp" module stdlib_stats_distribution_PRNG use stdlib_kinds, only: int8, int16, int32, int64 - use stdlib_error + use stdlib_error, only: error_stop implicit none private integer, parameter :: MAX_INT_BIT_SIZE = bit_size(1_int64) From bca3aabd84655d2017a1727d6a3ce48e1d2d7e9b Mon Sep 17 00:00:00 2001 From: milancurcic Date: Fri, 5 Feb 2021 11:33:56 -0500 Subject: [PATCH 68/73] makr rol64 pure --- src/stdlib_stats_distribution_PRNG.fypp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 83dd783f3..3a410322b 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -87,7 +87,7 @@ module stdlib_stats_distribution_PRNG st(4) = rol64(st(4), 45) end function xoshiro256ss - function rol64(x, k) result(res) + pure function rol64(x, k) result(res) integer(int64), intent(in) :: x integer, intent(in) :: k integer(int64) :: t1, t2, res From 19dfc4fb30fd3cf273643c15ca27287d76b6d636 Mon Sep 17 00:00:00 2001 From: milancurcic Date: Fri, 5 Feb 2021 11:35:24 -0500 Subject: [PATCH 69/73] minor style fix --- src/stdlib_stats_distribution_PRNG.fypp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 3a410322b..38a631c64 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -77,7 +77,7 @@ module stdlib_stats_distribution_PRNG integer(int64) :: res, t if(.not. seed_initialized) call random_distribution_seed_iint64(si,t) - res = rol64(st(2) * 5 , 7) * 9 + res = rol64(st(2) * 5, 7) * 9 t = shiftl(st(2), 17) st(3) = ieor(st(3), st(1)) st(4) = ieor(st(4), st(2)) From 60e8e94e3f95a48b437af3046d66efde8a5481f7 Mon Sep 17 00:00:00 2001 From: milancurcic Date: Fri, 5 Feb 2021 11:43:18 -0500 Subject: [PATCH 70/73] minor style fix to line continuation --- src/tests/stats/test_distribution_PRNG.f90 | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/tests/stats/test_distribution_PRNG.f90 b/src/tests/stats/test_distribution_PRNG.f90 index 426d87ddc..923091dd3 100644 --- a/src/tests/stats/test_distribution_PRNG.f90 +++ b/src/tests/stats/test_distribution_PRNG.f90 @@ -17,7 +17,7 @@ program test_distribution_PRNG subroutine test_random_seed integer :: put, get, res(5) - integer :: ans(5) = [-1859553078, -1933696596, -642834430, & + integer :: ans(5) = [-1859553078, -1933696596, -642834430, & 1711399314, 1548311463] integer :: i @@ -45,7 +45,7 @@ subroutine test_random_rand_iint8 do i = 1, 5 res(i) = dist_rand(1_int8) end do - call check(all(res == ans), msg="random_rand with kind int8 test" & + call check(all(res == ans), msg="random_rand with kind int8 test" & //" failed.", warn=warn) end subroutine test_random_rand_iint8 @@ -62,14 +62,14 @@ subroutine test_random_rand_iint16 do i = 1, 5 res(i) = dist_rand(1_int16) end do - call check(all(res == ans), msg="random_rand with kind int16 test" & + call check(all(res == ans), msg="random_rand with kind int16 test" & //" failed.", warn=warn) end subroutine test_random_rand_iint16 subroutine test_random_rand_iint32 integer :: put, get, i - integer(int32) :: res(5), ans(5)=[1984865646, -248954393, -1192993267, & + integer(int32) :: res(5), ans(5)=[1984865646, -248954393, -1192993267, & 1700514835, 1189401802] @@ -80,17 +80,17 @@ subroutine test_random_rand_iint32 do i = 1, 5 res(i) = dist_rand(1_int32) end do - call check(all(res == ans), msg="random_rand with kind int32 test" & + call check(all(res == ans), msg="random_rand with kind int32 test" & //" failed.", warn=warn) end subroutine test_random_rand_iint32 subroutine test_random_rand_iint64 integer :: put, get, i - integer(int64) :: res(5), ans(5)=[8524933037632333570_int64, & - -1069250973542918798_int64, & - -5123867065024149335_int64, & - 7303655603304982073_int64, & + integer(int64) :: res(5), ans(5)=[8524933037632333570_int64, & + -1069250973542918798_int64, & + -5123867065024149335_int64, & + 7303655603304982073_int64, & 5108441843522503546_int64] @@ -101,7 +101,7 @@ subroutine test_random_rand_iint64 do i = 1, 5 res(i) = dist_rand(1_int64) end do - call check(all(res == ans), msg="random_rand with kind int64 test" & + call check(all(res == ans), msg="random_rand with kind int64 test" & //" failed.", warn=warn) end subroutine test_random_rand_iint64 From b715acb25e43bb4e6b55e6c11457d9307b7dafcb Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Fri, 5 Feb 2021 13:34:39 -0500 Subject: [PATCH 71/73] Update src/stdlib_stats_distribution_PRNG.fypp Co-authored-by: Milan Curcic --- src/stdlib_stats_distribution_PRNG.fypp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 38a631c64..d242925da 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -5,9 +5,9 @@ module stdlib_stats_distribution_PRNG implicit none private integer, parameter :: MAX_INT_BIT_SIZE = bit_size(1_int64) - integer(int64), save :: st(4) ! internal states for xoshiro256ss function - integer(int64), save :: si = 614872703977525537_int64 ! default seed value - logical, save :: seed_initialized = .false. + integer(int64) :: st(4) ! internal states for xoshiro256ss function + integer(int64) :: si = 614872703977525537_int64 ! default seed value + logical :: seed_initialized = .false. public :: random_seed public :: dist_rand From c69419be56a252bd7dd3175bd00332a3fd4cfc70 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Fri, 5 Feb 2021 13:39:19 -0500 Subject: [PATCH 72/73] Update stdlib_stats_distribution_PRNG.fypp --- src/stdlib_stats_distribution_PRNG.fypp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index d242925da..350958d27 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -110,11 +110,11 @@ module stdlib_stats_distribution_PRNG ! ! Fortran 90 translated from C by Jim-215-Fisher ! - integer(int64) :: res, int01, int02, int03 + integer(int64) :: res integer(int64), intent(in), optional :: s - data int01, int02, int03/-7046029254386353131_int64, & - -4658895280553007687_int64, & - -7723592293110705685_int64/ + integer(int64) :: int01 = -7046029254386353131_int64, & + int02 = -4658895280553007687_int64, & + int03 = -7723592293110705685_int64 ! Values are converted from C unsigned integer of 0x9e3779b97f4a7c15, ! 0xbf58476d1ce4e5b9, 0x94d049bb133111eb From 9101d9666f2acc79f921b0d9069da87d82e809a7 Mon Sep 17 00:00:00 2001 From: Jing <53905783+Jim-215-Fisher@users.noreply.github.com> Date: Fri, 5 Feb 2021 13:46:05 -0500 Subject: [PATCH 73/73] Update stdlib_stats_distribution_PRNG.fypp --- src/stdlib_stats_distribution_PRNG.fypp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/stdlib_stats_distribution_PRNG.fypp b/src/stdlib_stats_distribution_PRNG.fypp index 350958d27..60448c778 100644 --- a/src/stdlib_stats_distribution_PRNG.fypp +++ b/src/stdlib_stats_distribution_PRNG.fypp @@ -6,8 +6,8 @@ module stdlib_stats_distribution_PRNG private integer, parameter :: MAX_INT_BIT_SIZE = bit_size(1_int64) integer(int64) :: st(4) ! internal states for xoshiro256ss function - integer(int64) :: si = 614872703977525537_int64 ! default seed value - logical :: seed_initialized = .false. + integer(int64) :: si = 614872703977525537_int64 ! default seed value + logical :: seed_initialized = .false. public :: random_seed public :: dist_rand