1 #Region "Microsoft.VisualBasic::3cbbbd091c6e8bf2f0bc42c9da7fd035, Microsoft.VisualBasic.Core\Extensions\Math\StatisticsMathExtensions\Linq\EnumerableStatsRange.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Module EnumerableStatsRange
35     
36     '         Function: (+20 Overloads) Range
37     
38     
39     ' /********************************************************************************/
40
41 #End Region
42
43 Imports System.Runtime.CompilerServices
44
45 Namespace Math.Statistics.Linq
46
47     Public Module EnumerableStatsRange
48         '
49         ' Summary:
50         '     Computes the Range of a sequence of nullable System.Decimal values.
51         '
52         ' Parameters:
53         '   source:
54         '     A sequence of nullable System.Decimal values to calculate the Range of.
55         '
56         Returns:
57         '     The Range of the sequence of values, or null if the source sequence is
58         '     empty or contains only values that are null.
59         '
60         ' Exceptions:
61         '   System.ArgumentNullException:
62         '     source is null.
63         '
64         '   System.OverflowException:
65         '     The sum of the elements in the sequence is larger than System.Decimal.MaxValue.
66         <Extension>
67         Public Function Range(source As IEnumerable(Of Decimal?)) As Decimal
68             Dim values As IEnumerable(Of Decimal) = source.Coalesce()
69             If values.Any() Then
70                 Return values.Range()
71             End If
72
73             Return Nothing
74         End Function
75         '
76         ' Summary:
77         '     Computes the Range of a sequence of System.Decimal values.
78         '
79         ' Parameters:
80         '   source:
81         '     A sequence of System.Decimal values to calculate the Range of.
82         '
83         Returns:
84         '     The Range of the sequence of values.
85         '
86         ' Exceptions:
87         '   System.ArgumentNullException:
88         '     source is null.
89         '
90         '   System.InvalidOperationException:
91         '     source contains no elements.
92         '
93         '   System.OverflowException:
94         '     The sum of the elements in the sequence is larger than System.Decimal.MaxValue.
95         <Extension>
96         Public Function Range(source As IEnumerable(Of Decimal)) As Decimal
97             Return source.Max() - source.Min()
98         End Function
99         '
100         ' Summary:
101         '     Computes the Range of a sequence of nullable System.Double values.
102         '
103         ' Parameters:
104         '   source:
105         '     A sequence of nullable System.Double values to calculate the Range of.
106         '
107         Returns:
108         '     The Range of the sequence of values, or null if the source sequence is
109         '     empty or contains only values that are null.
110         '
111         ' Exceptions:
112         '   System.ArgumentNullException:
113         '     source is null.
114         <Extension>
115         Public Function Range(source As IEnumerable(Of Double?)) As Double
116             Dim values As IEnumerable(Of Double) = source.Coalesce()
117             If values.Any() Then
118                 Return values.Range()
119             End If
120
121             Return Nothing
122         End Function
123         '
124         ' Summary:
125         '     Computes the Range of a sequence of System.Double values.
126         '
127         ' Parameters:
128         '   source:
129         '     A sequence of System.Double values to calculate the Range of.
130         '
131         Returns:
132         '     The Range of the sequence of values.
133         '
134         ' Exceptions:
135         '   System.ArgumentNullException:
136         '     source is null.
137         '
138         '   System.InvalidOperationException:
139         '     source contains no elements.
140         <Extension>
141         Public Function Range(source As IEnumerable(Of Double)) As Double
142             Return source.Max() - source.Min()
143         End Function
144         '
145         ' Summary:
146         '     Computes the Range of a sequence of nullable System.Single values.
147         '
148         ' Parameters:
149         '   source:
150         '     A sequence of nullable System.Single values to calculate the Range of.
151         '
152         Returns:
153         '     The Range of the sequence of values, or null if the source sequence is
154         '     empty or contains only values that are null.
155         '
156         ' Exceptions:
157         '   System.ArgumentNullException:
158         '     source is null.
159         <Extension>
160         Public Function Range(source As IEnumerable(Of Single?)) As Single
161             Dim values As IEnumerable(Of Single) = source.Coalesce()
162             If values.Any() Then
163                 Return values.Range()
164             End If
165
166             Return Nothing
167         End Function
168         '
169         ' Summary:
170         '     Computes the Range of a sequence of System.Single values.
171         '
172         ' Parameters:
173         '   source:
174         '     A sequence of System.Single values to calculate the Range of.
175         '
176         Returns:
177         '     The Range of the sequence of values.
178         '
179         ' Exceptions:
180         '   System.ArgumentNullException:
181         '     source is null.
182         '
183         '   System.InvalidOperationException:
184         '     source contains no elements.
185         <Extension>
186         Public Function Range(source As IEnumerable(Of Single)) As Single
187             Return source.Max() - source.Min()
188         End Function
189         '
190         ' Summary:
191         '     Computes the Range of a sequence of nullable System.Int32 values.
192         '
193         ' Parameters:
194         '   source:
195         '     A sequence of nullable System.Int32values to calculate the Range of.
196         '
197         Returns:
198         '     The Range of the sequence of values, or null if the source sequence is
199         '     empty or contains only values that are null.
200         '
201         ' Exceptions:
202         '   System.ArgumentNullException:
203         '     source is null.
204         '
205         '   System.OverflowException:
206         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
207         <Extension>
208         Public Function Range(source As IEnumerable(Of Integer?)) As Integer
209             Dim values As IEnumerable(Of Integer) = source.Coalesce()
210             If values.Any() Then
211                 Return values.Range()
212             End If
213
214             Return Nothing
215         End Function
216         '
217         ' Summary:
218         '     Computes the Range of a sequence of System.Int32 values.
219         '
220         ' Parameters:
221         '   source:
222         '     A sequence of System.Int32 values to calculate the Range of.
223         '
224         Returns:
225         '     The Range of the sequence of values.
226         '
227         ' Exceptions:
228         '   System.ArgumentNullException:
229         '     source is null.
230         '
231         '   System.InvalidOperationException:
232         '     source contains no elements.
233         '
234         '   System.OverflowException:
235         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
236         <Extension>
237         Public Function Range(source As IEnumerable(Of Integer)) As Integer
238             Return source.Max() - source.Min()
239         End Function
240         '
241         ' Summary:
242         '     Computes the Range of a sequence of nullable System.Int64 values.
243         '
244         ' Parameters:
245         '   source:
246         '     A sequence of nullable System.Int64 values to calculate the Range of.
247         '
248         Returns:
249         '     The Range of the sequence of values, or null if the source sequence is
250         '     empty or contains only values that are null.
251         '
252         ' Exceptions:
253         '   System.ArgumentNullException:
254         '     source is null.
255         '
256         '   System.OverflowException:
257         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
258         <Extension>
259         Public Function Range(source As IEnumerable(Of Long?)) As Long
260             Dim values As IEnumerable(Of Long) = source.Coalesce()
261             If values.Any() Then
262                 Return values.Range()
263             End If
264
265             Return Nothing
266         End Function
267         '
268         ' Summary:
269         '     Computes the Range of a sequence of System.Int64 values.
270         '
271         ' Parameters:
272         '   source:
273         '     A sequence of System.Int64 values to calculate the Range of.
274         '
275         Returns:
276         '     The Range of the sequence of values.
277         '
278         ' Exceptions:
279         '   System.ArgumentNullException:
280         '     source is null.
281         '
282         '   System.InvalidOperationException:
283         '     source contains no elements.
284         '
285         '   System.OverflowException:
286         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
287         <Extension>
288         Public Function Range(source As IEnumerable(Of Long)) As Long
289             Return source.Max() - source.Min()
290         End Function
291         '
292         ' Summary:
293         '     Computes the Range of a sequence of nullable System.Decimal values that
294         '     are obtained by invoking a transform function on each element of the input
295         '     sequence.
296         '
297         ' Parameters:
298         '   source:
299         '     A sequence of values to calculate the Range of.
300         '
301         '   selector:
302         '     A transform function to apply to each element.
303         '
304         ' Type parameters:
305         '   TSource:
306         '     The type of the elements of source.
307         '
308         Returns:
309         '     The Range of the sequence of values, or null if the source sequence is
310         '     empty or contains only values that are null.
311         '
312         ' Exceptions:
313         '   System.ArgumentNullException:
314         '     source or selector is null.
315         '
316         '   System.OverflowException:
317         '     The sum of the elements in the sequence is larger than System.Decimal.MaxValue.
318         <Extension>
319         Public Function Range(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Decimal?)) As Decimal
320             Return source.[Select](selector).Range()
321         End Function
322         '
323         ' Summary:
324         '     Computes the Range of a sequence of System.Decimal values that are obtained
325         '     by invoking a transform function on each element of the input sequence.
326         '
327         ' Parameters:
328         '   source:
329         '     A sequence of values that are used to calculate an Range.
330         '
331         '   selector:
332         '     A transform function to apply to each element.
333         '
334         ' Type parameters:
335         '   TSource:
336         '     The type of the elements of source.
337         '
338         Returns:
339         '     The Range of the sequence of values.
340         '
341         ' Exceptions:
342         '   System.ArgumentNullException:
343         '     source or selector is null.
344         '
345         '   System.InvalidOperationException:
346         '     source contains no elements.
347         '
348         '   System.OverflowException:
349         '     The sum of the elements in the sequence is larger than System.Decimal.MaxValue.
350         <Extension>
351         Public Function Range(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Decimal)) As Decimal
352             Return source.[Select](selector).Range()
353         End Function
354         '
355         ' Summary:
356         '     Computes the Range of a sequence of nullable System.Double values that
357         '     are obtained by invoking a transform function on each element of the input
358         '     sequence.
359         '
360         ' Parameters:
361         '   source:
362         '     A sequence of values to calculate the Range of.
363         '
364         '   selector:
365         '     A transform function to apply to each element.
366         '
367         ' Type parameters:
368         '   TSource:
369         '     The type of the elements of source.
370         '
371         Returns:
372         '     The Range of the sequence of values, or null if the source sequence is
373         '     empty or contains only values that are null.
374         '
375         ' Exceptions:
376         '   System.ArgumentNullException:
377         '     source or selector is null.
378         <Extension>
379         Public Function Range(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Double?)) As Double
380             Return source.[Select](selector).Range()
381         End Function
382         '
383         ' Summary:
384         '     Computes the Range of a sequence of System.Double values that are obtained
385         '     by invoking a transform function on each element of the input sequence.
386         '
387         ' Parameters:
388         '   source:
389         '     A sequence of values to calculate the Range of.
390         '
391         '   selector:
392         '     A transform function to apply to each element.
393         '
394         ' Type parameters:
395         '   TSource:
396         '     The type of the elements of source.
397         '
398         Returns:
399         '     The Range of the sequence of values.
400         '
401         ' Exceptions:
402         '   System.ArgumentNullException:
403         '     source or selector is null.
404         '
405         '   System.InvalidOperationException:
406         '     source contains no elements.
407         <Extension>
408         Public Function Range(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Double)) As Double
409             Return source.[Select](selector).Range()
410         End Function
411         '
412         ' Summary:
413         '     Computes the Range of a sequence of nullable System.Single values that
414         '     are obtained by invoking a transform function on each element of the input
415         '     sequence.
416         '
417         ' Parameters:
418         '   source:
419         '     A sequence of values to calculate the Range of.
420         '
421         '   selector:
422         '     A transform function to apply to each element.
423         '
424         ' Type parameters:
425         '   TSource:
426         '     The type of the elements of source.
427         '
428         Returns:
429         '     The Range of the sequence of values, or null if the source sequence is
430         '     empty or contains only values that are null.
431         '
432         ' Exceptions:
433         '   System.ArgumentNullException:
434         '     source or selector is null.
435         <Extension>
436         Public Function Range(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Single?)) As Single
437             Return source.[Select](selector).Range()
438         End Function
439         '
440         ' Summary:
441         '     Computes the Range of a sequence of System.Single values that are obtained
442         '     by invoking a transform function on each element of the input sequence.
443         '
444         ' Parameters:
445         '   source:
446         '     A sequence of values to calculate the Range of.
447         '
448         '   selector:
449         '     A transform function to apply to each element.
450         '
451         ' Type parameters:
452         '   TSource:
453         '     The type of the elements of source.
454         '
455         Returns:
456         '     The Range of the sequence of values.
457         '
458         ' Exceptions:
459         '   System.ArgumentNullException:
460         '     source or selector is null.
461         '
462         '   System.InvalidOperationException:
463         '     source contains no elements.
464         <Extension>
465         Public Function Range(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Single)) As Single
466             Return source.[Select](selector).Range()
467         End Function
468         '
469         ' Summary:
470         '     Computes the Range of a sequence of nullable System.Int32 values that are
471         '     obtained by invoking a transform function on each element of the input sequence.
472         '
473         ' Parameters:
474         '   source:
475         '     A sequence of values to calculate the Range of.
476         '
477         '   selector:
478         '     A transform function to apply to each element.
479         '
480         ' Type parameters:
481         '   TSource:
482         '     The type of the elements of source.
483         '
484         Returns:
485         '     The Range of the sequence of values, or null if the source sequence is
486         '     empty or contains only values that are null.
487         '
488         ' Exceptions:
489         '   System.ArgumentNullException:
490         '     source or selector is null.
491         '
492         '   System.OverflowException:
493         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
494         <Extension>
495         Public Function Range(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Integer?)) As Double
496             Return source.[Select](selector).Range()
497         End Function
498         '
499         ' Summary:
500         '     Computes the Range of a sequence of System.Int32 values that are obtained
501         '     by invoking a transform function on each element of the input sequence.
502         '
503         ' Parameters:
504         '   source:
505         '     A sequence of values to calculate the Range of.
506         '
507         '   selector:
508         '     A transform function to apply to each element.
509         '
510         ' Type parameters:
511         '   TSource:
512         '     The type of the elements of source.
513         '
514         Returns:
515         '     The Range of the sequence of values.
516         '
517         ' Exceptions:
518         '   System.ArgumentNullException:
519         '     source or selector is null.
520         '
521         '   System.InvalidOperationException:
522         '     source contains no elements.
523         '
524         '   System.OverflowException:
525         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
526         <Extension>
527         Public Function Range(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Integer)) As Double
528             Return source.[Select](selector).Range()
529         End Function
530         '
531         ' Summary:
532         '     Computes the Range of a sequence of nullable System.Int64 values that are
533         '     obtained by invoking a transform function on each element of the input sequence.
534         '
535         ' Parameters:
536         '   source:
537         '     A sequence of values to calculate the Range of.
538         '
539         '   selector:
540         '     A transform function to apply to each element.
541         '
542         ' Type parameters:
543         '   TSource:
544         '     The type of the elements of source.
545         '
546         Returns:
547         '     The Range of the sequence of values, or null if the source sequence is
548         '     empty or contains only values that are null.
549         <Extension>
550         Public Function Range(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Long?)) As Double
551             Return source.[Select](selector).Range()
552         End Function
553         '
554         ' Summary:
555         '     Computes the Range of a sequence of System.Int64 values that are obtained
556         '     by invoking a transform function on each element of the input sequence.
557         '
558         ' Parameters:
559         '   source:
560         '     A sequence of values to calculate the Range of.
561         '
562         '   selector:
563         '     A transform function to apply to each element.
564         '
565         ' Type parameters:
566         '   TSource:
567         '     The type of the elements of source.
568         '
569         Returns:
570         '     The Range of the sequence of values.
571         '
572         ' Exceptions:
573         '   System.ArgumentNullException:
574         '     source or selector is null.
575         '
576         '   System.InvalidOperationException:
577         '     source contains no elements.
578         '
579         '   System.OverflowException:
580         '     The sum of the elements in the sequence is larger than System.Int64.MaxValue.
581         <Extension>
582         Public Function Range(Of TSource)(source As IEnumerable(Of TSource), selector As Func(Of TSource, Long)) As Double
583             Return source.[Select](selector).Range()
584         End Function
585     End Module
586 End Namespace