Skip to content

Commit 5d38d82

Browse files
committed
median: mv to ord_sort + combine REAL and INTEGER procedures
1 parent dbc16af commit 5d38d82

File tree

2 files changed

+73
-294
lines changed

2 files changed

+73
-294
lines changed

src/stdlib_stats.fypp

Lines changed: 42 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#:set RANKS = range(1, MAXRANK + 1)
33
#:set REDRANKS = range(2, MAXRANK + 1)
44
#:set RC_KINDS_TYPES = REAL_KINDS_TYPES + CMPLX_KINDS_TYPES
5+
#:set IR_KINDS_TYPES_OUTPUT = list(zip(REAL_KINDS, REAL_TYPES, REAL_KINDS)) + list(zip(INT_KINDS,INT_TYPES, ['dp']*len(INT_KINDS)))
56
module stdlib_stats
67
!! Provides support for various statistical methods. This includes currently
78
!! descriptive statistics
@@ -309,102 +310,51 @@ module stdlib_stats
309310
!!
310311
!! Median of array elements
311312
!! ([Specification](../page/specs/stdlib_stats.html#median))
312-
#:for k1, t1 in REAL_KINDS_TYPES
313-
#:for rank in RANKS
314-
#:set RName = rname("median_all",rank, t1, k1)
315-
module function ${RName}$ (x, mask) result(res)
316-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
317-
logical, intent(in), optional :: mask
318-
${t1}$ :: res
319-
end function ${RName}$
320-
#:endfor
321-
#:endfor
322-
323-
#:for k1, t1 in INT_KINDS_TYPES
324-
#:for rank in RANKS
325-
#:set RName = rname("median_all",rank, t1, k1,'dp')
326-
module function ${RName}$ (x, mask) result(res)
327-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
328-
logical, intent(in), optional :: mask
329-
real(dp) :: res
330-
end function ${RName}$
331-
#:endfor
332-
#:endfor
333-
334-
#:for k1, t1 in REAL_KINDS_TYPES
335-
#:for rank in RANKS
336-
#:set RName = rname("median",rank, t1, k1)
337-
module function ${RName}$(x, dim, mask) result(res)
338-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
339-
integer, intent(in) :: dim
340-
logical, intent(in), optional :: mask
341-
${t1}$ :: res${reduced_shape('x', rank, 'dim')}$
342-
end function ${RName}$
343-
#:endfor
344-
#:endfor
345-
346-
#:for k1, t1 in INT_KINDS_TYPES
347-
#:for rank in RANKS
348-
#:set RName = rname("median",rank, t1, k1,'dp')
349-
module function ${RName}$(x, dim, mask) result(res)
350-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
351-
integer, intent(in) :: dim
352-
logical, intent(in), optional :: mask
353-
real(dp) :: res${reduced_shape('x', rank, 'dim')}$
354-
end function ${RName}$
355-
#:endfor
356-
#:endfor
357-
358-
#:for k1, t1 in REAL_KINDS_TYPES
359-
#:for rank in RANKS
360-
#:set RName = rname('median_mask_all',rank, t1, k1)
361-
module function ${RName}$(x, mask) result(res)
362-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
363-
logical, intent(in) :: mask${ranksuffix(rank)}$
364-
${t1}$ :: res
365-
end function ${RName}$
313+
#:for k1, t1, o1 in IR_KINDS_TYPES_OUTPUT
314+
#:for rank in RANKS
315+
#:set RName = rname("median_all",rank, t1, k1, o1)
316+
module function ${RName}$ (x, mask) result(res)
317+
${t1}$, intent(in) :: x${ranksuffix(rank)}$
318+
logical, intent(in), optional :: mask
319+
real(${o1}$) :: res
320+
end function ${RName}$
321+
#:endfor
366322
#:endfor
367-
#:endfor
368-
369-
#:for k1, t1 in INT_KINDS_TYPES
370-
#:for rank in RANKS
371-
#:set RName = rname('median_mask_all',rank, t1, k1,'dp')
372-
module function ${RName}$(x, mask) result(res)
373-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
374-
logical, intent(in) :: mask${ranksuffix(rank)}$
375-
real(dp) :: res
376-
end function ${RName}$
323+
324+
#:for k1, t1, o1 in IR_KINDS_TYPES_OUTPUT
325+
#:for rank in RANKS
326+
#:set RName = rname("median",rank, t1, k1, o1)
327+
module function ${RName}$(x, dim, mask) result(res)
328+
${t1}$, intent(in) :: x${ranksuffix(rank)}$
329+
integer, intent(in) :: dim
330+
logical, intent(in), optional :: mask
331+
real(${o1}$) :: res${reduced_shape('x', rank, 'dim')}$
332+
end function ${RName}$
333+
#:endfor
377334
#:endfor
378-
#:endfor
379-
380-
381-
382-
#:for k1, t1 in REAL_KINDS_TYPES
383-
#:for rank in RANKS
384-
#:set RName = rname('median_mask',rank, t1, k1)
385-
module function ${RName}$(x, dim, mask) result(res)
386-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
387-
integer, intent(in) :: dim
388-
logical, intent(in) :: mask${ranksuffix(rank)}$
389-
${t1}$ :: res${reduced_shape('x', rank, 'dim')}$
390-
end function ${RName}$
335+
336+
#:for k1, t1, o1 in IR_KINDS_TYPES_OUTPUT
337+
#:for rank in RANKS
338+
#:set RName = rname('median_mask_all',rank, t1, k1, o1)
339+
module function ${RName}$(x, mask) result(res)
340+
${t1}$, intent(in) :: x${ranksuffix(rank)}$
341+
logical, intent(in) :: mask${ranksuffix(rank)}$
342+
real(${o1}$) :: res
343+
end function ${RName}$
344+
#:endfor
391345
#:endfor
392-
#:endfor
393-
394-
395-
#:for k1, t1 in INT_KINDS_TYPES
396-
#:for rank in RANKS
397-
#:set RName = rname('median_mask',rank, t1, k1, 'dp')
398-
module function ${RName}$(x, dim, mask) result(res)
399-
${t1}$, intent(in) :: x${ranksuffix(rank)}$
400-
integer, intent(in) :: dim
401-
logical, intent(in) :: mask${ranksuffix(rank)}$
402-
real(dp) :: res${reduced_shape('x', rank, 'dim')}$
403-
end function ${RName}$
346+
347+
#:for k1, t1, o1 in IR_KINDS_TYPES_OUTPUT
348+
#:for rank in RANKS
349+
#:set RName = rname('median_mask',rank, t1, k1, o1)
350+
module function ${RName}$(x, dim, mask) result(res)
351+
${t1}$, intent(in) :: x${ranksuffix(rank)}$
352+
integer, intent(in) :: dim
353+
logical, intent(in) :: mask${ranksuffix(rank)}$
354+
real(${o1}$) :: res${reduced_shape('x', rank, 'dim')}$
355+
end function ${RName}$
356+
#:endfor
404357
#:endfor
405-
#:endfor
406-
407-
408358

409359
end interface
410360

0 commit comments

Comments
 (0)