Skip to content

Commit edf6ac8

Browse files
author
Jim-215-Fisher
committed
public naming change and some corrections
1 parent bd6c97c commit edf6ac8

File tree

3 files changed

+90
-87
lines changed

3 files changed

+90
-87
lines changed

doc/specs/stdlib_stats_distribution_uniform.md

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ program demo_shuffle
6767
end program demo_shuffle
6868
```
6969

70-
## `uniform_distribution_rvs` - uniform distribution random variates
70+
## `rvs_uniform` - uniform distribution random variates
7171

7272
### Status
7373

@@ -89,11 +89,11 @@ For `complex` type, the real part and imaginary part are independent of each oth
8989

9090
### Syntax
9191

92-
`result = [[stdlib_stats_distribution_uniform(module):uniform_distribution_rvs(interface)]]([[loc,] scale] [[[,array_size]]])`
92+
`result = [[stdlib_stats_distribution_uniform(module):rvs_uniform(interface)]]([[loc,] scale] [[[,array_size]]])`
9393

9494
### Class
9595

96-
Elemental function.
96+
Elemental function (without the third argument).
9797

9898
### Arguments
9999

@@ -114,7 +114,7 @@ The result is a scalar or a rank one array, with size of `array_size`, of type `
114114
```fortran
115115
program demo_uniform_rvs
116116
use stdlib_stats_distribution_PRNG, only:random_seed
117-
use stdlib_stats_distribution_uniform, only:uni=> uniform_distribution_rvs
117+
use stdlib_stats_distribution_uniform, only:uni=> rvs_uniform
118118
119119
implicit none
120120
complex :: loc, scale
@@ -193,7 +193,7 @@ program demo_uniform_rvs
193193
end program demo_uniform_rvs
194194
```
195195

196-
## `uniform_distribution_pdf` - Uniform probability density function
196+
## `pdf_uniform` - Uniform probability density function
197197

198198
### Status
199199

@@ -236,9 +236,8 @@ The result is a scalar or an array, with a shape conformable to arguments, of ty
236236
```fortran
237237
program demo_uniform_pdf
238238
use stdlib_stats_distribution_PRNG, only : random_seed
239-
use stdlib_stats_distribution_uniform, only : &
240-
uni_pdf => uniform_distribution_pdf, &
241-
uni => uniform_distribution_rvs
239+
use stdlib_stats_distribution_uniform, only : uni_pdf => pdf_uniform, &
240+
uni => rvs_uniform
242241
243242
implicit none
244243
complex :: loc, scale
@@ -287,7 +286,7 @@ end program demo_uniform_pdf
287286
288287
```
289288

290-
## `uniform_distribution_cdf` - Uniform cumulative distribution function
289+
## `cdf_uniform` - Uniform cumulative distribution function
291290

292291
### Status
293292

@@ -305,7 +304,7 @@ F(x) = (x%re - loc%re)(x%im - loc%im) / (scale%re * scale%im); for complex unifo
305304

306305
### Syntax
307306

308-
`result = [[stdlib_stats_distribution_uniform(module):uniform_distribution_cdf(interface)]](x, loc, scale)`
307+
`result = [[stdlib_stats_distribution_uniform(module):cdf_uniform(interface)]](x, loc, scale)`
309308

310309
### Class
311310

@@ -330,9 +329,8 @@ The result is a scalar or an array, with a shape conformable to arguments, of ty
330329
```fortran
331330
program demo_uniform_cdf
332331
use stdlib_stats_distribution_PRNG, only : random_seed
333-
use stdlib_stats_distribution_uniform, only : &
334-
uni_cdf => uniform_distribution_cdf, &
335-
uni => uniform_distribution_rvs, &
332+
use stdlib_stats_distribution_uniform, only : uni_cdf => cdf_uniform, &
333+
uni => rvs_uniform
336334
337335
implicit none
338336
real :: x(3,4,5), a(3,4,5), b(3,4,5)
@@ -359,15 +357,15 @@ program demo_uniform_cdf
359357
x = reshape(uni(-1.0,2.0,60),[3,4,5]) ! uniform random variates array
360358
print *, uni_cdf(x,a,b) ! cumulative array in [-1.0, 1.0]
361359
362-
!0.161520004 0.553248405 0.986900032 0.942091405 0.114239901 0.780188501 &
363-
! 0.854656875 0.464386612 0.284466714 0.748768032 0.301834047 0.337008357 &
364-
!0.568843365 0.596165061 0.180993259 0.614166319 0.214835495 7.98164606E-02 &
365-
!0.641274095 0.607101977 0.701139212 0.230517209 1.97925568E-02 0.857982159 &
366-
!0.712761045 0.139202654 0.361759573 0.796536088 0.356012046 0.197665215 &
367-
!9.80764329E-02 0.781620383 0.595349193 0.125651121 0.957528770 0.942990601 &
368-
!0.259489566 7.84273148E-02 0.779313922 0.317909390 0.559013724 0.421358019 &
369-
!0.878484428 7.67416358E-02 0.298707575 0.693327367 0.146014273 0.102338850 &
370-
!0.855926156 0.250811368 0.300751567 0.110186398 0.502883077 0.738479793 &
360+
!0.161520004 0.553248405 0.986900032 0.942091405 0.114239901 0.780188501
361+
! 0.854656875 0.464386612 0.284466714 0.748768032 0.301834047 0.337008357
362+
!0.568843365 0.596165061 0.180993259 0.614166319 0.214835495 7.98164606E-02
363+
!0.641274095 0.607101977 0.701139212 0.230517209 1.97925568E-02 0.857982159
364+
!0.712761045 0.139202654 0.361759573 0.796536088 0.356012046 0.197665215
365+
!9.80764329E-02 0.781620383 0.595349193 0.125651121 0.957528770 0.942990601
366+
!0.259489566 7.84273148E-02 0.779313922 0.317909390 0.559013724 0.421358019
367+
!0.878484428 7.67416358E-02 0.298707575 0.693327367 0.146014273 0.102338850
368+
!0.855926156 0.250811368 0.300751567 0.110186398 0.502883077 0.738479793
371369
!0.764856219 0.294822574 1.90783739E-02 0.631218433 0.752170086 0.196848959
372370
373371
loc = (0., 0.)

src/stdlib_stats_distribution_uniform.fypp

Lines changed: 49 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,17 @@ module stdlib_stats_distribution_uniform
1212
real(dp), parameter :: MESENNE_NUMBER = 1.0_dp / (2.0_dp ** 53 - 1.0_dp)
1313
integer(int64), parameter :: INT_ONE = 1_int64
1414

15-
public :: uniform_distribution_rvs
16-
public :: uniform_distribution_pdf
17-
public :: uniform_distribution_cdf
15+
public :: rvs_uniform
16+
public :: pdf_uniform
17+
public :: cdf_uniform
1818
public :: shuffle
1919

2020

21-
interface uniform_distribution_rvs
21+
interface rvs_uniform
2222
!! Version experimental
2323
!!
2424
!! Get uniformly distributed random variate for integer, real and complex
25+
!! variables.
2526
!! ([Specification](../page/specs/stdlib_stats_distribution_uniform.html#
2627
!! description))
2728

@@ -38,11 +39,11 @@ module stdlib_stats_distribution_uniform
3839
#:for k1, t1 in ALL_KINDS_TYPES
3940
module procedure unif_dist_rvs_array_${t1[0]}$${k1}$ ! 3 dummy variables
4041
#:endfor
41-
end interface uniform_distribution_rvs
42+
end interface rvs_uniform
4243

4344

44-
interface uniform_distribution_pdf
45-
!! Version experiment
45+
interface pdf_uniform
46+
!! Version experimental
4647
!!
4748
!! Get uniform distribution probability density (pdf) for integer, real and
4849
!! complex variables.
@@ -52,10 +53,10 @@ module stdlib_stats_distribution_uniform
5253
#:for k1, t1 in ALL_KINDS_TYPES
5354
module procedure unif_dist_pdf_${t1[0]}$${k1}$
5455
#:endfor
55-
end interface uniform_distribution_pdf
56+
end interface pdf_uniform
5657

5758

58-
interface uniform_distribution_cdf
59+
interface cdf_uniform
5960
!! Version experimental
6061
!!
6162
!! Get uniform distribution cumulative distribution function (cdf) for integer,
@@ -66,14 +67,14 @@ module stdlib_stats_distribution_uniform
6667
#:for k1, t1 in ALL_KINDS_TYPES
6768
module procedure unif_dist_cdf_${t1[0]}$${k1}$
6869
#:endfor
69-
end interface uniform_distribution_cdf
70+
end interface cdf_uniform
7071

7172

7273
interface shuffle
7374
!! Version experimental
7475
!!
7576
!! Fisher-Yates shuffle algorithm for a rank one array of integer, real and
76-
!! complex variables
77+
!! complex variables.
7778
!! ([Specification](../page/specs/stdlib_stats_distribution_uniform.html#
7879
!! description))
7980
!!
@@ -85,6 +86,8 @@ module stdlib_stats_distribution_uniform
8586

8687

8788

89+
90+
8891
contains
8992

9093

@@ -101,8 +104,8 @@ contains
101104
${t1}$ :: res, u, mask
102105
integer :: zeros, bits_left, bits
103106

104-
if(scale <= 0_${k1}$) call error_stop("Error(unif_dist_rvs_1): Uniform" &
105-
//" distribution scale parameter must be positive")
107+
if(scale <= 0_${k1}$) call error_stop("Error(unif_dist_rvs_1): Uniform"&
108+
//" distribution scale parameter must be positive")
106109
zeros = leadz(scale)
107110
bits = bit_size(scale) - zeros
108111
mask = shiftr(not(0_${k1}$), zeros)
@@ -126,16 +129,16 @@ contains
126129

127130

128131
#:for k1, t1 in INT_KINDS_TYPES
129-
impure elemental function unif_dist_rvs_${t1[0]}$${k1}$(loc, scale) &
132+
impure elemental function unif_dist_rvs_${t1[0]}$${k1}$(loc, scale) &
130133
result( res )
131134
!
132135
! Uniformly distributed integer in [loc, loc + scale]
133136
!
134137
${t1}$, intent(in) :: loc, scale
135138
${t1}$ :: res
136139

137-
if(scale <= 0_${k1}$) call error_stop("Error(unif_dist_rvs): Uniform" &
138-
//" distribution scale parameter must be positive")
140+
if(scale <= 0_${k1}$) call error_stop("Error(unif_dist_rvs): Uniform" &
141+
//" distribution scale parameter must be positive")
139142
res = loc + unif_dist_rvs_1_${t1[0]}$${k1}$(scale)
140143
end function unif_dist_rvs_${t1[0]}$${k1}$
141144

@@ -170,8 +173,8 @@ contains
170173
${t1}$, intent(in) :: scale
171174
${t1}$ :: res
172175

173-
if(scale == 0._${k1}$) call error_stop("Error(unif_dist_rvs_1): " &
174-
//"Uniform distribution scale parameter must be non-zero")
176+
if(scale == 0._${k1}$) call error_stop("Error(unif_dist_rvs_1): " &
177+
//"Uniform distribution scale parameter must be non-zero")
175178
res = scale * unif_dist_rvs_0_${t1[0]}$${k1}$( )
176179
end function unif_dist_rvs_1_${t1[0]}$${k1}$
177180

@@ -180,16 +183,16 @@ contains
180183

181184

182185
#:for k1, t1 in REAL_KINDS_TYPES
183-
impure elemental function unif_dist_rvs_${t1[0]}$${k1}$(loc, scale) &
186+
impure elemental function unif_dist_rvs_${t1[0]}$${k1}$(loc, scale) &
184187
result(res)
185188
!
186189
! Uniformly distributed float in [loc, loc + scale]
187190
!
188191
${t1}$, intent(in) :: loc, scale
189192
${t1}$ :: res
190193

191-
if(scale == 0._${k1}$) call error_stop("Error(unif_dist_rvs): " &
192-
//"Uniform distribution scale parameter must be non-zero")
194+
if(scale == 0._${k1}$) call error_stop("Error(unif_dist_rvs): " &
195+
//"Uniform distribution scale parameter must be non-zero")
193196
res = loc + scale * unif_dist_rvs_0_${t1[0]}$${k1}$( )
194197
end function unif_dist_rvs_${t1[0]}$${k1}$
195198

@@ -198,7 +201,8 @@ contains
198201

199202

200203
#:for k1, t1 in CMPLX_KINDS_TYPES
201-
impure elemental function unif_dist_rvs_1_${t1[0]}$${k1}$(scale) result(res)
204+
impure elemental function unif_dist_rvs_1_${t1[0]}$${k1}$(scale) &
205+
result(res)
202206
!
203207
! Uniformly distributed complex in [(0,0i), (scale, i(scale))]
204208
! The real part and imaginary part are independent of each other, so that
@@ -208,8 +212,8 @@ contains
208212
${t1}$ :: res
209213
real(${k1}$) :: r1, tr, ti
210214

211-
if(scale == (0.0_${k1}$, 0.0_${k1}$)) call error_stop("Error(uni_dist_" &
212-
//"rvs_1): Uniform distribution scale parameter must be non-zero")
215+
if(scale == (0.0_${k1}$, 0.0_${k1}$)) call error_stop("Error(uni_dist_"&
216+
//"rvs_1): Uniform distribution scale parameter must be non-zero")
213217
r1 = unif_dist_rvs_0_r${k1}$( )
214218
if(scale % re == 0.0_${k1}$) then
215219
ti = scale % im * r1
@@ -230,10 +234,11 @@ contains
230234

231235

232236
#:for k1, t1 in CMPLX_KINDS_TYPES
233-
impure elemental function unif_dist_rvs_${t1[0]}$${k1}$(loc, scale) &
237+
impure elemental function unif_dist_rvs_${t1[0]}$${k1}$(loc, scale) &
234238
result(res)
235239
!
236-
! Uniformly distributed complex in [(loc,iloc), (loc + scale, i(loc + scale))]
240+
! Uniformly distributed complex in [(loc,iloc), (loc + scale, i(loc +
241+
! scale))].
237242
! The real part and imaginary part are independent of each other, so that
238243
! the joint distribution is on an unit square [(loc,iloc), (loc + scale,
239244
! i(loc + scale))]
@@ -242,8 +247,8 @@ contains
242247
${t1}$ :: res
243248
real(${k1}$) :: r1, tr, ti
244249

245-
if(scale == (0.0_${k1}$, 0.0_${k1}$)) call error_stop("Error(uni_dist_" &
246-
//"rvs): Uniform distribution scale parameter must be non-zero")
250+
if(scale == (0.0_${k1}$, 0.0_${k1}$)) call error_stop("Error(uni_dist_"&
251+
//"rvs): Uniform distribution scale parameter must be non-zero")
247252
r1 = unif_dist_rvs_0_r${k1}$( )
248253
if(scale % re == 0.0_${k1}$) then
249254
tr = loc % re
@@ -264,7 +269,7 @@ contains
264269

265270

266271
#:for k1, t1 in INT_KINDS_TYPES
267-
function unif_dist_rvs_array_${t1[0]}$${k1}$(loc, scale, array_size) &
272+
function unif_dist_rvs_array_${t1[0]}$${k1}$(loc, scale, array_size) &
268273
result(res)
269274

270275
integer, intent(in) :: array_size
@@ -273,8 +278,8 @@ contains
273278
${t1}$ :: u, mask, nn
274279
integer :: i, zeros, bits_left, bits
275280

276-
if(scale == 0_${k1}$) call error_stop("Error(unif_dist_rvs_array): Uniform" &
277-
//" distribution scale parameter must be non-zero")
281+
if(scale == 0_${k1}$) call error_stop("Error(unif_dist_rvs_array): " &
282+
//"Uniform distribution scale parameter must be non-zero")
278283
zeros = leadz(scale)
279284
bits = bit_size(scale) - zeros
280285
mask = shiftr(not(0_${k1}$), zeros)
@@ -301,7 +306,7 @@ contains
301306

302307

303308
#:for k1, t1 in REAL_KINDS_TYPES
304-
function unif_dist_rvs_array_${t1[0]}$${k1}$(loc, scale, array_size) &
309+
function unif_dist_rvs_array_${t1[0]}$${k1}$(loc, scale, array_size) &
305310
result(res)
306311

307312
integer, intent(in) :: array_size
@@ -312,8 +317,8 @@ contains
312317
integer :: i
313318

314319

315-
if(scale == 0._${k1}$) call error_stop("Error(unif_dist_rvs_array):" &
316-
//" Uniform distribution scale parameter must be non-zero")
320+
if(scale == 0._${k1}$) call error_stop("Error(unif_dist_rvs_array):" &
321+
//" Uniform distribution scale parameter must be non-zero")
317322
do i = 1, array_size
318323
tmp = shiftr(dist_rand(INT_ONE), 11)
319324
t = real(tmp * MESENNE_NUMBER, kind = ${k1}$)
@@ -326,7 +331,7 @@ contains
326331

327332

328333
#:for k1, t1 in CMPLX_KINDS_TYPES
329-
function unif_dist_rvs_array_${t1[0]}$${k1}$(loc, scale, array_size) &
334+
function unif_dist_rvs_array_${t1[0]}$${k1}$(loc, scale, array_size) &
330335
result(res)
331336

332337
integer, intent(in) :: array_size
@@ -337,8 +342,9 @@ contains
337342
integer :: i
338343

339344

340-
if(scale == (0.0_${k1}$, 0.0_${k1}$)) call error_stop("Error(unif_dist_"&
341-
//"rvs_array): Uniform distribution scale parameter must be non-zero")
345+
if(scale == (0.0_${k1}$, 0.0_${k1}$)) call error_stop("Error(unif_dist"&
346+
//"_rvs_array): Uniform distribution scale parameter must be " &
347+
//"non-zero")
342348
do i = 1, array_size
343349
tmp = shiftr(dist_rand(INT_ONE), 11)
344350
r1 = real(tmp * MESENNE_NUMBER, kind = ${k1}$)
@@ -389,7 +395,7 @@ contains
389395

390396
if(scale == 0.0_${k1}$) then
391397
res = 0.0
392-
elseif(x <= loc .or. x >= (loc + scale)) then
398+
elseif(x < loc .or. x > (loc + scale)) then
393399
res = 0.0
394400
else
395401
res = 1.0 / scale
@@ -410,8 +416,8 @@ contains
410416
tr = loc % re + scale % re; ti = loc % im + scale % im
411417
if(scale == (0.0_${k1}$,0.0_${k1}$)) then
412418
res = 0.0
413-
elseif((x % re >= loc % re .and. x % re <= tr) .and. &
414-
(x % im >= loc % im .and. x % im <= ti)) then
419+
elseif((x % re > loc % re .and. x % re < tr) .and. &
420+
(x % im > loc % im .and. x % im < ti)) then
415421
res = 1.0 / (scale % re * scale % im)
416422
else
417423
res = 0.0
@@ -485,9 +491,9 @@ contains
485491
res = (x % re - loc % re) / scale % re
486492
elseif((.not. i1) .and. (.not. i2) .and. r2) then
487493
res = (x % im - loc % im) / scale % im
488-
elseif((.not. r1) .and. (.not. r2) .and. (.not. i1) .and. (.not. i2)) &
494+
elseif((.not. r1) .and. (.not. r2) .and. (.not. i1) .and. (.not. i2)) &
489495
then
490-
res = (x % re - loc % re) * (x % im - loc % im) / &
496+
res = (x % re - loc % re) * (x % im - loc % im) / &
491497
(scale % re * scale % im)
492498
elseif(r2 .and. i2)then
493499
res = 1.0
@@ -509,7 +515,7 @@ contains
509515
n = size(list)
510516
res = list
511517
do i = 1, n - 1
512-
j = uniform_distribution_rvs(n - i) + i
518+
j = rvs_uniform(n - i) + i
513519
tmp = res(i)
514520
res(i) = res(j)
515521
res(j) = tmp

0 commit comments

Comments
 (0)