@ file : Suppress (" NOTH ING _ TO _ INLINE ", Ġ" NAME _ SH ADO WING ") Ċ Ċ package Ġnl . j ol an ren sen . efficient ly Discover ing T ernary L agged Corre lations . stamp P ear son Ċ Ċ import Ġnl . j ol an ren sen . efficient ly Discover ing T ernary L agged Corre lations .* Ċ import Ġnl . j ol an ren sen . efficient ly Discover ing T ernary L agged Corre lations . aggreg ations .* Ċ import Ġnl . j ol an ren sen . efficient ly Discover ing T ernary L agged Corre lations . stamp P ear son . Stamp Array Cache . Slot Ċ import Ġorg . jetbrains . bio . vik tor .* Ċ import Ġorg . j transforms . fft . Double FFT _ 1 D Ċ import Ġjava . io . Serializable Ċ import Ġkotlin . math . sqrt Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof ĠST AMP Ġfrom ĠMatrix ĠProfile Ġpaper Ġusing ĠM ue en 's Ġsimilarity Ġsearch . Ċ Ġ* ĠCalculates ĠP ear son Ġcorrelation Ġinstead Ġof ĠE uclidean Ġdistance , Ġbut Ġcan Ġbe Ġeasily Ġconverted Ġusing Ġ[ Stamp P ear son . pear son Corre lations To E uclidean ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġarray Cache Ġ( optional ) Ġthe Ġarray Ġcache Ġthat Ġis Ġused Ġfor Ġthis Ġ[ Stamp P ear son ] Ġinstance . Ċ Ġ* Ġ@ param Ġfour ier Cache Ġ( optional ) Ġthe Ġ[ Double FFT _ 1 D ] Ġinstance Ġcache Ġused Ġfor Ġthis Ġ[ Stamp P ear son ] Ġinstance . Ċ Ġ*/ Ċ @ Suppress (" Local Variable Name ") Ċ open Ġclass ĠSt amp P ear son Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġinternal Ġval Ġarray Cache : ĠSt amp Array Cache Ġ= ĠSt amp Array Cache ( ĊĠĠĠĠĠĠĠ ĠmaxSize Ġ= Ġ 1 0 0 , ĊĠĠĠĠĠĠĠ Ġslot Manager Ġ= ĠSt amp Array Cache . Slots With Re use , ĊĠĠĠ Ġ), ĊĠĠĠ Ġinternal Ġval Ġfour ier Cache : ĠMutable Map < Int , ĠDouble FFT _ 1 D > Ġ= Ġmutable Map Of (), Ċ ) Ġ: ĠSerializable Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġmax Array Size ĠThe Ġsize Ġof Ġthe Ġlargest Ġseries Ġput Ġin Ġthe Ġalgorithms . ĠThe Ġarray Ġcache Ġautomatically Ġen lar ges ĊĠĠĠĠ Ġ* Ġ Ġif Ġnot Ġlarge Ġenough . ĊĠĠĠĠ Ġ* Ġ@ param Ġslot Manager ĠThe Ġmethod Ġof Ġre using Ġslots Ġin Ġthe Ġarray Ġcache . ĠDefault Ġis Ġ[ Stamp Array Cache . Slots With Re use ]. ĊĠĠĠĠ Ġ* Ġ ĠUse Ġ[ Stamp Array Cache . No Slots ] Ġif Ġ[ Stamp P ear son ] Ġinstance Ġis Ġaccessed Ġacross Ġmultiple Ġthreads . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġmax Array Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġslot Manager : ĠSt amp Array Cache . Slot Manager Ġ= ĠSt amp Array Cache . Slots With Re use , ĊĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġarray Cache Ġ= ĠSt amp Array Cache ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxSize Ġ= Ġmax Array Size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslot Manager Ġ= Ġslot Manager , ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġfour ier Cache Ġ= Ġmutable Map Of (), ĊĠĠĠ Ġ) ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠMatrix ĠProfile Ġfunction Ġusing ĠP ear son Ġcorrelation Ġ([ Double Array ] Ġvariant ). ĠIt Ġcalculates Ġthe ĠMatrix ĠProfile Ġfor Ġ[ time Series ] Ġin ĠP ear son Ġcorre lations . ĊĠĠĠĠ Ġ* ĠIt Ġsupports Ġhaving Ġstraight - line Ġskipping Ġand Ġautomatically Ġre - orders ĠA Ġand ĠB Ġfor Ġefficiency . ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ Stamp P ear son . pear son Corre lations To E uclidean ] Ġto Ġget Ġthe ĠE uclidean Ġdistances Ġinstead . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Ġthe Ġtime Ġseries . ĠIf Ġskipping Ġoccurs Ġin Ġthe Ġseries , Ġalso Ġsupply Ġ[ time Series Without NaN ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Without NaN Ġ( optional ) Ġthe Ġoriginal Ġtime Ġseries Ġthat Ġneeds Ġto Ġbe Ġsupplied Ġif Ġskipping Ġoccurs Ġin Ġ[ time Series ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġwindow Size Ġthe Ġwindow Ġsize . ĊĠĠĠĠ Ġ* Ġ@ param Ġreducer Ġ( optional , Ġdefault Ġ= ĠMAX ) Ġeither Ġ[ MAX ] Ġor Ġ[ MIN ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Sl iding Means Ġ( optional ) Ġthe Ġsl iding Ġmeans Ġof Ġ[ time Series ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe ĊĠĠĠĠ Ġ* Ġ Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Sl iding St ds Ġ( optional ) Ġthe Ġsl iding Ġstandard Ġde viations Ġof Ġ[ time Series ], Ġso Ġthat Ġit Ġdoesn 't Ġhave ĊĠĠĠĠ Ġ* Ġ Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠP ear son ĠMatrix ĠProfile Ġand Ġindices Ġof Ġthe ĠMatrix ĠProfile Ġfor Ġ[ time Series ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġmatrix Profile P ear son ( ĊĠĠĠĠĠĠĠ Ġtime Series : ĠDouble Array , ĊĠĠĠĠĠĠĠ Ġtime Series Without NaN : ĠDouble Array ? Ġ= Ġnull , Ġ// Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series ], Ġthis Ġneeds Ġto Ġbe Ġsupplied ĊĠĠĠĠĠĠĠ Ġwindow Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġreducer : ĠAg gregation With Reducer With Arg With Compare Ġ= ĠMAX , ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġhorizontal Ġspeed Ġoptimization ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding Means : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding St ds : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠPair < F 6 4 Flat Array , ĠInt Array > Ġ= ĊĠĠĠĠĠĠĠ Ġmatrix Profile P ear son ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Ġ= Ġtime Series . as F 6 4 Array (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Without NaN Ġ= Ġtime Series Without NaN ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġwindow Size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreducer Ġ= Ġreducer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Sl iding Means Ġ= Ġtime Series Sl iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Sl iding St ds Ġ= Ġtime Series Sl iding St ds , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠMatrix ĠProfile Ġfunction Ġusing ĠP ear son Ġcorrelation . ĠIt Ġcalculates Ġthe ĠMatrix ĠProfile Ġfor Ġ[ time Series ] Ġin ĠP ear son Ġcorre lations . ĊĠĠĠĠ Ġ* ĠIt Ġsupports Ġhaving Ġstraight - line Ġskipping Ġand Ġautomatically Ġre - orders ĠA Ġand ĠB Ġfor Ġefficiency . ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ Stamp P ear son . pear son Corre lations To E uclidean ] Ġto Ġget Ġthe ĠE uclidean Ġdistances Ġinstead . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Ġthe Ġtime Ġseries . ĠIf Ġskipping Ġoccurs Ġin Ġthe Ġseries , Ġalso Ġsupply Ġ[ time Series Without NaN ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Without NaN Ġ( optional ) Ġthe Ġoriginal Ġtime Ġseries Ġthat Ġneeds Ġto Ġbe Ġsupplied Ġif Ġskipping Ġoccurs Ġin Ġ[ time Series ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġwindow Size Ġthe Ġwindow Ġsize . ĊĠĠĠĠ Ġ* Ġ@ param Ġreducer Ġ( optional , Ġdefault Ġ= ĠMAX ) Ġeither Ġ[ MAX ] Ġor Ġ[ MIN ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Sl iding Means Ġ( optional ) Ġthe Ġsl iding Ġmeans Ġof Ġ[ time Series ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe ĊĠĠĠĠ Ġ* Ġ Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Sl iding St ds Ġ( optional ) Ġthe Ġsl iding Ġstandard Ġde viations Ġof Ġ[ time Series ], Ġso Ġthat Ġit Ġdoesn 't Ġhave ĊĠĠĠĠ Ġ* Ġ Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠP ear son ĠMatrix ĠProfile Ġand Ġindices Ġof Ġthe ĠMatrix ĠProfile Ġfor Ġ[ time Series ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġmatrix Profile P ear son ( ĊĠĠĠĠĠĠĠ Ġtime Series : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġtime Series Without NaN : ĠF 6 4 Flat Array ? Ġ= Ġnull , Ġ// Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series ], Ġthis Ġneeds Ġto Ġbe Ġsupplied ĊĠĠĠĠĠĠĠ Ġwindow Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġreducer : ĠAg gregation With Reducer With Arg With Compare Ġ= ĠMAX , ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġhorizontal Ġspeed Ġoptimization ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding Means : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding St ds : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠPair < F 6 4 Flat Array , ĠInt Array > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġtime Series . length ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġwindow Size ĊĊĠĠĠĠĠĠĠ Ġif Ġ( time Series . any Ġ{ Ġit . isNaN () Ġ}) Ġrequire ( time Series Without NaN Ġ!= Ġnull ) Ġ{ Ġ" The Ġsupplied Ġtime Ġseries Ġhas Ġcontinu ity Ġremoved , Ġplease Ġsupply Ġthe Ġoriginal Ġtime Ġseries Ġwithout ĠNaN s Ġas Ġwell ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġtime Series Sl iding Means Ġ= Ġtime Series Sl iding Means ĊĠĠĠĠĠĠĠ Ġvar Ġtime Series Sl iding St ds Ġ= Ġtime Series Sl iding St ds ĊĊĠĠĠĠĠĠĠ Ġif Ġ( time Series Sl iding Means Ġ== Ġnull Ġ|| Ġtime Series Sl iding St ds Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Sl iding Means Ġ= ĠF 6 4 Flat Array ( n Ġ- Ġm Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Sl iding St ds Ġ= ĠF 6 4 Flat Array ( n Ġ- Ġm Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= Ġtime Series , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ= Ġtime Series Sl iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array Ġ= Ġtime Series Sl iding St ds , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġplane Result Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF 6 4 Array . full ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ- Ġm Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ- Ġm Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ= Ġreducer . initializer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠOut Of Memory Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError (" try ing Ġto Ġcreate Ġ${ n Ġ- Ġm Ġ+ Ġ 1 }^ 2 Ġarray ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstamp P ear son ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series A Ġ= Ġtime Series . copy (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Ġ= Ġtime Series . copy (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġwindow Size , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series A Without NaN Ġ= Ġtime Series Without NaN ?. copy (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Without NaN Ġ= Ġtime Series Without NaN ?. copy (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreducer Ġ= Ġreducer , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding Means Ġ= Ġtime Series Sl iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds Ġ= Ġtime Series Sl iding St ds , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Sl iding Means Ġ= Ġtime Series Sl iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Sl iding St ds Ġ= Ġtime Series Sl iding St ds , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Plane Callback Ġ= Ġplane Result , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġobviously Ġthe Ġdiagonal Ġis Ġnot Ġneeded ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. n Ġ- Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplane Result [ i , Ġi ] Ġ= Ġreducer . initializer ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġfix Ġin fs ĊĠĠĠĠĠĠĠ Ġplane Result . transform In Place Ġ{ Ġit . coerce Not Inf ( reducer . initializer ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġline Result Ġ= ĠF 6 4 Flat Array ( n Ġ- Ġm Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġindex Result Ġ= ĠInt Array ( n Ġ- Ġm Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. n Ġ- Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġplane Result . view As Flat ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Index Ġ= Ġreducer . arg Function ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Result [ i ] Ġ= Ġbest Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Result [ i ] Ġ= Ġreducer ( line ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġline Result Ġto Ġindex Result ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠST AMP - P ear son Ġfunction Ġ([ Double Array ] Ġvariant ). ĠIt Ġfinds Ġthe Ġbest ĠP ear son Ġcorrelation Ġvalue Ġbetween Ġall Ġwindow Ġposition Ġin Ġ[ time Series A ] ĊĠĠĠĠ Ġ* Ġand Ġ[ time Series B ]. ĠIt Ġsupports Ġhaving Ġstraight - line Ġskipping Ġand Ġautomatically Ġre - orders ĠA Ġand ĠB Ġfor Ġefficiency . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A Ġthe Ġfirst Ġtime Ġseries . ĠIf Ġskipping Ġoccurs Ġin Ġthe Ġseries , Ġalso Ġsupply Ġ[ time Series A Without NaN ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Ġthe Ġsecond Ġtime Ġseries . ĠIf Ġskipping Ġoccurs Ġin Ġthe Ġseries , Ġalso Ġsupply Ġ[ time Series B Without NaN ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġwindow Size Ġthe Ġwindow Ġsize . ĊĠĠĠĠ Ġ* Ġ@ param Ġreducer Ġ( optional , Ġdefault Ġ= ĠMAX ) Ġeither Ġ[ MAX ] Ġor Ġ[ MIN ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A Without NaN Ġ( optional ) Ġthe Ġoriginal Ġfirst Ġtime Ġseries Ġthat Ġneeds Ġto Ġbe Ġsupplied Ġif Ġskipping Ġoccurs Ġin Ġ[ time Series A ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Without NaN Ġ( optional ) Ġthe Ġoriginal Ġsecond Ġtime Ġseries Ġthat Ġneeds Ġto Ġbe Ġsupplied Ġif Ġskipping Ġoccurs Ġin Ġ[ time Series B ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series AS l iding Means Ġ( optional ) Ġthe Ġsl iding Ġmeans Ġof Ġ[ time Series A ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe ĊĠĠĠĠ Ġ* Ġ Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series AS l iding St ds Ġ( optional ) Ġthe Ġsl iding Ġstandard Ġde viations Ġof Ġ[ time Series A ], Ġso Ġthat Ġit Ġdoesn 't Ġhave ĊĠĠĠĠ Ġ* Ġ Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Sl iding Means Ġ( optional ) Ġthe Ġsl iding Ġmeans Ġof Ġ[ time Series B ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe ĊĠĠĠĠ Ġ* Ġ Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Sl iding St ds Ġ( optional ) Ġthe Ġsl iding Ġstandard Ġde viations Ġof Ġ[ time Series B ], Ġso Ġthat Ġit Ġdoesn 't Ġhave ĊĠĠĠĠ Ġ* Ġ Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Plane Callback Ġ( optional ) Ġthis Ġ 2 D Ġarray Ġcan Ġbe Ġsupplied Ġto Ġstore Ġall Ġthe Ġresults Ġinstead Ġof Ġjust Ġthe Ġbest . ĊĠĠĠĠ Ġ* Ġ ĠShould Ġbe Ġof Ġsize Ġ[ nB Ġ- Ġm Ġ+ Ġ 1 , Ġn A Ġ- Ġm Ġ+ Ġ 1 ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Index Callback Ġ( optional ) Ġa Ġcallback Ġto Ġget Ġthe Ġindex Ġof Ġthe Ġstart Ġof Ġthe Ġwindow Ġpositions Ġin Ġ[ time Series A ] Ġand Ġ[ time Series B ] Ġfor Ġthe Ġbest Ġfound Ġcorrelation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġvalue Ġof Ġthe Ġbest ĠP ear son Ġcorrelation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġstamp P ear son ( ĊĠĠĠĠĠĠĠ Ġtime Series A : ĠDouble Array , ĊĠĠĠĠĠĠĠ Ġtime Series B : ĠDouble Array , ĊĠĠĠĠĠĠĠ Ġwindow Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġreducer : ĠAg gregation With Reducer With Arg With Compare Ġ= ĠMAX , ĊĠĠĠĠĠĠĠ Ġtime Series A Without NaN : ĠDouble Array ? Ġ= Ġnull , Ġ// Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series A ], Ġthis Ġneeds Ġto Ġbe Ġsupplied ĊĠĠĠĠĠĠĠ Ġtime Series B Without NaN : ĠDouble Array ? Ġ= Ġnull , Ġ// Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series B ], Ġthis Ġneeds Ġto Ġbe Ġsupplied ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġhorizontal Ġoptimizations ĊĠĠĠĠĠĠĠ Ġtime Series AS l iding Means : ĠDouble Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds : ĠDouble Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series B Sl iding Means : ĠDouble Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series B Sl iding St ds : ĠDouble Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġplane ĊĠĠĠĠĠĠĠ Ġresult Plane Callback : ĠF 6 4 Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġindex ĊĠĠĠĠĠĠĠ Ġresult Index Callback : Ġ(( a Index : ĠInt , Ġb Index : ĠInt ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠDouble Ġ= Ġstamp P ear son ( ĊĠĠĠĠĠĠĠ Ġtime Series A Ġ= Ġtime Series A . as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series B Ġ= Ġtime Series B . as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġwindow Size , ĊĠĠĠĠĠĠĠ Ġreducer Ġ= Ġreducer , ĊĠĠĠĠĠĠĠ Ġtime Series A Without NaN Ġ= Ġtime Series A Without NaN ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series B Without NaN Ġ= Ġtime Series B Without NaN ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series AS l iding Means Ġ= Ġtime Series AS l iding Means ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds Ġ= Ġtime Series AS l iding St ds ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series B Sl iding Means Ġ= Ġtime Series B Sl iding Means ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series B Sl iding St ds Ġ= Ġtime Series B Sl iding St ds ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġresult Plane Callback Ġ= Ġresult Plane Callback , ĊĠĠĠĠĠĠĠ Ġresult Index Callback Ġ= Ġresult Index Callback , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠST AMP - P ear son Ġfunction . ĠIt Ġfinds Ġthe Ġbest ĠP ear son Ġcorrelation Ġvalue Ġbetween Ġall Ġwindow Ġposition Ġin Ġ[ time Series A ] ĊĠĠĠĠ Ġ* Ġand Ġ[ time Series B ]. ĠIt Ġsupports Ġhaving Ġstraight - line Ġskipping Ġand Ġautomatically Ġre - orders ĠA Ġand ĠB Ġfor Ġefficiency . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A Ġthe Ġfirst Ġtime Ġseries . ĠIf Ġskipping Ġoccurs Ġin Ġthe Ġseries , Ġalso Ġsupply Ġ[ time Series A Without NaN ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Ġthe Ġsecond Ġtime Ġseries . ĠIf Ġskipping Ġoccurs Ġin Ġthe Ġseries , Ġalso Ġsupply Ġ[ time Series B Without NaN ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġwindow Size Ġthe Ġwindow Ġsize . ĊĠĠĠĠ Ġ* Ġ@ param Ġreducer Ġ( optional , Ġdefault Ġ= ĠMAX ) Ġeither Ġ[ MAX ] Ġor Ġ[ MIN ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A Without NaN Ġ( optional ) Ġthe Ġoriginal Ġfirst Ġtime Ġseries Ġthat Ġneeds Ġto Ġbe Ġsupplied Ġif Ġskipping Ġoccurs Ġin Ġ[ time Series A ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Without NaN Ġ( optional ) Ġthe Ġoriginal Ġsecond Ġtime Ġseries Ġthat Ġneeds Ġto Ġbe Ġsupplied Ġif Ġskipping Ġoccurs Ġin Ġ[ time Series B ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series AS l iding Means Ġ( optional ) Ġthe Ġsl iding Ġmeans Ġof Ġ[ time Series A ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe ĊĠĠĠĠ Ġ* Ġ Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series AS l iding St ds Ġ( optional ) Ġthe Ġsl iding Ġstandard Ġde viations Ġof Ġ[ time Series A ], Ġso Ġthat Ġit Ġdoesn 't Ġhave ĊĠĠĠĠ Ġ* Ġ Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Sl iding Means Ġ( optional ) Ġthe Ġsl iding Ġmeans Ġof Ġ[ time Series B ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe ĊĠĠĠĠ Ġ* Ġ Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Sl iding St ds Ġ( optional ) Ġthe Ġsl iding Ġstandard Ġde viations Ġof Ġ[ time Series B ], Ġso Ġthat Ġit Ġdoesn 't Ġhave ĊĠĠĠĠ Ġ* Ġ Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Plane Callback Ġ( optional ) Ġthis Ġ 2 D Ġarray Ġcan Ġbe Ġsupplied Ġto Ġstore Ġall Ġthe Ġresults Ġinstead Ġof Ġjust Ġthe Ġbest . ĊĠĠĠĠ Ġ* Ġ ĠShould Ġbe Ġof Ġsize Ġ[ nB Ġ- Ġm Ġ+ Ġ 1 , Ġn A Ġ- Ġm Ġ+ Ġ 1 ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Index Callback Ġ( optional ) Ġa Ġcallback Ġto Ġget Ġthe Ġindex Ġof Ġthe Ġstart Ġof Ġthe Ġwindow Ġpositions Ġin Ġ[ time Series A ] Ġand Ġ[ time Series B ] Ġfor Ġthe Ġbest Ġfound Ġcorrelation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġvalue Ġof Ġthe Ġbest ĠP ear son Ġcorrelation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġstamp P ear son ( ĊĠĠĠĠĠĠĠ Ġtime Series A : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġtime Series B : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġwindow Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġreducer : ĠAg gregation With Reducer With Arg With Compare Ġ= ĠMAX , ĊĠĠĠĠĠĠĠ Ġtime Series A Without NaN : ĠF 6 4 Flat Array ? Ġ= Ġnull , Ġ// Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series A ], Ġthis Ġneeds Ġto Ġbe Ġsupplied ĊĠĠĠĠĠĠĠ Ġtime Series B Without NaN : ĠF 6 4 Flat Array ? Ġ= Ġnull , Ġ// Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series B ], Ġthis Ġneeds Ġto Ġbe Ġsupplied ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġhorizontal Ġoptimizations ĊĠĠĠĠĠĠĠ Ġtime Series AS l iding Means : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series B Sl iding Means : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series B Sl iding St ds : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġplane ĊĠĠĠĠĠĠĠ Ġresult Plane Callback : ĠF 6 4 Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġindex ĊĠĠĠĠĠĠĠ Ġresult Index Callback : Ġ(( a Index : ĠInt , Ġb Index : ĠInt ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠTA Ġ= Ġtime Series A ĊĠĠĠĠĠĠĠ Ġvar ĠTB Ġ= Ġtime Series B ĊĊĠĠĠĠĠĠĠ Ġval ĠTA Has NaN s Ġ= ĠTA . any Ġ{ Ġit . isNaN () Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠTB Has NaN s Ġ= ĠTB . any Ġ{ Ġit . isNaN () Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( TA Has NaN s ) Ġrequire ( time Series A Without NaN Ġ!= Ġnull ) Ġ{ Ġ" The Ġsupplied Ġtime Ġseries ĠA Ġhas Ġcontinu ity Ġremoved , Ġplease Ġsupply Ġthe Ġoriginal Ġtime Ġseries Ġwithout ĠNaN s Ġas Ġwell ." Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( TB Has NaN s ) Ġrequire ( time Series B Without NaN Ġ!= Ġnull ) Ġ{ Ġ" The Ġsupplied Ġtime Ġseries ĠB Ġhas Ġcontinu ity Ġremoved , Ġplease Ġsupply Ġthe Ġoriginal Ġtime Ġseries Ġwithout ĠNaN s Ġas Ġwell ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar ĠT AN o NaN Ġ= Ġtime Series A Without NaN Ġ?: ĠTA ĊĠĠĠĠĠĠĠ Ġvar ĠTB No NaN Ġ= Ġtime Series B Without NaN Ġ?: ĠTB ĊĊĠĠĠĠĠĠĠ Ġ// Ġreorder ĠA Ġand ĠB Ġaccording Ġto Ġthe Ġamount Ġof ĠNaN s ĊĠĠĠĠĠĠĠ Ġvar Ġresult Index Callback Ġ= Ġresult Index Callback ĊĠĠĠĠĠĠĠ Ġvar Ġa And B Are F lipped Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(( TA Has NaN s Ġ|| ĠTB Has NaN s ) Ġ&& ĠTB . count Ġ{ Ġit . isNaN () Ġ} Ġ> ĠTA . count Ġ{ Ġit . isNaN () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa And B Are F lipped Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp T Ġ= ĠTA ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTA Ġ= ĠTB ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTB Ġ= Ġtemp T ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp T No NaN Ġ= ĠT AN o NaN ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT AN o NaN Ġ= ĠTB No NaN ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTB No NaN Ġ= Ġtemp T No NaN ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Index Callback Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Result Index Callback Ġ= Ġresult Index Callback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Index Callback Ġ= Ġ{ Ġa , Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Result Index Callback ( b , Ġa ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġn A Ġ= ĠTA . length ĊĠĠĠĠĠĠĠ Ġval Ġn B Ġ= ĠTB . length ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġwindow Size ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result Plane Callback Ġ!= Ġnull ) Ġrequire ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Plane Callback . shape . content Equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn B Ġ- Ġm Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn A Ġ- Ġm Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġresult Ġshould Ġbe Ġof Ġsize Ġ[ nB Ġ- Ġm Ġ+ Ġ 1 , Ġn A Ġ- Ġm Ġ+ Ġ 1 ], Ġwhere Ġ[ n ] Ġis Ġthe Ġsize Ġof Ġ[ time Series ] Ġand Ġ[ m ] Ġis Ġthe Ġsize Ġof Ġ[ query ]. \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" currently Ġit 's Ġ${ result Plane Callback . shape . toList ()}, Ġn A =$ nA , Ġn B =$ nB , Ġm =$ m " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġtime Series AS l iding Means Ġ= Ġtime Series AS l iding Means ĊĠĠĠĠĠĠĠ Ġvar Ġtime Series AS l iding St ds Ġ= Ġtime Series AS l iding St ds ĊĊĠĠĠĠĠĠĠ Ġif Ġ( time Series AS l iding St ds Ġ== Ġnull Ġ|| Ġtime Series AS l iding Means Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding Means Ġ= ĠF 6 4 Flat Array ( nA Ġ- Ġm Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds Ġ= ĠF 6 4 Flat Array ( nA Ġ- Ġm Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠTA , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ= Ġtime Series AS l iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array Ġ= Ġtime Series AS l iding St ds , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġtime Series B Sl iding Means Ġ= Ġtime Series B Sl iding Means ĊĠĠĠĠĠĠĠ Ġvar Ġtime Series B Sl iding St ds Ġ= Ġtime Series B Sl iding St ds ĊĊĠĠĠĠĠĠĠ Ġif Ġ( time Series B Sl iding Means Ġ== Ġnull Ġ|| Ġtime Series B Sl iding St ds Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Sl iding Means Ġ= ĠF 6 4 Flat Array ( nB Ġ- Ġm Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Sl iding St ds Ġ= ĠF 6 4 Flat Array ( nB Ġ- Ġm Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠTB , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ= Ġtime Series B Sl iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array Ġ= Ġtime Series B Sl iding St ds , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġconsider Cache Query B TimeSeries AS l iding Dot Products Empty Ġ= Ġdelegate Of ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġcache Query B TimeSeries AS l iding Dot Products Ġ= ĠF 6 4 Flat Array ( nA Ġ- Ġm Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Result Line Callback ( query B Index : ĠInt ): Ġ(( F 6 4 Flat Array ) Ġ-> ĠUnit )? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result Plane Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġit : ĠF 6 4 Flat Array Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa And B Are F lipped Ġ-> Ġresult Plane Callback . V [_ I , Ġquery B Index ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġresult Plane Callback . V [ query B Index ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġbest A Index : ĠInt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġbest B Index : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġvar Ġbest Correlation Ġ= Ġreducer . initializer ĊĠĠĠĠĠĠĠ Ġvar Ġprevious Query B : ĠF 6 4 Flat Array ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠTB . map Window ed With Index ( m ) Ġ{ Ġquery B Index , Ġquery B Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġskip Ġfor Ġcontinu ity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query B . any Ġ{ Ġit . isNaN () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider Cache Query B TimeSeries AS l iding Dot Products Empty . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Window ed With Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġa Index : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Result Ġ= Ġmass P ear son ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Ġ= ĠT AN o NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġquery B , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer Ġ= Ġreducer , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġvertical Ġspeed Ġup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Mean Ġ= Ġtime Series B Sl iding Means [ query B Index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Std Ġ= Ġtime Series B Sl iding St ds [ query B Index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Sl iding Means Ġ= Ġtime Series AS l iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Sl iding St ds Ġ= Ġtime Series AS l iding St ds , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhorizontal Ġspeed Ġup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider Cache Query TimeSeries Sl iding Dot Products Empty Ġ= Ġconsider Cache Query B TimeSeries AS l iding Dot Products Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query TimeSeries Sl iding Dot Products Ġ= Ġcache Query B TimeSeries AS l iding Dot Products , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Query Ġ= Ġprevious Query B , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Index Callback Ġ= Ġwhen Ġ( result Index Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġa I Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Index Ġ= Ġa I ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Line Callback Ġ= Ġget Result Line Callback ( query B Index ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reducer . first Is Better Than Second ( first Ġ= Ġline Result , Ġsecond Ġ= Ġbest Correlation )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Correlation Ġ= Ġreducer ( best Correlation , Ġline Result ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" S ENSE LESS _ COMP AR IS ON ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Index Callback Ġ!= Ġnull ) Ġ{ Ġ// Ġdon 't Ġlisten Ġto Ġthis Ġhint , Ġit 's Ġwrong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest A Index Ġ= Ġa Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest B Index Ġ= Ġquery B Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Query B Ġ= Ġquery B ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult Index Callback ?. invoke ( best A Index , Ġbest B Index ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbest Correlation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠM ASS - P ear son Ġfunction Ġ([ Double Array ] Ġvariant ). ĠIt Ġfinds Ġthe Ġbest ĠP ear son Ġcorrelation Ġvalue Ġbetween Ġ[ query ] Ġand Ġall Ġthe Ġwindows Ġin ĊĠĠĠĠ Ġ* Ġ[ time Series ] Ġwhich Ġcan Ġoptionally Ġbe Ġaggregated Ġby Ġthe Ġqueries Ġin Ġ[ aggregation Queries ] Ġat Ġeach Ġwindow Ġposition . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Ġthe Ġtime Ġseries Ġgiven Ġas Ġa Ġwhole ĊĠĠĠĠ Ġ* Ġ@ param Ġquery Ġa Ġquery Ġof Ġanother Ġtime Ġseries ĊĠĠĠĠ Ġ* Ġ@ param Ġaggregation Queries Ġ( optional ) Ġshould Ġbe Ġ 1 ) Ġa Ġquery - sized Ġaggregation Ġflat Ġarray , Ġor Ġ 2 ) Ġan Ġarray Ġof Ġquery ĊĠĠĠĠ Ġ* Ġ Ġsized Ġaggregation Ġflat Ġarrays ĊĠĠĠĠ Ġ* Ġ@ param Ġreducer Ġ( optional , Ġdefault Ġ= ĠMAX ) Ġeither Ġ[ MAX ] Ġor Ġ[ MIN ] ĊĠĠĠĠ Ġ* Ġ@ param Ġquery Dot Aggregation Products Ġ( optional ) Ġ[ Double ] Ġwhich Ġcan Ġconsist Ġof Ġthe Ġresult Ġof Ġaggreg ating Ġthe ĊĠĠĠĠ Ġ* Ġ Ġ[ aggregation Queries ] Ġby Ġelement Ġwise Ġproduct Ġand Ġusing Ġarray Ġthat Ġto Ġtake Ġthe Ġdot Ġproduct Ġwith Ġ[ query ] ĊĠĠĠĠ Ġ* Ġ@ param Ġquery TimeSeries Sl iding Dot Products Ġ( optional ) Ġan Ġarray Ġcontaining Ġthe Ġsl iding Ġdot Ġproducts Ġbetween Ġ[ query ] ĊĠĠĠĠ Ġ* Ġ Ġand Ġ[ time Series ] Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġquery Mean Ġ( optional ) Ġthe Ġmean Ġof Ġ[ query ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġquery Std Ġ( optional ) Ġthe Ġstandard Ġdeviation Ġof Ġ[ query ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Sl iding Means Ġ( optional ) Ġthe Ġsl iding Ġmeans Ġof Ġ[ time Series ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe ĊĠĠĠĠ Ġ* Ġ Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĠDon 't Ġprovide Ġif Ġproviding Ġ[ pre calculated TimeSeries Sl iding Means ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Sl iding St ds Ġ( optional ) Ġthe Ġsl iding Ġstandard Ġde viations Ġof Ġ[ time Series ], Ġso Ġthat Ġit Ġdoesn 't Ġhave ĊĠĠĠĠ Ġ* Ġ Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĠDon 't Ġprovide Ġif Ġproviding Ġ[ pre calculated TimeSeries Sl iding Means ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġpre calculated TimeSeries Sl iding Means Ġ( optional ) Ġthe Ġsl iding Ġmeans Ġof Ġ[ time Series ], Ġprovided Ġto Ġcalculate ĊĠĠĠĠ Ġ* Ġ Ġsl iding Ġmeans Ġand Ġstandard Ġde viations Ġwith Ġaggreg ations Ġfaster . ĠDon 't Ġprovide Ġif Ġproviding Ġ[ time Series Sl iding Means ] ĊĠĠĠĠ Ġ* Ġ Ġand Ġ[ time Series Sl iding St ds ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconsider Cache Query TimeSeries Sl iding Dot Products Empty Ġ( optional ) Ġdelegate Ġboolean Ġto Ġindicate Ġwhether Ġ[ cache Query TimeSeries Sl iding Dot Products ] Ġshould Ġbe Ġconsidered Ġempty . ĊĠĠĠĠ Ġ* Ġ@ param Ġcache Query TimeSeries Sl iding Dot Products Ġ( optional ) Ġsl iding Ġdot Ġproducts Ġcache Ġbetween Ġ[ query ] Ġand Ġ[ time Series ]. ĠNeeds Ġ[ consider Cache Query TimeSeries Sl iding Dot Products Empty ] Ġand Ġ[ previous Query ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġprevious Query Ġ( optional ) Ġthe Ġquery Ġof Ġthe Ġprevious Ġiteration , Ġcan Ġbe Ġ[ null ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Line Callback Ġ( optional ) Ġa Ġcallback Ġto Ġget Ġall Ġthe Ġresulting Ġcorre lations Ġinstead Ġof Ġjust Ġthe Ġbest . ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Index Callback Ġ( optional ) Ġa Ġcallback Ġto Ġget Ġthe Ġindex Ġof Ġthe Ġstart Ġof Ġthe Ġwindow Ġposition Ġin Ġ[ time Series ] Ġfor Ġthe Ġbest Ġfound Ġcorrelation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġvalue Ġof Ġthe Ġbest ĠP ear son Ġcorrelation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġopen Ġfun Ġmass P ear son ( ĊĠĠĠĠĠĠĠ Ġtime Series : ĠDouble Array , ĊĠĠĠĠĠĠĠ Ġquery : ĠDouble Array , ĊĠĠĠĠĠĠĠ Ġaggregation Queries : ĠArray < Double Array >? Ġ= Ġnull , Ġ// Ġcan Ġbe Ġsupplied Ġto Ġprovide Ġaggregation Ġto Ġtime Series ĊĠĠĠĠĠĠĠ Ġreducer : ĠAg gregation With Reducer With Arg With Compare Ġ= ĠMAX , ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġvertical Ġspeed up Ġdata ĊĠĠĠĠĠĠĠ Ġquery Dot Aggregation Products : ĠDouble ? Ġ= Ġnull , Ġ// Ġcan Ġbe Ġsupplied Ġto Ġprevent Ġdouble Ġcalculations ĊĠĠĠĠĠĠĠ Ġquery TimeSeries Sl iding Dot Products : ĠDouble Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery Mean : ĠDouble ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery Std : ĠDouble ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding Means : ĠDouble Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding St ds : ĠDouble Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġpre calculated TimeSeries Sl iding Means : ĠDouble Array ? Ġ= Ġnull , Ġ// Ġfor Ġcalculating Ġsl iding Ġmean / std Ġwith Ġaggregation Ġfaster ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġhorizontal Ġspeed up Ġdata ĊĠĠĠĠĠĠĠ Ġconsider Cache Query TimeSeries Sl iding Dot Products Empty : ĠDelegate < Boolean >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcache Query TimeSeries Sl iding Dot Products : ĠDouble Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġprevious Query : ĠDouble Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġline ĊĠĠĠĠĠĠĠ Ġresult Line Callback : Ġ(( Double Array ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġindex ĊĠĠĠĠĠĠĠ Ġresult Index Callback : Ġ(( Int ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠDouble Ġ= Ġmass P ear son ( ĊĠĠĠĠĠĠĠ Ġtime Series Ġ= Ġtime Series . as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġquery Ġ= Ġquery . as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġaggregation Queries Ġ= Ġaggregation Queries ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF 6 4 Array ( it . size , Ġit . first (). size ) Ġ{ Ġi , Ġj Ġ-> Ġit [ i ][ j ] Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġreducer Ġ= Ġreducer , ĊĠĠĠĠĠĠĠ Ġquery Dot Aggregation Products Ġ= Ġquery Dot Aggregation Products , ĊĠĠĠĠĠĠĠ Ġquery TimeSeries Sl iding Dot Products Ġ= Ġquery TimeSeries Sl iding Dot Products ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġquery Mean Ġ= Ġquery Mean , ĊĠĠĠĠĠĠĠ Ġquery Std Ġ= Ġquery Std , ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding Means Ġ= Ġtime Series Sl iding Means ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding St ds Ġ= Ġtime Series Sl iding St ds ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġpre calculated TimeSeries Sl iding Means Ġ= Ġpre calculated TimeSeries Sl iding Means ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġconsider Cache Query TimeSeries Sl iding Dot Products Empty Ġ= Ġconsider Cache Query TimeSeries Sl iding Dot Products Empty , ĊĠĠĠĠĠĠĠ Ġcache Query TimeSeries Sl iding Dot Products Ġ= Ġcache Query TimeSeries Sl iding Dot Products ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġprevious Query Ġ= Ġprevious Query ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġresult Line Callback Ġ= Ġresult Line Callback ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Line Callback ( it . toDouble Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġresult Index Callback Ġ= Ġresult Index Callback , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠM ASS - P ear son Ġfunction . ĠIt Ġfinds Ġthe Ġbest ĠP ear son Ġcorrelation Ġvalue Ġbetween Ġ[ query ] Ġand Ġall Ġthe Ġwindows Ġin ĊĠĠĠĠ Ġ* Ġ[ time Series ] Ġwhich Ġcan Ġoptionally Ġbe Ġaggregated Ġby Ġthe Ġqueries Ġin Ġ[ aggregation Queries ] Ġat Ġeach Ġwindow Ġposition . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Ġthe Ġtime Ġseries Ġgiven Ġas Ġa Ġwhole ĊĠĠĠĠ Ġ* Ġ@ param Ġquery Ġa Ġquery Ġof Ġanother Ġtime Ġseries ĊĠĠĠĠ Ġ* Ġ@ param Ġaggregation Queries Ġ( optional ) Ġshould Ġbe Ġ 1 ) Ġa Ġquery - sized Ġaggregation Ġflat Ġarray , Ġor Ġ 2 ) Ġan Ġarray Ġof Ġquery ĊĠĠĠĠ Ġ* Ġ Ġsized Ġaggregation Ġflat Ġarrays ĊĠĠĠĠ Ġ* Ġ@ param Ġreducer Ġ( optional , Ġdefault Ġ= ĠMAX ) Ġeither Ġ[ MAX ] Ġor Ġ[ MIN ] ĊĠĠĠĠ Ġ* Ġ@ param Ġquery Dot Aggregation Products Ġ( optional ) Ġ[ Double ] Ġwhich Ġcan Ġconsist Ġof Ġthe Ġresult Ġof Ġaggreg ating Ġthe ĊĠĠĠĠ Ġ* Ġ Ġ[ aggregation Queries ] Ġby Ġelement Ġwise Ġproduct Ġand Ġusing Ġarray Ġthat Ġto Ġtake Ġthe Ġdot Ġproduct Ġwith Ġ[ query ] ĊĠĠĠĠ Ġ* Ġ@ param Ġquery TimeSeries Sl iding Dot Products Ġ( optional ) Ġan Ġarray Ġcontaining Ġthe Ġsl iding Ġdot Ġproducts Ġbetween Ġ[ query ] ĊĠĠĠĠ Ġ* Ġ Ġand Ġ[ time Series ] Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġquery Mean Ġ( optional ) Ġthe Ġmean Ġof Ġ[ query ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġquery Std Ġ( optional ) Ġthe Ġstandard Ġdeviation Ġof Ġ[ query ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Sl iding Means Ġ( optional ) Ġthe Ġsl iding Ġmeans Ġof Ġ[ time Series ], Ġso Ġthat Ġit Ġdoesn 't Ġhave Ġto Ġbe ĊĠĠĠĠ Ġ* Ġ Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĠDon 't Ġprovide Ġif Ġproviding Ġ[ pre calculated TimeSeries Sl iding Means ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series Sl iding St ds Ġ( optional ) Ġthe Ġsl iding Ġstandard Ġde viations Ġof Ġ[ time Series ], Ġso Ġthat Ġit Ġdoesn 't Ġhave ĊĠĠĠĠ Ġ* Ġ Ġto Ġbe Ġcalculated Ġin Ġthe Ġfunction Ġanymore . ĠDon 't Ġprovide Ġif Ġproviding Ġ[ pre calculated TimeSeries Sl iding Means ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġpre calculated TimeSeries Sl iding Means Ġ( optional ) Ġthe Ġsl iding Ġmeans Ġof Ġ[ time Series ], Ġprovided Ġto Ġcalculate ĊĠĠĠĠ Ġ* Ġ Ġsl iding Ġmeans Ġand Ġstandard Ġde viations Ġwith Ġaggreg ations Ġfaster . ĠDon 't Ġprovide Ġif Ġproviding Ġ[ time Series Sl iding Means ] ĊĠĠĠĠ Ġ* Ġ Ġand Ġ[ time Series Sl iding St ds ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconsider Cache Query TimeSeries Sl iding Dot Products Empty Ġ( optional ) Ġdelegate Ġboolean Ġto Ġindicate Ġwhether Ġ[ cache Query TimeSeries Sl iding Dot Products ] Ġshould Ġbe Ġconsidered Ġempty . ĊĠĠĠĠ Ġ* Ġ@ param Ġcache Query TimeSeries Sl iding Dot Products Ġ( optional ) Ġsl iding Ġdot Ġproducts Ġcache Ġbetween Ġ[ query ] Ġand Ġ[ time Series ]. ĠNeeds Ġ[ consider Cache Query TimeSeries Sl iding Dot Products Empty ] Ġand Ġ[ previous Query ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġprevious Query Ġ( optional ) Ġthe Ġquery Ġof Ġthe Ġprevious Ġiteration , Ġcan Ġbe Ġ[ null ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Line Callback Ġ( optional ) Ġa Ġcallback Ġto Ġget Ġall Ġthe Ġresulting Ġcorre lations Ġinstead Ġof Ġjust Ġthe Ġbest . ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Index Callback Ġ( optional ) Ġa Ġcallback Ġto Ġget Ġthe Ġindex Ġof Ġthe Ġstart Ġof Ġthe Ġwindow Ġposition Ġin Ġ[ time Series ] Ġfor Ġthe Ġbest Ġfound Ġcorrelation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġvalue Ġof Ġthe Ġbest ĠP ear son Ġcorrelation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġopen Ġfun Ġmass P ear son ( ĊĠĠĠĠĠĠĠ Ġtime Series : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġquery : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġaggregation Queries : ĠF 6 4 Array ? Ġ= Ġnull , Ġ// Ġcan Ġbe Ġsupplied Ġto Ġprovide Ġaggregation Ġto Ġtime Series ĊĠĠĠĠĠĠĠ Ġreducer : ĠAg gregation With Reducer With Arg With Compare Ġ= ĠMAX , ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġvertical Ġspeed up Ġdata ĊĠĠĠĠĠĠĠ Ġquery Dot Aggregation Products : ĠDouble ? Ġ= Ġnull , Ġ// Ġcan Ġbe Ġsupplied Ġto Ġprevent Ġdouble Ġcalculations ĊĠĠĠĠĠĠĠ Ġquery TimeSeries Sl iding Dot Products : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery Mean : ĠDouble ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery Std : ĠDouble ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding Means : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding St ds : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġpre calculated TimeSeries Sl iding Means : ĠF 6 4 Flat Array ? Ġ= Ġnull , Ġ// Ġfor Ġcalculating Ġsl iding Ġmean / std Ġwith Ġaggregation Ġfaster ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġhorizontal Ġspeed up Ġdata ĊĠĠĠĠĠĠĠ Ġconsider Cache Query TimeSeries Sl iding Dot Products Empty : ĠDelegate < Boolean >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcache Query TimeSeries Sl iding Dot Products : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġprevious Query : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġline ĊĠĠĠĠĠĠĠ Ġresult Line Callback : Ġ(( F 6 4 Flat Array ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġindex ĊĠĠĠĠĠĠĠ Ġresult Index Callback : Ġ(( Int ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠT Ġ= Ġtime Series ĊĠĠĠĠĠĠĠ Ġval ĠQ Ġ= Ġquery ĊĠĠĠĠĠĠĠ Ġval ĠQT Cache Ġ= Ġcache Query TimeSeries Sl iding Dot Products ĊĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= ĠT . length ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠQ . length ĊĊĠĠĠĠĠĠĠ Ġrequire ( T . all Ġ{ Ġit . isNot NaN () Ġ}) Ġ{ Ġ" time Series Ġcannot Ġcontain ĠNaN s Ġfor Ġremoved Ġcontinu ity " Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġshould Ġbe Ġan Ġarray Ġof Ġarrays Ġof Ġsize Ġm Ġor Ġone Ġarray Ġof Ġsize Ġm ĊĠĠĠĠĠĠĠ Ġval ĠQ a Ġ= Ġaggregation Queries ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . n Dim Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it . length Ġ== Ġm ) Ġ{ Ġ" aggregation Ġshould Ġbe Ġsame Ġsize Ġas Ġquery " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġit . reshape ( 1 , Ġm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it . n Dim Ġ== Ġ 2 ) Ġ{ Ġ" aggregation - array Ġshould Ġonly Ġconsist Ġof Ġflat Ġarrays " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it . shape [ 1 ] Ġ== Ġm ) Ġ{ Ġ" aggregation - array Ġshould Ġhave Ġflat Ġarrays Ġof Ġquery Ġsize " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġnumber Ġof Ġqueries Ġ( including Ġaggregation Ġqueries ) ĊĠĠĠĠĠĠĠ Ġval Ġq Ġ= Ġ( Qa ?. length Ġ?: Ġ 0 ) Ġ+ Ġ 1 . 0 ĊĊĠĠĠĠĠĠĠ Ġval ĠQ Dot s Qa Ġ= Ġquery Dot Aggregation Products Ġ?: ĠQ a ?. let Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray Cache [ Qa . shape [ 1 ], ĠSlot . R ]. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġit . indices ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ i ] Ġ= ĠQ a . view ( i , Ġ 1 ). as Flat Array (). product () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġdot ĠQ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠQT Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery TimeSeries Sl iding Dot Products Ġ!= Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery TimeSeries Sl iding Dot Products ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠQT Cache Ġ!= Ġnull Ġ&& Ġconsider Cache Query TimeSeries Sl iding Dot Products Empty Ġ!= Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQT Cache . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate QT Cache ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQT Cache Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider QT Cache Empty Ġ= Ġconsider Cache Query TimeSeries Sl iding Dot Products Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQ Ġ= ĠQ , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ= Ġn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Query Ġ= Ġprevious Query , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Array Slot Ġ= ĠSlot . B 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsl iding Dot Products ( Q Ġ= ĠQ , ĠT Ġ= ĠT , Ġreturn Array Slot Ġ= ĠSlot . B 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġapply Ġaggregation Ġfor ĠT Ġon ĠQT ĊĠĠĠĠĠĠĠ Ġif Ġ( Qa Ġ!= Ġnull Ġ&& ĠQ Dot s Qa Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQT Ġ+= ĠQ Dot s Qa ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQT Ġ/= Ġq ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġcompute Ġmean Ġand Ġstd s ĊĠĠĠĠĠĠĠ Ġval Ġmu _ Q Ġ= Ġ( query Mean Ġ?: ĠQ . mean ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ( it . isIn finite () Ġ|| Ġit . isNaN ()) Ġ 0 . 0 Ġelse Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsigma _ Q Ġ= Ġ( query Std Ġ?: ĠQ . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ-= Ġmu _ Q ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsqrt ( it . dot () Ġ/ Ġit . length ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ( it . isIn finite () Ġ|| Ġit . isNaN ()) Ġ 0 . 0 Ġelse Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmus _ T : ĠF 6 4 Flat Array ĊĠĠĠĠĠĠĠ Ġval Ġsig mas _ T : ĠF 6 4 Flat Array ĊĠĠĠĠĠĠĠ Ġif Ġ( time Series Sl iding Means Ġ!= Ġnull Ġ&& Ġtime Series Sl iding St ds Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus _ T Ġ= Ġarray Cache [ time Series Sl iding Means . length , ĠSlot . O ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Sl iding Means . copy To ( mus _ T ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsig mas _ T Ġ= Ġtime Series Sl iding St ds ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus _ T Ġ= Ġarray Cache [ n Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . O ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsig mas _ T Ġ= Ġarray Cache [ n Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . P ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Qa Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ= Ġmus _ T , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array Ġ= Ġsig mas _ T , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std With Agg ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ= Ġmus _ T , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array Ġ= Ġsig mas _ T , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaggreg ations Ġ= ĠQ a , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre calculated T Means Ġ= Ġpre calculated TimeSeries Sl iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmus _ T . transform In Place Ġ{ Ġif Ġ( it . isIn finite () Ġ|| Ġit . isNaN ()) Ġ 0 . 0 Ġelse Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġsig mas _ T . transform In Place Ġ{ Ġif Ġ( it . isIn finite () Ġ|| Ġit . isNaN ()) Ġ 0 . 0 Ġelse Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġcalculate Ġthe Ġp ear son Ġcorre lations ĊĠĠĠĠĠĠĠ Ġ// Ġformula : ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠ Ġ( QT Ġ- Ġ( m Ġ* Ġmu _ Q Ġ* Ġmus _ T )) Ġ/ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Ġ* Ġsigma _ Q Ġ* Ġsig mas _ T ) ĊĊĠĠĠĠĠĠĠ Ġval ĠP Ġ= Ġcalculate P ear son Profile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQT Ġ= ĠQT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmu _ Q Ġ= Ġmu _ Q , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus _ T Ġ= Ġmus _ T , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsigma _ Q Ġ= Ġsigma _ Q , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsig mas _ T Ġ= Ġsig mas _ T ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġfix Ġpotential Ġdivide Ġby Ġ 0 Ġissues ĊĠĠĠĠĠĠĠ ĠP . transform In Place Ġ{ Ġif Ġ( it . isIn finite () Ġ|| Ġit . isNaN ()) Ġ 0 . 0 Ġelse Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġreverse Ġaggregation Ġfor ĠT Ġon ĠQT ĊĠĠĠĠĠĠĠ Ġif Ġ( Qa Ġ!= Ġnull Ġ&& ĠQ Dot s Qa Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQT Ġ*= Ġq ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQT Ġ-= ĠQ Dot s Qa ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult Line Callback ?. invoke ( P ) ĊĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġreducer . arg Function ( P ) ĊĠĠĠĠĠĠĠ Ġresult Index Callback ?. invoke ( index ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( P . any Ġ{ Ġit Ġ! in Ġ- 1 . 0 1 .. 1 . 0 1 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("$ P ") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠP [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġthe Ġgiven Ġ[ QT Cache ] Ġfor Ġthe Ġnext Ġhorizontal Ġiteration . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠQT Cache Ġthe Ġcache Ġto Ġupdate . ĊĠĠĠĠ Ġ* Ġ@ param Ġconsider QT Cache Empty Ġa Ġdelegate Ġto Ġa Ġboolean Ġvalue Ġto Ġindicate Ġwhether Ġ[ QT Cache ] Ġshould Ġbe Ġconsidered ĊĠĠĠĠ Ġ* Ġempty Ġand Ġover - writable . ĊĠĠĠĠ Ġ* Ġ@ param ĠQ Ġthe Ġcurrent Ġquery . ĊĠĠĠĠ Ġ* Ġ@ param ĠT Ġthe Ġcurrent Ġtime Ġseries . ĊĠĠĠĠ Ġ* Ġ@ param Ġn Ġ( optional ) Ġthe Ġsize Ġof Ġ[ T ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġm Ġ( optional ) Ġthe Ġsize Ġof Ġ[ Q ] Ġ( or Ġthe Ġwindow Ġsize ). ĊĠĠĠĠ Ġ* Ġ@ param Ġprevious Query Ġthe Ġprevious Ġquery , Ġcan Ġbe Ġ[ null ] Ġif Ġat Ġthe Ġfirst Ġiteration . ĊĠĠĠĠ Ġ* Ġ@ param Ġreturn Array Slot Ġ( optional ) Ġthe Ġarray Ġfrom Ġthe Ġcache Ġthat Ġis Ġused Ġin Ġthe Ġ[ sl iding Dot Products ] Ġcall Ġif Ġthe Ġcache Ġis Ġempty . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED _ VALUE ") ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġopen Ġfun Ġupdate QT Cache ( ĊĠĠĠĠĠĠĠ ĠQT Cache : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġconsider QT Cache Empty : ĠDelegate < Boolean >, ĊĠĠĠĠĠĠĠ ĠQ : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ ĠT : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġn : ĠInt Ġ= ĠT . length , ĊĠĠĠĠĠĠĠ Ġm : ĠInt Ġ= ĠQ . length , ĊĠĠĠĠĠĠĠ Ġprevious Query : ĠF 6 4 Flat Array ?, ĊĠĠĠĠĠĠĠ Ġreturn Array Slot : ĠSlot Ġ= ĠSlot . B , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcache IsEmpty Ġby Ġconsider QT Cache Empty ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cache IsEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsl iding Dot Products ( Q Ġ= ĠQ , ĠT Ġ= ĠT , Ġreturn Array Slot Ġ= Ġreturn Array Slot ). copy To ( QT Cache ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache IsEmpty Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Q First Ġ= Ġprevious Query ! ![ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠQ last Ġ= ĠQ [ m Ġ- Ġ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġn Ġ- Ġm Ġdown To Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQT Cache [ i ] Ġ= ĠQT Cache [ i Ġ- Ġ 1 ] Ġ- Ġprev Q First Ġ* ĠT [ i Ġ- Ġ 1 ] Ġ+ ĠQ last Ġ* ĠT [ i Ġ+ Ġm Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQT Cache [ 0 ] Ġ= ĠQ Ġdot ĠT . slice Flat ( to Ġ= Ġm ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalcul ation Ġof Ġsl iding Ġdot Ġproducts . ĊĠĠĠĠ Ġ* Ġ@ param ĠQ Ġa Ġquery ĊĠĠĠĠ Ġ* Ġ@ param ĠT Ġa Ġtime Ġseries ĊĠĠĠĠ Ġ* Ġ@ param Ġn Ġ( optional ) Ġthe Ġlength Ġof Ġ[ T ] ĊĠĠĠĠ Ġ* Ġ@ param Ġm Ġ( optional ) Ġthe Ġlength Ġof Ġquery Ġ[ Q ] Ġ( or Ġthe Ġwindow Size ) ĊĠĠĠĠ Ġ* Ġ@ param Ġreturn Array Slot Ġ( optional ) Ġthe Ġarray Ġslot Ġin Ġthe Ġcache Ġthat Ġwill Ġbe Ġused Ġas Ġreturn Ġvalue ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġsl iding Ġdot Ġproducts Ġbetween Ġ[ Q ] Ġand Ġ[ T ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġsl iding Dot Products ( ĊĠĠĠĠĠĠĠ ĠQ : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ ĠT : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġn : ĠInt Ġ= ĠT . length , ĊĠĠĠĠĠĠĠ Ġm : ĠInt Ġ= ĠQ . length , ĊĠĠĠĠĠĠĠ Ġreturn Array Slot : ĠSlot Ġ= ĠSlot . B , ĊĠĠĠ Ġ): ĠF 6 4 Flat Array Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġusing Ġarray Ġcache Ġto Ġsave Ġcreating Ġnew Ġarrays Ġall Ġthe Ġtime . ĊĠĠĠĠĠĠĠ Ġval Ġn App ended Ġ= Ġnext Power Of 2 ( n ) ĊĊĠĠĠĠĠĠĠ Ġval ĠT App ended Ġ= Ġarray Cache [ 2 Ġ* Ġn App ended , ĠSlot . A ] Ġ{ Ġ 0 . 0 Ġ} ĊĠĠĠĠĠĠĠ ĠT . copy To ( T App ended . slice Flat ( from Ġ= Ġn App ended Ġ- Ġn , Ġto Ġ= Ġn App ended )) ĊĊĠĠĠĠĠĠĠ Ġval Ġfour ier : ĠDouble FFT _ 1 D Ġ= Ġfour ier Cache . get Or Put ( n App ended ) Ġ{ ĠDouble FFT _ 1 D ( n App ended . to Long ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġreverse ĠQ Ġto ĠQ r Ġand Ġappend ĠQ r Ġwith Ġzero es Ġand Ġdouble Ġsize Ġfor Ġin - place Ġfft ĊĠĠĠĠĠĠĠ Ġval ĠQ ra Ġ= Ġarray Cache [ 2 Ġ* Ġn App ended , Ġreturn Array Slot ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ< Ġm ) ĠQ [ m Ġ- Ġit Ġ- Ġ 1 ] Ġelse Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġperform Ġfft Ġon ĠQ _ ra ĊĠĠĠĠĠĠĠ Ġval ĠQ raf Ġ= ĠQ ra . also Ġ{ Ġfour ier . real Forward Full ( it . data ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠT af Ġ= ĠT App ended . also Ġ{ Ġfour ier . real Forward Full ( it . data ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ!! Ġover writes Ġ[ Q _ raf ] ĊĠĠĠĠĠĠĠ Ġval Ġmultiplication Ġ= ĠQ raf . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġit . length Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Re Ġ= Ġit [ 2 Ġ* Ġk ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Im Ġ= Ġit [ 2 Ġ* Ġk Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Re Ġ= ĠT af [ 2 Ġ* Ġk ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Im Ġ= ĠT af [ 2 Ġ* Ġk Ġ+ Ġ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ 2 Ġ* Ġk ] Ġ= Ġa Re Ġ* Ġb Re Ġ- Ġa Im Ġ* Ġb Im ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ 2 Ġ* Ġk Ġ+ Ġ 1 ] Ġ= Ġa Re Ġ* Ġb Im Ġ+ Ġa Im Ġ* Ġb Re ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠQT 2 Ġ= Ġmultiplication . also Ġ{ Ġfour ier . complex Inverse ( it . data , Ġtrue ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠQT 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Flat ( step Ġ= Ġ 2 ) Ġ// Ġtake Ġonly Ġre als ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Flat ( from Ġ= Ġm Ġ- Ġ 1 Ġ+ Ġ( n App ended Ġ- Ġn )) Ġ// Ġremove Ġpadding ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠE fficient Ġmoving Ġaverage Ġand Ġmoving Ġstd Ġcalculations Ġwith Ġsupport Ġof Ġany Ġnumber Ġof Ġaggregation Ġqueries . ĊĠĠĠĠ Ġ* Ġresult Ġis Ġstored Ġin Ġdest Mean Array Ġand Ġdest Std Array Ġ( which Ġmust Ġbe Ġsize Ġ= ĠT . size Ġ- Ġwindow Size Ġ+ Ġ 1 ) ĊĠĠĠĠ Ġ* ĠCompat ible Ġwith Ġcontinu ity Ġremoved Ġ( NaN s Ġin Ġ[ T ]), Ġbut Ġit Ġis Ġbetter Ġto Ġgive Ġit Ġthe Ġoriginal Ġtime Ġseries Ġ( without ĠNaN s ) Ġfor Ġspeed . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠT ĠTime Ġseries Ġover Ġwhich Ġto Ġslide ĊĠĠĠĠ Ġ* Ġ@ param Ġwindow Size Ġthe Ġwindow Ġsize ĊĠĠĠĠ Ġ* Ġ@ param Ġaggreg ations Ġarray Ġof Ġaggregation Ġqueries . ĊĠĠĠĠ Ġ* Ġ@ param Ġpre calculated T Means ĠOptional Ġspeed - up ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġsl iding Ġmeans Ġand Ġ- standard Ġde viations Ġwith Ġaggreg ations ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġopen Ġfun Ġcompute Sl iding Mean Std With Agg ( ĊĠĠĠĠĠĠĠ ĠT : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġwindow Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġaggreg ations : ĠF 6 4 Array , ĊĠĠĠĠĠĠĠ Ġpre calculated T Means : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠPair < F 6 4 Flat Array , ĠF 6 4 Flat Array > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠT . length ĊĠĠĠĠĠĠĠ Ġval Ġmean Array Ġ= ĠF 6 4 Flat Array ( size Ġ- Ġwindow Size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġstd Array Ġ= ĠF 6 4 Flat Array ( size Ġ- Ġwindow Size Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std With Agg ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġwindow Size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggreg ations Ġ= Ġaggreg ations , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ= Ġmean Array , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array Ġ= Ġstd Array , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre calculated T Means Ġ= Ġpre calculated T Means , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmean Array Ġto Ġstd Array ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠE fficient Ġmoving Ġaverage Ġand Ġmoving Ġstd Ġcalculations Ġwith Ġsupport Ġof Ġany Ġnumber Ġof Ġaggregation Ġqueries . ĊĠĠĠĠ Ġ* Ġresult Ġis Ġstored Ġin Ġdest Mean Array Ġand Ġdest Std Array Ġ( which Ġmust Ġbe Ġsize Ġ= ĠT . size Ġ- Ġwindow Size Ġ+ Ġ 1 ) ĊĠĠĠĠ Ġ* ĠCompat ible Ġwith Ġcontinu ity Ġremoved Ġ( NaN s Ġin Ġ[ T ]), Ġbut Ġit Ġis Ġbetter Ġto Ġgive Ġit Ġthe Ġoriginal Ġtime Ġseries Ġ( without ĠNaN s ) Ġfor Ġspeed . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠT ĠTime Ġseries Ġover Ġwhich Ġto Ġslide ĊĠĠĠĠ Ġ* Ġ@ param Ġwindow Size Ġthe Ġwindow Ġsize ĊĠĠĠĠ Ġ* Ġ@ param Ġaggreg ations Ġarray Ġof Ġaggregation Ġqueries . ĊĠĠĠĠ Ġ* Ġ@ param Ġdest Mean Array Ġthe Ġdestination Ġarray Ġfor Ġthe Ġmeans , Ġmust Ġbe Ġ` T . size Ġ- Ġwindow Size Ġ+ Ġ 1 ` ĊĠĠĠĠ Ġ* Ġ@ param Ġdest Std Array Ġthe Ġdestination Ġarray Ġfor Ġthe Ġstd s , Ġmust Ġbe Ġ` T . size Ġ- Ġwindow Size Ġ+ Ġ 1 ` ĊĠĠĠĠ Ġ* Ġ@ param Ġpre calculated T Means ĠOptional Ġspeed - up ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġopen Ġfun Ġcompute Sl iding Mean Std With Agg ( ĊĠĠĠĠĠĠĠ ĠT : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġwindow Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġaggreg ations : ĠF 6 4 Array , ĊĠĠĠĠĠĠĠ Ġdest Mean Array : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġdest Std Array : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġpre calculated T Means : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( T . any Ġ{ Ġit . isNaN () Ġ}) Ġprintln (" WARNING : Ġsl iding Mean And Std Ġis Ġcalled Ġwith Ġa Ġcontinu ity - removed Ġtime Ġseries . ĠResults Ġmight Ġnot Ġbe Ġas Ġfast .") ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= ĠT . length ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġwindow Size ĊĠĠĠĠĠĠĠ Ġrequire ( dest Mean Array . length Ġ== Ġn Ġ- Ġm Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġrequire ( dest Std Array . length Ġ== Ġn Ġ- Ġm Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġvar ĠQ a Ġ= Ġaggreg ations ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Qa . n Dim Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( Qa . length Ġ== Ġm ) Ġ{ Ġ" aggregation Ġshould Ġbe Ġwindow Ġsize " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQ a Ġ= ĠQ a . reshape ( 1 , Ġm ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( Qa . n Dim Ġ== Ġ 2 ) Ġ{ Ġ" aggregation - array Ġshould Ġonly Ġconsist Ġof Ġflat Ġarrays " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( Qa . shape [ 1 ] Ġ== Ġm ) Ġ{ Ġ" aggregation - array Ġshould Ġhave Ġflat Ġarrays Ġof Ġquery Ġsize " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġq Ġ= ĠQ a . length . toDouble () Ġ+ Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġq Squared Ġ= Ġq Ġ* Ġq ĊĊĠĠĠĠĠĠĠ Ġ// Ġsum Ġof Ġmeans Ġof ĠQ as ĊĠĠĠĠĠĠĠ Ġvar ĠQ a Means Sum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġ 0 Ġuntil ĠQ a . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQ a Means Sum Ġ+= ĠQ a . view As Flat ( it ). mean () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠQ as Ġaggregated Ġby Ġsum ĊĠĠĠĠĠĠĠ Ġval ĠQ a Sum s Ġ= Ġarray Cache [ m , ĠSlot . Q ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQ a . view As Flat ( it , Ġ 1 ). sum () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠQ a Sum s Sum Ġ= ĠQ a Sum s . sum () ĊĊĠĠĠĠĠĠĠ Ġval Ġdot Of Qa Sum s Ġ= ĠQ a Sum s . dot () ĊĊĠĠĠĠĠĠĠ Ġ// Ġfirst Ġcalculate Ġmeans Ġusing Ġbuffer Ġmethod Ġsince Ġaggregation Ġcan Ġbe Ġdone Ġafterwards ĊĠĠĠĠĠĠĠ Ġvar Ġsum Buffer Ġ= ĠDouble . NaN ĊĠĠĠĠĠĠĠ Ġvar Ġsquare Buffer Ġ= ĠDouble . NaN ĊĊĠĠĠĠĠĠĠ Ġval ĠT Qa Sum s Sl iding Dot s Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsl iding Dot Products ( Q Ġ= ĠQ a Sum s , ĠT Ġ= ĠT , Ġreturn Array Slot Ġ= ĠSlot . B 4 ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pre calculated T Means Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre calculated T Means . copy To ( dest Mean Array ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ+= ĠQ a Means Sum ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ/= Ġq ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. n Ġ- Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sum Buffer . isNaN () Ġ|| Ġsquare Buffer . isNaN ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT . slice Flat ( from Ġ= Ġi , Ġto Ġ= Ġi Ġ+ Ġm ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Buffer Ġ= Ġsum () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsquare Buffer Ġ= Ġdot () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sum Buffer . isNaN () Ġ|| Ġsquare Buffer . isNaN ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array [ i ] Ġ= ĠDouble . NaN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array [ i ] Ġ= ĠDouble . NaN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġagg Mean : ĠDouble ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pre calculated T Means Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmean Ġ= Ġsum Buffer Ġ/ Ġm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġagg Mean Ġ= Ġ( mean Ġ+ ĠQ a Means Sum ) Ġ/ Ġq ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array [ i ] Ġ= Ġagg Mean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġagg Mean Ġ= Ġdest Mean Array [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstd Sum Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstd Sum Ġ+= Ġsquare Buffer Ġ/ Ġq Squared ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstd Sum Ġ+= Ġ 2 . 0 Ġ* ĠT Qa Sum s Sl iding Dot s [ i ] Ġ/ Ġq Squared Ġ// Ġstd Sum Ġ+= Ġ 2 . 0 Ġ* Ġ( Tw Ġ* ĠQ a Sum s ). sum () Ġ/ Ġq Squared ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstd Sum Ġ-= Ġ 2 . 0 Ġ* Ġagg Mean Ġ* Ġsum Buffer Ġ/ Ġq Ġ// Ġstd Sum Ġ-= Ġ 2 . 0 Ġ* Ġagg Mean Ġ* ĠTw . sum () Ġ/ Ġq ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstd Sum Ġ+= Ġdot Of Qa Sum s Ġ/ Ġq Squared ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstd Sum Ġ-= Ġ 2 . 0 Ġ* Ġagg Mean Ġ* ĠQ a Sum s Sum Ġ/ Ġq Ġ// Ġstd Sum Ġ-= Ġ 2 . 0 Ġ* Ġagg Mean Ġ* ĠQ a Sum s . sum () Ġ/ Ġq ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstd Sum Ġ+= Ġm Ġ* Ġ( agg Mean Ġ* Ġagg Mean ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array [ i ] Ġ= Ġsqrt ( std Sum Ġ/ Ġm . toDouble ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġn Ġ- Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Be Removed Ġ= ĠT [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Be Added Ġ= ĠT [ i Ġ+ Ġm ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Buffer Ġ+= Ġto Be Added Ġ- Ġto Be Removed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsquare Buffer Ġ+= Ġto Be Added Ġ* Ġto Be Added Ġ- Ġto Be Removed Ġ* Ġto Be Removed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠThese Ġfunctions Ġdon 't Ġneed Ġany Ġcache , Ġso Ġthey Ġare Ġmade Ġstatic ally Ġavailable Ġusing ĠKotlin 's Ġcompanion Ġobject . ĊĠĠĠ Ġ// ĠAccess Ġfrom ĠJava Ġusing Ġ` Stamp P ear son . Companion . function ()` ĊĠĠĠ Ġ// ĠAccess Ġfrom ĠKotlin Ġusing Ġ` Stamp P ear son . function ()` ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCan Ġconvert Ġan Ġarray Ġcontaining ĠE uclidean Ġdistances Ġto ĠP ear son Ġcorre lations . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġe uclidean To P ear son Corre lations ( series : ĠF 6 4 Flat Array , Ġwindow Size : ĠInt ): ĠF 6 4 Flat Array Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 . 0 Ġ- Ġ( 1 . 0 Ġ/ Ġ( 2 . 0 Ġ* Ġwindow Size )) Ġ* Ġ( series Ġ* Ġseries )). as Flat Array () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCan Ġconvert Ġan Ġarray Ġcontaining ĠP ear son Ġcorre lations Ġto ĠE uclidean Ġdistances . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġp ear son Corre lations To E uclidean ( series : ĠF 6 4 Flat Array , Ġwindow Size : ĠInt ): ĠF 6 4 Flat Array Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 2 . 0 Ġ* Ġwindow Size Ġ* Ġ( 1 . 0 Ġ- Ġseries )). as Flat Array () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠEx tre me ly Ġefficient Ġmoving Ġaverage Ġand Ġmoving Ġstd Ġcalculations . ĊĠĠĠĠĠĠĠĠ Ġ* Ġresult Ġis Ġstored Ġin Ġdest Mean Array Ġand Ġdest Std Array Ġ( which Ġmust Ġbe Ġsize Ġ= ĠT . size Ġ- Ġwindow Size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠ Ġ* ĠCompat ible Ġwith Ġcontinu ity Ġremoved Ġ( NaN s Ġin Ġ[ T ]), Ġbut Ġit Ġis Ġbetter Ġto Ġgive Ġit Ġthe Ġoriginal Ġtime Ġseries Ġ( without ĠNaN s ) Ġfor Ġspeed . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ see Ġ[ compute Sl iding Mean Std ] ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠT . ĠR ak than man on Ġet Ġal ., ĠâĢľ Searching Ġand ĠMin ing ĠTr ill ions Ġof ĠTime ĠSeries ĠSub sequences Ġunder ĠDynamic ĠTime ĠW arp ing ,âĢĿ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠT ĠTime Ġseries Ġover Ġwhich Ġto Ġslide ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġwindow Size Ġthe Ġwindow Ġsize ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġsl iding Ġmeans Ġand Ġ- standard Ġde viations ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcompute Sl iding Mean Std ( T : ĠF 6 4 Flat Array , Ġwindow Size : ĠInt ): ĠPair < F 6 4 Flat Array , ĠF 6 4 Flat Array > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠT . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmean Array Ġ= ĠF 6 4 Flat Array ( size Ġ- Ġwindow Size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstd Array Ġ= ĠF 6 4 Flat Array ( size Ġ- Ġwindow Size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std ( T , Ġwindow Size , Ġmean Array , Ġstd Array ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmean Array Ġto Ġstd Array ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠEx tre me ly Ġefficient Ġmoving Ġaverage Ġand Ġmoving Ġstd Ġcalculations . ĊĠĠĠĠĠĠĠĠ Ġ* Ġresult Ġis Ġstored Ġin Ġdest Mean Array Ġand Ġdest Std Array Ġ( which Ġmust Ġbe Ġsize Ġ= ĠT . size Ġ- Ġwindow Size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠ Ġ* ĠCompat ible Ġwith Ġcontinu ity Ġremoved Ġ( NaN s Ġin Ġ[ T ]), Ġbut Ġit Ġis Ġbetter Ġto Ġgive Ġit Ġthe Ġoriginal Ġtime Ġseries Ġ( without ĠNaN s ) Ġfor Ġspeed . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ see Ġ[ compute Sl iding Mean Std ] ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠT . ĠR ak than man on Ġet Ġal ., ĠâĢľ Searching Ġand ĠMin ing ĠTr ill ions Ġof ĠTime ĠSeries ĠSub sequences Ġunder ĠDynamic ĠTime ĠW arp ing ,âĢĿ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠT ĠTime Ġseries Ġover Ġwhich Ġto Ġslide ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġwindow Size Ġthe Ġwindow Ġsize ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdest Mean Array Ġthe Ġdestination Ġarray Ġfor Ġthe Ġmeans , Ġmust Ġbe Ġ` T . size Ġ- Ġwindow Size Ġ+ Ġ 1 ` ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdest Std Array Ġthe Ġdestination Ġarray Ġfor Ġthe Ġstd s , Ġmust Ġbe Ġ` T . size Ġ- Ġwindow Size Ġ+ Ġ 1 ` ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcompute Sl iding Mean Std ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( T . any Ġ{ Ġit . isNaN () Ġ}) Ġprintln (" WARNING : Ġsl iding Mean And Std Ġis Ġcalled Ġwith Ġa Ġcontinu ity - removed Ġtime Ġseries . ĠResults Ġmight Ġnot Ġbe Ġas Ġfast .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= ĠT . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġwindow Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( dest Mean Array . length Ġ== Ġn Ġ- Ġm Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( dest Std Array . length Ġ== Ġn Ġ- Ġm Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum Buffer Ġ= ĠDouble . NaN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsquare Buffer Ġ= ĠDouble . NaN ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. n Ġ- Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sum Buffer . isNaN () Ġ|| Ġsquare Buffer . isNaN ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT . slice Flat ( from Ġ= Ġi , Ġto Ġ= Ġi Ġ+ Ġm ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Buffer Ġ= Ġsum () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsquare Buffer Ġ= Ġdot () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sum Buffer . isNaN () Ġ|| Ġsquare Buffer . isNaN ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array [ i ] Ġ= ĠDouble . NaN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array [ i ] Ġ= ĠDouble . NaN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmean Ġ= Ġsum Buffer Ġ/ Ġm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array [ i ] Ġ= Ġmean ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsquare Ġ= Ġmean Ġ* Ġmean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array [ i ] Ġ= Ġsqrt ( square Buffer Ġ/ Ġm Ġ- Ġsquare ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġn Ġ- Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Be Removed Ġ= ĠT [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Be Added Ġ= ĠT [ i Ġ+ Ġm ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Buffer Ġ+= Ġto Be Added Ġ- Ġto Be Removed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsquare Buffer Ġ+= Ġto Be Added Ġ* Ġto Be Added Ġ- Ġto Be Removed Ġ* Ġto Be Removed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalculate ĠP ear son Ġefficiently Ġusing Ġmatrix Ġmultip lications . ĊĠĠĠĠĠĠĠĠ Ġ* ĠFormula : ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠĠ Ġ( QT Ġ- Ġ( m Ġ* Ġmu _ Q Ġ* Ġmus _ T )) Ġ/ ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Ġ* Ġsigma _ Q Ġ* Ġsig mas _ T ) ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġm Ġwindow Ġsize ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠQT Ġdot Ġproducts Ġbetween Ġquery ĠQ Ġand Ġall Ġpossible Ġpositions Ġin ĠT Ġ( will Ġbe Ġoverwritten !! ) ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmu _ Q Ġmean Ġof ĠQ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmus _ T Ġmeans Ġof Ġall Ġpossible Ġpl ac ements Ġof Ġa Ġwindow Ġin ĠT Ġ( will Ġbe Ġoverwritten !! ) ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsigma _ Q Ġstandard Ġdeviation Ġof ĠQ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsig mas _ T Ġstandard Ġdeviation Ġof Ġall Ġpossible Ġpl ac ements Ġof Ġa Ġwindow Ġin ĠT ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġsl iding ĠP ear son Ġcorrelation Ġmeasure Ġarray . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcalculate P ear son Profile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQT : ĠF 6 4 Flat Array , Ġ// Ġwill Ġnot Ġbe Ġoverwritten ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmu _ Q : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmus _ T : ĠF 6 4 Flat Array , Ġ// Ġwill Ġbe Ġoverwritten ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsigma _ Q : ĠDouble , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsig mas _ T : ĠF 6 4 Flat Array , Ġ// Ġwill Ġnot Ġbe Ġoverwritten ĊĠĠĠĠĠĠĠ Ġ): ĠF 6 4 Flat Array Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ!! Ġover writing Ġ[ mus _ T ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpart Nom inator Ġ= Ġmus _ T . also Ġ{ Ġit Ġ*= Ġmu _ Q Ġ* Ġ- m Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ!! Ġover writing Ġ[ part Nom inator ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnom inator Ġ= Ġpart Nom inator . also Ġ{ Ġit Ġ+= ĠQT Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ!! Ġover writing Ġ[ nom inator ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanswer Without Sig mas T Ġ= Ġnom inator . also Ġ{ Ġit Ġ/= Ġm . toDouble () Ġ* Ġsigma _ Q Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ!! Ġover writing Ġ[ answer Without Sig mas T ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= Ġanswer Without Sig mas T . also Ġ{ Ġit Ġ/= Ġsig mas _ T Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġanswer ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ