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