package Ġorg . jetbrains . kotlin x . dataframe . impl . api Ċ Ċ import Ġorg . jetbrains . kotlin x . dataframe . Columns Selector Ċ import Ġorg . jetbrains . kotlin x . dataframe . DataFrame Ċ import Ġorg . jetbrains . kotlin x . dataframe . api . Cor r Ċ import Ġorg . jetbrains . kotlin x . dataframe . api . cast Ċ import Ġorg . jetbrains . kotlin x . dataframe . api . cast NotNull Ċ import Ġorg . jetbrains . kotlin x . dataframe . api . convertTo Double Ċ import Ġorg . jetbrains . kotlin x . dataframe . api . data Frame Of Ċ import Ġorg . jetbrains . kotlin x . dataframe . api . get Columns With Paths Ċ import Ġorg . jetbrains . kotlin x . dataframe . api . is Column Group Ċ import Ġorg . jetbrains . kotlin x . dataframe . api . is Suit able For Cor r Ċ import Ġorg . jetbrains . kotlin x . dataframe . api . name Ċ import Ġorg . jetbrains . kotlin x . dataframe . api . to Value Column Ċ import Ġorg . jetbrains . kotlin x . dataframe . columns . Column Path Ċ import Ġorg . jetbrains . kotlin x . dataframe . columns . Column With Path Ċ import Ġorg . jetbrains . kotlin x . dataframe . math . variance And Mean Ċ import Ġorg . jetbrains . kotlin x . dataframe . n row Ċ import Ġkotlin . math . sqrt Ċ Ċ internal Ġfun Ġ< T , ĠC , ĠR > ĠCor r < T , ĠC >. corr Impl ( other Columns : ĠColumns Selector < T , ĠR >): ĠDataFrame < T > Ġ{ ĊĠĠĠ Ġval Ġlen Ġ= Ġdf . n row ĊĊĠĠĠ Ġfun Ġ< P > ĠList < Column With Path < P >> . unpack Column Groups () Ġ= Ġflat Map Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġextract Ġnested Ġnumber Ġcolumns Ġfrom ĠColumn Groups ĊĠĠĠĠĠĠĠ Ġif Ġ( it . is Column Group ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Path Ġ= Ġit . path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdf . get Columns With Paths Ġ{ Ġgroup Path . dfs Ġ{ Ġit . is Suit able For Cor r () Ġ} Ġ}. map Ġ{ Ġit . cast () Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠlistOf ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcols 1 Ġ= Ġdf . get Columns With Paths ( columns ) ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . is Column Group () Ġ|| Ġit . is Suit able For Cor r () Ġ} ĊĊĠĠĠ Ġval Ġcols 2 Ġ= Ġdf . get Columns With Paths ( other Columns ) ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . is Column Group () Ġ|| Ġit . is Suit able For Cor r () Ġ} ĊĠĠĠĠĠĠĠ Ġ. unpack Column Groups () ĊĊĠĠĠ Ġval Ġindex ColumnName Ġ= Ġif Ġ( cols 1 . size Ġ== Ġ 1 Ġ&& Ġcols 1 [ 0 ]. is Column Group ()) Ġcols 1 [ 0 ]. name Ġelse Ġ" column " ĊĠĠĠ Ġcols 1 Ġ= Ġcols 1 . unpack Column Groups () ĊĊĠĠĠ Ġval Ġindex Ġ= Ġcols 1 . map Ġ{ Ġit . name Ġ}. to Value Column ( index ColumnName ) ĊĊĠĠĠ Ġval Ġcols Ġ= Ġcols 1 . associate To ( mutable Map Of ()) Ġ{ Ġit . path Ġto Ġit . data . convertTo Double (). cast NotNull () Ġ} ĊĠĠĠ Ġcols 2 . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! cols . containsKey ( it . path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcols [ it . path ] Ġ= Ġit . data . convertTo Double (). cast NotNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstd Means Ġ= Ġcols . map Values Ġ{ ĊĠĠĠĠĠĠĠ Ġit . value . toList (). variance And Mean () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcache Ġ= Ġmutable Map Of < Pair < Column Path , ĠColumn Path >, ĠDouble >() ĊĊĠĠĠ Ġval Ġnew Columns Ġ= Ġcols 2 . map Ġ{ Ġc 2 Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġcols 1 . map Ġ{ Ġc 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcached Value Ġ= Ġcache [ c 2 . path Ġto Ġc 1 . path ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cached Value Ġ!= Ġnull ) Ġcached Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs 1 Ġ= Ġstd Means [ c 1 . path ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs 2 Ġ= Ġstd Means [ c 2 . path ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv 1 Ġ= Ġcols [ c 1 . path ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv 2 Ġ= Ġcols [ c 2 . path ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġ( 0 Ġuntil Ġlen ). sum Of Ġ{ Ġ( v 1 [ it ] Ġ- Ġs 1 . mean ) Ġ* Ġ( v 2 [ it ] Ġ- Ġs 2 . mean ) Ġ} Ġ/ Ġsqrt ( s 1 . variance Ġ* Ġs 2 . variance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache [ c 1 . path Ġto Ġc 2 . path ] Ġ= Ġres ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvalues . to Value Column ( c 2 . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġdata Frame Of ( listOf ( index ) Ġ+ Ġnew Columns ). cast () Ċ } Ċ