@ file : Suppress (" Local Variable Name ", Ġ" 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 . Window Skipping . numberOf Window Pl ac ements Saved Ċ import Ġnl . j ol an ren sen . efficient ly Discover ing T ernary L agged Corre lations . aggreg ations . Aggregation With Reducer With Arg With Compare Ċ import Ġnl . j ol an ren sen . efficient ly Discover ing T ernary L agged Corre lations . aggreg ations . MAX Ċ 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 Ġnl . j ol an ren sen . efficient ly Discover ing T ernary L agged Corre lations . stamp P ear son . Stamp P ear son 3 ts With Skipping . Continu ity Skipping Type Ċ import Ġnl . j ol an ren sen . efficient ly Discover ing T ernary L agged Corre lations . stamp P ear son . Stamp P ear son 3 ts With Skipping . TimeSeries .* Ċ import Ġorg . jetbrains . bio . vik tor . F 6 4 Array Ċ import Ġorg . jetbrains . bio . vik tor . F 6 4 Flat Array Ċ import Ġorg . jetbrains . bio . vik tor ._ I Ċ import Ġorg . jetbrains . bio . vik tor . as F 6 4 Array Ċ import Ġorg . j transforms . fft . Double FFT _ 1 D Ċ import Ġjava . io . Serializable Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . sqrt Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof ĠST AMP - P ear son - 3 TS Ġthat Ġsupports Ġskipping Ġ( so , Ġarrays Ġwith Ġ` NaN ` Ġpieces ). Ċ Ġ* ĠCalculates Ġthe Ġbest Ġlag ged Ġt ernary Ġcorrelation Ġfor Ġthree Ġtime Ġseries . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcontinu ity Skipping Ġthe Ġskipping Ġmethod Ġused . ĠCurrently , Ġonly Ġ[ Continu ity Skipping Type . STR A IGHT _ LINE ] Ġis Ġsupported . Ċ Ġ* Ġ ĠCan Ġbe Ġdone Ġusing Ġ[ Window Skipping . remove Str aight Line Continu ity ]. Ċ Ġ* Ġ@ param Ġarray Cache Ġ( optional ) Ġthe Ġarray Ġcache Ġthat Ġis Ġused Ġfor Ġthis Ġ[ Stamp P ear son 3 ts ] Ġinstance . Ċ Ġ* Ġ@ param Ġfour ier Cache Ġ( optional ) Ġthe Ġ[ Double FFT _ 1 D ] Ġinstance Ġcache Ġused Ġfor Ġthis Ġ[ Stamp P ear son 3 ts ] Ġinstance . Ċ Ġ*/ Ċ class ĠSt amp P ear son 3 ts With Skipping Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġval Ġcontinu ity Skipping : ĠContinu ity Skipping Type , ĊĠĠĠ Ġarray Cache : ĠSt amp Array Cache Ġ= ĠSt amp Array Cache (), ĊĠĠĠ Ġfour ier Cache : ĠMutable Map < Int , ĠDouble FFT _ 1 D > Ġ= Ġmutable Map Of (), Ċ ) Ġ: ĠSt amp P ear son ( array Cache , Ġfour ier Cache ), ĠSerializable Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontinu ity Skipping Ġthe Ġskipping Ġmethod Ġused . ĠCurrently , Ġonly Ġ[ Continu ity Skipping Type . STR A IGHT _ LINE ] Ġis Ġsupported . ĊĠĠĠĠ Ġ* Ġ ĠCan Ġbe Ġdone Ġusing Ġ[ Window Skipping . remove Str aight Line Continu ity ]. ĊĠĠĠĠ Ġ* Ġ@ 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 3 ts ] Ġinstance Ġis Ġaccessed Ġacross Ġmultiple Ġthreads . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontinu ity Skipping : ĠContinu ity Skipping Type , ĊĠĠĠĠĠĠĠ Ġmax Array Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġslot Manager : ĠSt amp Array Cache . Slot Manager Ġ= ĠSt amp Array Cache . Slots With Re use , ĊĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġcontinu ity Skipping Ġ= Ġcontinu ity Skipping , ĊĠĠĠĠĠĠĠ Ġarray Cache Ġ= ĠSt amp Array Cache ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxSize Ġ= Ġmax Array Size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslot Manager Ġ= Ġslot Manager , ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠ Ġ) ĊĊĊĠĠĠ Ġenum Ġclass ĠContinu ity Skipping Type Ġ{ ĊĠĠĠĠĠĠĠ ĠMAT RIX _ PROFILE , ĠSTR A IGHT _ LINE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠTime Series Ġ{ ĊĠĠĠĠĠĠĠ ĠA , ĠB , ĠC ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠAg gregation Method ( val Ġtext ual : ĠString , Ġval Ġaggregated TimeSeries : ĠList < TimeSeries >) Ġ: ĊĠĠĠĠĠĠĠ ĠSerializable Ġ{ ĊĠĠĠĠĠĠĠ ĠAB (" agg ( a , Ġb ) Ġand Ġc ", ĠlistOf ( A , ĠB )), ĊĠĠĠĠĠĠĠ ĠBC (" a Ġand Ġagg ( b , Ġc )", ĠlistOf ( B , ĠC )), ĊĠĠĠĠĠĠĠ ĠAC (" agg ( a , Ġc ) Ġand Ġb ", ĠlistOf ( A , ĠC )), ĊĠĠĠĠĠĠĠ ĠNONE (" Aggregation Ġdidn 't Ġhappen ", Ġempty List ()), ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠSk ipp able Index ( ĊĠĠĠĠĠĠĠ Ġval Ġaggregation Method : ĠAg gregation Method , ĊĠĠĠĠĠĠĠ Ġval Ġa Index : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġb Index : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġc Index : ĠInt , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġthe Ġbest Ġcorrelation Ġbetween Ġ 3 Ġtime Ġseries Ġfor Ġeach Ġpossible Ġwindow Ġposition Ġin Ġeach . Ġ([ Double Array ] Ġvariant ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A ĠFirst Ġtime Ġseries Ġ( must Ġhave Ġthe Ġsmallest Ġamount Ġof Ġ` NaN ` s Ġif Ġany ). ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B ĠSecond Ġtime Ġseries Ġ( must Ġhave Ġthe Ġsecond Ġto Ġsmallest Ġamount Ġof Ġ` NaN ` s Ġif Ġany ). ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series C ĠThird Ġtime Ġseries Ġ( will Ġbe Ġsplit Ġfirst ) Ġ( must Ġhave Ġthe Ġlargest Ġamount Ġof Ġ` NaN ` s Ġif Ġany ). ĊĠĠĠĠ Ġ* Ġ@ param Ġwindow Size , Ġalso Ġcalled Ġ` m `, Ġthe Ġwindow Ġsize Ġused Ġto Ġtraverse Ġall Ġthree Ġtime Ġseries . ĊĠĠĠĠ Ġ* Ġ@ param Ġreducer ĠDefines Ġwhether Ġto Ġfind Ġthe Ġhighest Ġor Ġlowest Ġcorrelation . ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠIn Ġpractice Ġthis Ġis Ġeither Ġ[ MIN ] Ġor Ġ[ MAX ]. ĠDefaults Ġto Ġ[ MAX ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A Without NaN ĠOptional , Ġbut Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series A ], Ġthis Ġneeds Ġto Ġbe Ġsupplied . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Without NaN ĠOptional , Ġbut Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series B ], Ġthis Ġneeds Ġto Ġbe Ġsupplied . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series C Without NaN ĠOptional , Ġbut Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series C ], Ġthis Ġneeds Ġto Ġbe Ġsupplied . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A Without Na NS l iding Means ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series A ]. ĠNOTE : ĠAs Ġthe Ġname Ġsuggests , Ġif Ġ[ time Series A ] Ġcontains Ġ` NaN ` s , ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġuse Ġ[ time Series A Without NaN ] Ġto Ġcalculate Ġit . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A Without Na NS l iding St ds ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series A ]. ĠNOTE : ĠAs Ġthe Ġname Ġsuggests , Ġif Ġ[ time Series A ] Ġcontains Ġ` NaN ` s , ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġuse Ġ[ time Series A Without NaN ] Ġto Ġcalculate Ġit . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Sl iding Means ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series B ]. ĠIt Ġdoesn 't Ġmatter Ġwhether Ġ[ time Series B ] Ġhas Ġany Ġ` NaN ` s . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Sl iding St ds ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series B ]. ĠIt Ġdoesn 't Ġmatter Ġwhether Ġ[ time Series B ] Ġhas Ġany Ġ` NaN ` s . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series CS l iding Means ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series C ]. ĠIt Ġdoesn 't Ġmatter Ġwhether Ġ[ time Series C ] Ġhas Ġany Ġ` NaN ` s . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series CS l iding St ds ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series C ]. ĠIt Ġdoesn 't Ġmatter Ġwhether Ġ[ time Series C ] Ġhas Ġany Ġ` NaN ` s . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlag Bound ĠOptional Ġen velop ing Ġmechanism . ĠIf Ġprovided , Ġall Ġwindow Ġpl ac ements Ġare Ġwithin Ġ[ lag Bound ] Ġdistance Ġof Ġeach Ġother . ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Cube Callback ĠOptional Ġmatrix Ġthat Ġcan Ġbe Ġprovided Ġto Ġbe Ġfilled Ġwith Ġall Ġresults . ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠIt 's Ġfaster Ġwhen Ġnot Ġprovided . ĠMatrix Ġmust Ġbe Ġof Ġdimensions ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ([ time Series C ] `. size ` Ġ- Ġ[ window Size ] Ġ+ Ġ 1 , ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ[ time Series B ] `. size ` Ġ- Ġ[ window Size ] Ġ+ Ġ 1 , ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ[ time Series A ] `. size ` Ġ- Ġ[ window Size ] Ġ+ Ġ 1 ). ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Index Callback ĠOptional Ġcallback Ġfunction Ġthat Ġcan Ġbe Ġprovided Ġwhich Ġwill Ġbe Ġcalled Ġbefore ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ mass P ear son 3 d Cube ] Ġreturns Ġwith Ġthe Ġindices Ġand Ġaggregation Ġmethod Ġof Ġthe Ġbest Ġfound Ġcorrelation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġvalue Ġof Ġthe Ġbest Ġ( accord ing Ġto Ġ[ reducer ]) Ġcorrelation Ġfound Ġbetween Ġthe Ġthree Ġgiven Ġtime Ġseries . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġstamp P ear son 3 ts ( ĊĠĠĠĠĠĠĠ Ġtime Series A : ĠDouble Array , ĊĠĠĠĠĠĠĠ Ġtime Series B : ĠDouble Array , ĊĠĠĠĠĠĠĠ Ġtime Series C : ĠDouble Array , Ġ// Ġwill Ġbe Ġsplit Ġfirst ĊĠĠĠĠĠĠĠ Ġwindow Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġreducer : ĠAg gregation With Reducer With Arg With Compare Ġ= ĠMAX , ĊĊĠĠĠĠĠĠĠ Ġtime Series A Without NaN : ĠDouble Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series B Without NaN : ĠDouble Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series C Without NaN : ĠDouble Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġtime Series A Without Na NS l iding Means : ĠDouble Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series A Without Na NS 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 , ĊĠĠĠĠĠĠĠ Ġtime Series CS l iding Means : ĠDouble Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series CS l iding St ds : ĠDouble Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġlag Bound : ĠInt ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġmatrix ĊĠĠĠĠĠĠĠ Ġresult Cube Callback : ĠF 6 4 Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġresult Index Callback : Ġ(( aggregation : ĠAg gregation Method , Ġa Index : ĠInt , Ġb Index : ĠInt , Ġc Index : ĠInt ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠDouble Ġ= Ġstamp P ear son 3 ts ( ĊĠĠĠĠĠĠĠ Ġtime Series A Ġ= Ġtime Series A . as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series B Ġ= Ġtime Series B . as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series C Ġ= Ġtime Series C . 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 C Without NaN Ġ= Ġtime Series C Without NaN ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series A Without Na NS l iding Means Ġ= Ġtime Series A Without Na NS l iding Means ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series A Without Na NS l iding St ds Ġ= Ġtime Series A Without Na NS 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 (), ĊĠĠĠĠĠĠĠ Ġtime Series CS l iding Means Ġ= Ġtime Series CS l iding Means ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġtime Series CS l iding St ds Ġ= Ġtime Series CS l iding St ds ?. as F 6 4 Array (), ĊĠĠĠĠĠĠĠ Ġlag Bound Ġ= Ġlag Bound , ĊĠĠĠĠĠĠĠ Ġresult Cube Callback Ġ= Ġresult Cube Callback , ĊĠĠĠĠĠĠĠ Ġresult Index Callback Ġ= Ġresult Index Callback , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFind Ġthe Ġbest Ġcorrelation Ġbetween Ġ 3 Ġtime Ġseries Ġfor Ġeach Ġpossible Ġwindow Ġposition Ġin Ġeach . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A ĠFirst Ġtime Ġseries Ġ( must Ġhave Ġthe Ġsmallest Ġamount Ġof Ġ` NaN ` s Ġif Ġany ). ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B ĠSecond Ġtime Ġseries Ġ( must Ġhave Ġthe Ġsecond Ġto Ġsmallest Ġamount Ġof Ġ` NaN ` s Ġif Ġany ). ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series C ĠThird Ġtime Ġseries Ġ( will Ġbe Ġsplit Ġfirst ) Ġ( must Ġhave Ġthe Ġlargest Ġamount Ġof Ġ` NaN ` s Ġif Ġany ). ĊĠĠĠĠ Ġ* Ġ@ param Ġwindow Size , Ġalso Ġcalled Ġ` m `, Ġthe Ġwindow Ġsize Ġused Ġto Ġtraverse Ġall Ġthree Ġtime Ġseries . ĊĠĠĠĠ Ġ* Ġ@ param Ġreducer ĠDefines Ġwhether Ġto Ġfind Ġthe Ġhighest Ġor Ġlowest Ġcorrelation . ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠIn Ġpractice Ġthis Ġis Ġeither Ġ[ MIN ] Ġor Ġ[ MAX ]. ĠDefaults Ġto Ġ[ MAX ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A Without NaN ĠOptional , Ġbut Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series A ], Ġthis Ġneeds Ġto Ġbe Ġsupplied . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Without NaN ĠOptional , Ġbut Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series B ], Ġthis Ġneeds Ġto Ġbe Ġsupplied . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series C Without NaN ĠOptional , Ġbut Ġif Ġany Ġcontinu ity Ġis Ġremoved Ġfrom Ġ[ time Series C ], Ġthis Ġneeds Ġto Ġbe Ġsupplied . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A Without Na NS l iding Means ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series A ]. ĠNOTE : ĠAs Ġthe Ġname Ġsuggests , Ġif Ġ[ time Series A ] Ġcontains Ġ` NaN ` s , ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġuse Ġ[ time Series A Without NaN ] Ġto Ġcalculate Ġit . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series A Without Na NS l iding St ds ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series A ]. ĠNOTE : ĠAs Ġthe Ġname Ġsuggests , Ġif Ġ[ time Series A ] Ġcontains Ġ` NaN ` s , ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġuse Ġ[ time Series A Without NaN ] Ġto Ġcalculate Ġit . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Sl iding Means ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series B ]. ĠIt Ġdoesn 't Ġmatter Ġwhether Ġ[ time Series B ] Ġhas Ġany Ġ` NaN ` s . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series B Sl iding St ds ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series B ]. ĠIt Ġdoesn 't Ġmatter Ġwhether Ġ[ time Series B ] Ġhas Ġany Ġ` NaN ` s . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series CS l iding Means ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series C ]. ĠIt Ġdoesn 't Ġmatter Ġwhether Ġ[ time Series C ] Ġhas Ġany Ġ` NaN ` s . ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Series CS l iding St ds ĠOptional Ġoptimization . ĠCan Ġbe Ġcalculated Ġusing Ġ[ Stamp P ear son . compute Sl iding Mean Std ] Ġof ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ time Series C ]. ĠIt Ġdoesn 't Ġmatter Ġwhether Ġ[ time Series C ] Ġhas Ġany Ġ` NaN ` s . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlag Bound ĠOptional Ġen velop ing Ġmechanism . ĠIf Ġprovided , Ġall Ġwindow Ġpl ac ements Ġare Ġwithin Ġ[ lag Bound ] Ġdistance Ġof Ġeach Ġother . ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Cube Callback ĠOptional Ġmatrix Ġthat Ġcan Ġbe Ġprovided Ġto Ġbe Ġfilled Ġwith Ġall Ġresults . ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠIt 's Ġfaster Ġwhen Ġnot Ġprovided . ĠMatrix Ġmust Ġbe Ġof Ġdimensions ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ([ time Series C ] `. size ` Ġ- Ġ[ window Size ] Ġ+ Ġ 1 , ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ[ time Series B ] `. size ` Ġ- Ġ[ window Size ] Ġ+ Ġ 1 , ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ[ time Series A ] `. size ` Ġ- Ġ[ window Size ] Ġ+ Ġ 1 ). ĊĠĠĠĠ Ġ* Ġ@ param Ġresult Index Callback ĠOptional Ġcallback Ġfunction Ġthat Ġcan Ġbe Ġprovided Ġwhich Ġwill Ġbe Ġcalled Ġbefore ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġ[ mass P ear son 3 d Cube ] Ġreturns Ġwith Ġthe Ġindices Ġand Ġaggregation Ġmethod Ġof Ġthe Ġbest Ġfound Ġcorrelation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġvalue Ġof Ġthe Ġbest Ġ( accord ing Ġto Ġ[ reducer ]) Ġcorrelation Ġfound Ġbetween Ġthe Ġthree Ġgiven Ġtime Ġseries . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġstamp P ear son 3 ts ( ĊĠĠĠĠĠĠĠ Ġtime Series A : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġtime Series B : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġtime Series C : ĠF 6 4 Flat Array , Ġ// Ġwill Ġbe Ġsplit Ġfirst ĊĠĠĠĠĠĠĠ Ġwindow Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġreducer : ĠAg gregation With Reducer With Arg With Compare Ġ= ĠMAX , ĊĊĠĠĠĠĠĠĠ Ġtime Series A Without NaN : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series B Without NaN : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series C Without NaN : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġtime Series A Without Na NS l iding Means : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series A Without Na NS 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 , ĊĠĠĠĠĠĠĠ Ġtime Series CS l iding Means : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series CS l iding St ds : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġlag Bound : ĠInt ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġmatrix ĊĠĠĠĠĠĠĠ Ġresult Cube Callback : ĠF 6 4 Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġresult Index Callback : Ġ(( aggregation : ĠAg gregation Method , Ġa Index : ĠInt , Ġb Index : ĠInt , Ġc Index : ĠInt ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġwindow Size ĊĊĠĠĠĠĠĠĠ Ġval ĠTA : ĠF 6 4 Flat Array Ġ= Ġtime Series A ĊĠĠĠĠĠĠĠ Ġval ĠTB : ĠF 6 4 Flat Array Ġ= Ġtime Series B ĊĠĠĠĠĠĠĠ Ġval ĠTC : ĠF 6 4 Flat Array Ġ= Ġtime Series C ĊĊĠĠĠĠĠĠĠ Ġval Ġnan Count A Ġ= ĠnumberOf Window Pl ac ements Saved ( TA , Ġm ) ĊĠĠĠĠĠĠĠ Ġval Ġnan Count B Ġ= ĠnumberOf Window Pl ac ements Saved ( TB , Ġm ) ĊĠĠĠĠĠĠĠ Ġval Ġnan Count C Ġ= ĠnumberOf Window Pl ac ements Saved ( TC , Ġm ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( nan Count A Ġ> Ġ 0 ) Ġ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 Ġ( nan Count B Ġ> Ġ 0 ) Ġ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 ." Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( nan Count C Ġ> Ġ 0 ) Ġrequire ( time Series C Without NaN Ġ!= Ġnull ) Ġ{ Ġ" The Ġsupplied Ġtime Ġseries ĠC Ġhas Ġcontinu ity Ġremoved , Ġplease Ġsupply Ġthe Ġoriginal Ġtime Ġseries Ġwithout ĠNaN s Ġas Ġwell ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequire ( nan Count A Ġ<= Ġnan Count B Ġ&& Ġnan Count B Ġ<= Ġnan Count C ) Ġ{ Ġ" time Series A Ġmust Ġhave Ġthe Ġleast ĠNaN s , Ġthen Ġtime Series B , Ġthen Ġtime Series C " Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠT AN o NaN Ġ= Ġtime Series A Without NaN Ġ?: ĠTA ĊĠĠĠĠĠĠĠ Ġval ĠTB No NaN Ġ= Ġtime Series B Without NaN Ġ?: ĠTB ĊĠĠĠĠĠĠĠ Ġval ĠTC No NaN Ġ= Ġtime Series C Without NaN Ġ?: ĠTC ĊĊĠĠĠĠĠĠĠ Ġval Ġn A : ĠInt Ġ= ĠTA . length ĊĠĠĠĠĠĠĠ Ġval Ġn B : ĠInt Ġ= ĠTB . length ĊĠĠĠĠĠĠĠ Ġval Ġn C : ĠInt Ġ= ĠTC . length ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( result Cube Callback Ġ!= Ġnull ) Ġrequire ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Cube Callback . shape . content Equals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn C Ġ- Ġm Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn B Ġ- Ġm Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn A Ġ- Ġm Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġresult Ġshould Ġbe Ġof Ġsize Ġ[ n C Ġ- Ġm Ġ+ Ġ 1 , Ġn B Ġ- Ġm Ġ+ Ġ 1 , Ġn A Ġ- Ġm Ġ+ Ġ 1 ], Ġwhere Ġ[ n ] Ġis Ġthe Ġsize Ġof Ġ[ time Series ] Ġand Ġ[ m ] Ġis Ġthe Ġsize Ġof Ġ[ query ]. " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġcan Ġbe Ġreused Ġin Ġlower Ġlevels ĊĊĠĠĠĠĠĠĠ Ġvar Ġtime Series AS l iding Means Ġ= Ġtime Series A Without Na NS l iding Means ĊĠĠĠĠĠĠĠ Ġvar Ġtime Series AS l iding St ds Ġ= Ġtime Series A Without Na NS l iding St ds ĊĊĠĠĠĠĠĠĠ Ġif Ġ( time Series AS l iding Means Ġ== Ġnull Ġ|| Ġtime Series AS l iding St ds Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding Means Ġ= Ġarray Cache [ nA Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . F ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds Ġ= Ġarray Cache [ nA Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . G ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠT AN o NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 Ġ= Ġarray Cache [ nB Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . J ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Sl iding St ds Ġ= Ġarray Cache [ nB Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . K ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠTB No NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ= Ġtime Series B Sl iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array Ġ= Ġtime Series B Sl iding St ds , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġtime Series CS l iding Means Ġ= Ġtime Series CS l iding Means ĊĠĠĠĠĠĠĠ Ġvar Ġtime Series CS l iding St ds Ġ= Ġtime Series CS l iding St ds ĊĊĠĠĠĠĠĠĠ Ġif Ġ( time Series CS l iding Means Ġ== Ġnull Ġ|| Ġtime Series CS l iding St ds Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series CS l iding Means Ġ= Ġarray Cache [ n C Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . S ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series CS l iding St ds Ġ= Ġarray Cache [ n C Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . T ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠTC No NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ= Ġtime Series CS l iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array Ġ= Ġtime Series CS l iding St ds , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġconsider Cache Query CT ime Series AS l iding Dot Products Empty Ġ= Ġdelegate Of ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġcache Query CT ime Series AS l iding Dot Products Ġ= Ġarray Cache [ nA Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . C ] ĊĊĠĠĠĠĠĠĠ Ġval Ġconsider Cache Query CT ime Series B Sl iding Dot Products Empty Ġ= Ġdelegate Of ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġcache Query CT ime Series B Sl iding Dot Products Ġ= Ġarray Cache [ nB Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . D ] ĊĊĠĠĠĠĠĠĠ Ġ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 Ġ= Ġarray Cache [ nA Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . E ] ĊĊĠĠĠĠĠĠĠ Ġvar Ġprevious Query C : ĠF 6 4 Flat Array ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġbest Aggregation Ġ= ĠAg gregation Method . NONE ĊĠĠĠĠĠĠĠ Ġvar Ġbest A Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġbest B Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġbest C Index Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġvar Ġbest Correlation Ġ= Ġreducer . initializer ĊĊĠĠĠĠĠĠĠ ĠTC . forEach Window With Index ( window Size Ġ= Ġm ) Ġ{ Ġquery C Index , Ġquery C Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġskip Ġfor Ġcontinu ity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query C . any Ġ{ Ġit . isNaN () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider Cache Query CT ime Series AS l iding Dot Products Empty . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider Cache Query CT ime Series B Sl iding Dot Products Empty . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach Window With Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaggregation Ġ= ĠAg gregation Method . NONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġa Index : ĠInt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġb Index : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplane Result Ġ= Ġstamp P ear son 3 ts Sub ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series A Ġ= ĠT AN o NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Ġ= ĠTB , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Without NaN Ġ= ĠTB No NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery C Ġ= Ġquery C , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer Ġ= Ġreducer , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlag Bound Ġ= Ġlag Bound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery C Index Ġ= Ġquery C Index , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding Means Ġ= Ġtime Series AS l iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds Ġ= Ġtime Series AS l iding St ds , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Sl iding Means Ġ= Ġtime Series B Sl iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Sl iding St ds Ġ= Ġtime Series B Sl iding St ds , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery C Mean Ġ= Ġtime Series CS l iding Means [ query C Index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery C Std Ġ= Ġtime Series CS l iding St ds [ query C Index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider Cache Query CT ime Series AS l iding Dot Products Empty Ġ= Ġconsider Cache Query CT ime Series AS l iding Dot Products Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query CT ime Series AS l iding Dot Products Ġ= Ġcache Query CT ime Series AS l iding Dot Products , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider Cache Query CT ime Series B Sl iding Dot Products Empty Ġ= Ġconsider Cache Query CT ime Series B Sl iding Dot Products Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query CT ime Series B Sl iding Dot Products Ġ= Ġcache Query CT ime Series B Sl iding Dot Products , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider Cache Query B TimeSeries AS l iding Dot Products Empty Ġ= Ġconsider Cache Query B TimeSeries AS l iding Dot Products Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query B TimeSeries AS l iding Dot Products Ġ= Ġcache Query B TimeSeries AS l iding Dot Products , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Query C Ġ= Ġprevious Query C , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Plane Callback Ġ= Ġresult Cube Callback ?. view ( index Ġ= Ġquery C Index ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Index Callback Ġ= Ġwhen Ġ( result Index Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġagg I , Ġa I , Ġb I Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaggregation Ġ= Ġagg I ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Index Ġ= Ġa I ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Index Ġ= Ġb I ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reducer . first Is Better Than Second ( first Ġ= Ġplane Result , Ġsecond Ġ= Ġbest Correlation )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Correlation Ġ= Ġreducer ( best Correlation , Ġplane Result ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" S ENSE LESS _ COMP AR IS ON ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Index Callback Ġ!= Ġnull ) Ġ{ Ġ// Ġdon 't Ġlisten Ġto Ġthis Ġhint , Ġit 's Ġwrong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Aggregation Ġ= Ġaggregation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest A Index Ġ= Ġa Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest B Index Ġ= Ġb Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest C Index Ġ= Ġquery C Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Query C Ġ= Ġquery C ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult Index Callback ?. invoke ( best Aggregation , Ġbest A Index , Ġbest B Index , Ġbest C Index ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbest Correlation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġstamp P ear son 3 ts Sub ( ĊĠĠĠĠĠĠĠ Ġtime Series A : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġtime Series B : ĠF 6 4 Flat Array , Ġ Ġ// Ġwill Ġbe Ġsplit Ġup Ġin Ġqueries ĊĠĠĠĠĠĠĠ Ġquery C : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġ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 ĊĠĠĠĠĠĠĠ Ġreducer : ĠAg gregation With Reducer With Arg With Compare Ġ= ĠMAX , ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġdata Ġfor Ġthe Ġlag Ġbound ĊĠĠĠĠĠĠĠ Ġlag Bound : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery C Index : ĠInt ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġvertical Ġ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 , ĊĠĠĠĠĠĠĠ Ġquery C Mean : ĠDouble ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery C Std : ĠDouble ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġhorizontal Ġoptimizations ĊĠĠĠĠĠĠĠ Ġconsider Cache Query CT ime Series AS l iding Dot Products Empty : ĠDelegate < Boolean >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcache Query CT ime Series AS l iding Dot Products : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġconsider Cache Query CT ime Series B Sl iding Dot Products Empty : ĠDelegate < Boolean >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcache Query CT ime Series B Sl iding Dot Products : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġconsider Cache Query B TimeSeries AS l iding Dot Products Empty : ĠDelegate < Boolean >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcache Query B TimeSeries AS l iding Dot Products : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġprevious Query C : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġplane ĊĠĠĠĠĠĠĠ Ġresult Plane Callback : ĠF 6 4 Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġresult Index Callback : Ġ(( aggregation : ĠAg gregation Method , Ġa Index : ĠInt , Ġb Index : ĠInt ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTA Ġ= Ġtime Series A ĊĠĠĠĠĠĠĠ Ġvar ĠTB Ġ= Ġtime Series B Ċ Ċ // ĠĠĠĠĠĠĠ Ġrequire ( TA . all Ġ{ Ġit . isNot NaN () Ġ}) Ġ{ Ġ" time Series A Ġis Ġnot Ġallowed Ġto Ġhave Ġcontinu ity Ġremoved Ġand Ġthus Ġmay Ġnot Ġcontain ĠNaN s ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġquery C . length ĊĠĠĠĠĠĠĠ Ġval Ġn A Ġ= ĠTA . length ĊĠĠĠĠĠĠĠ Ġvar Ġn B Ġ= ĠTB . length ĊĊĠĠĠĠĠĠĠ Ġif Ġ( TA . any Ġ{ Ġit . isNaN () Ġ}) Ġ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 . any Ġ{ Ġit . isNaN () Ġ}) Ġ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 ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠT AN o NaN Ġ= Ġtime Series A Without NaN Ġ?: ĠTA ĊĠĠĠĠĠĠĠ Ġvar ĠTB No NaN Ġ= Ġtime Series B Without NaN Ġ?: ĠTB ĊĊĠĠĠĠĠĠĠ Ġ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 " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġinput Ġrelevant Ġto ĠTB Ġvariable Ġand Ġapply Ġlag Ġbound Ġto Ġall Ġpre calculated Ġvalues ĊĠĠĠĠĠĠĠ Ġ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 ĊĠĠĠĠĠĠĠ Ġvar Ġcache Query CT ime Series B Sl iding Dot Products Ġ= Ġcache Query CT ime Series B Sl iding Dot Products ĊĠĠĠĠĠĠĠ Ġvar Ġb Index Modifier Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġrestore TB Continu ity Lag Bound Fix : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( lag Bound Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġbound Ġwould Ġmake Ġthat Ġno Ġm Ġvalues Ġare Ġleft Ġin ĠTB ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query C Index !! Ġ> Ġn B Ġ- Ġm ) Ġreturn Ġreducer . initializer ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Bound Index Ġ= Ġ( query C Index Ġ- Ġlag Bound ). coerce At Least ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Bound Index Ġ= Ġ( query C Index Ġ+ Ġlag Bound ). coerce At Most ( nB Ġ- Ġm ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestore TB Continu ity Lag Bound Fix Ġ= Ġfix Removed Continu ity With Lag Bound ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Ġ= ĠTB , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series No NaN Ġ= ĠTB No NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Of Slice Index Ġ= Ġend Bound Index Ġ+ Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinu ity Skipping Ġ= Ġcontinu ity Skipping , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTB Ġ= ĠTB . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TB Ġ!== ĠTB No NaN ) ĠTB No NaN Ġ= ĠTB No NaN . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġm ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġn B Ġ= ĠTB . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb Index Modifier Ġ= Ġstart Bound Index ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Sl iding Means Ġ= Ġtime Series B Sl iding Means ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Sl iding St ds Ġ= Ġtime Series B Sl iding St ds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query CT ime Series B Sl iding Dot Products Ġ= Ġcache Query CT ime Series B Sl iding Dot Products ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġreused Ġlater Ġin Ġagg ( T , ĠQ 1 ) Ġand ĠQ 2 ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġwhere ĠQ 1 Ġis Ġfrom Ġ[ time Series ToBe Split ] Ġand ĠQ 2 Ġis Ġ[ query ] ĊĠĠĠĠĠĠĠ Ġval Ġquery CT ime Series AS l iding Dot Products Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query CT ime Series AS l iding Dot Products Ġ!= Ġnull Ġ&& Ġconsider Cache Query CT ime Series AS l iding Dot Products Empty Ġ!= Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query CT ime Series AS l iding Dot Products . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate QT Cache ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQT Cache Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider QT Cache Empty Ġ= Ġconsider Cache Query CT ime Series AS l iding Dot Products Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQ Ġ= Ġquery C , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠT AN o NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ= Ġn A , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Query Ġ= Ġprevious Query C , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Array Slot Ġ= ĠSlot . B 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsl iding Dot Products ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQ Ġ= Ġquery C , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠT AN o NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Array Slot Ġ= ĠSlot . B 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġpre calculate Ġall ĠQ B Ġdot ĠQ C ĊĠĠĠĠĠĠĠ Ġval Ġquery CT ime Series B Sl iding Dot Products Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query CT ime Series B Sl iding Dot Products Ġ!= Ġnull Ġ&& Ġconsider Cache Query CT ime Series B Sl iding Dot Products Empty Ġ!= Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query CT ime Series B Sl iding Dot Products . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate QT Cache ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQT Cache Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider QT Cache Empty Ġ= Ġconsider Cache Query CT ime Series B Sl iding Dot Products Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQ Ġ= Ġquery C , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠTB No NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ= Ġn B , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Query Ġ= Ġprevious Query C , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Array Slot Ġ= ĠSlot . B 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsl iding Dot Products ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQ Ġ= Ġquery C , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠTB No NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Array Slot Ġ= ĠSlot . B 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġreused Ġlater Ġin Ġagg ( T , ĠQ 1 ) Ġand ĠQ 2 ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġwhere ĠQ 1 Ġis Ġfrom Ġ[ time Series ToBe Split ] Ġand ĠQ 2 Ġis Ġ[ query ] ĊĠĠĠĠĠĠĠ Ġval Ġquery C Mean Ġ= Ġquery C Mean Ġ?: Ġquery C . mean () ĊĠĠĠĠĠĠĠ Ġval Ġquery C Std Ġ= Ġquery C Std Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray Cache [ query C . length , ĠSlot . M ] Ġ{ Ġquery C [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ-= Ġquery C Mean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsqrt ( it . dot () Ġ/ Ġit . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġreused Ġlater Ġin ĠT Ġand Ġagg ( Q 1 , ĠQ 2 ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġwhere ĠQ 1 Ġis Ġfrom Ġ[ time Series ToBe Split ] Ġand ĠQ 2 Ġis Ġ[ query ] ĊĠĠĠĠĠĠĠ Ġ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 Ġ= Ġarray Cache [ nA Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . F ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds Ġ= Ġarray Cache [ nA Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . G ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠT AN o NaN , Ġ// Ġno Ġdifference Ġwith ĠTA Ġin Ġpractice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ= Ġtime Series AS l iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array Ġ= Ġtime Series AS l iding St ds , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtime Series AS l iding Means Agg QC Ġ= Ġarray Cache [ nA Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . H ] ĊĠĠĠĠĠĠĠ Ġval Ġtime Series AS l iding St ds Agg QC Ġ= Ġarray Cache [ nA Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . I ] ĊĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std With Agg ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠT AN o NaN , Ġ// Ġno Ġdifference Ġwith ĠTA Ġin Ġpractice ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size Ġ= Ġm , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Mean Array Ġ= Ġtime Series AS l iding Means Agg QC , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Std Array Ġ= Ġtime Series AS l iding St ds Agg QC , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre calculated T Means Ġ= Ġtime Series AS l iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggreg ations Ġ= Ġquery C , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( time Series B Sl iding Means Ġ== Ġnull Ġ|| Ġtime Series B Sl iding St ds Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Sl iding Means Ġ= Ġarray Cache [ nB Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . J ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series B Sl iding St ds Ġ= Ġarray Cache [ nB Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . K ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Sl iding Mean Std ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT Ġ= ĠTB No NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsider Cache Query B TimeSeries AS l iding Dot Products Empty Ġ?: Ġdelegate Of ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġcache Query B TimeSeries AS l iding Dot Products Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cache Query B TimeSeries AS l iding Dot Products Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider Cache Query B TimeSeries AS l iding Dot Products Empty . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query B TimeSeries AS l iding Dot Products ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray Cache [ nA Ġ- Ġm Ġ+ Ġ 1 , ĠSlot . L ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġvar Ġbest Aggregation : ĠAg gregation Method Ġ= ĠAg gregation Method . NONE ĊĠĠĠĠĠĠĠ Ġvar Ġbest A Index : ĠInt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġbest B Index : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġvar Ġbest Correlation : ĠDouble Ġ= Ġreducer . initializer ĊĠĠĠĠĠĠĠ Ġvar Ġprevious Query B : ĠF 6 4 Flat Array ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠTB . forEach Window 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 @ forEach Window With Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaggregation : ĠAg gregation Method Ġ= ĠAg gregation Method . NONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġa Index : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Result Ġ= Ġmass P ear son 3 ts ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series A Ġ= ĠT AN o NaN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery B Ġ= Ġquery B , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery C Ġ= Ġquery C , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer Ġ= Ġreducer , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlag Bound Ġ= Ġlag Bound , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery B Index Ġ= Ġquery B Index Ġ+ Ġb Index Modifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery C Index Ġ= Ġquery C Index , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery CT ime Series AS l iding Dot Products Ġ= Ġquery CT ime Series AS l iding Dot Products , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery B Mean Ġ= Ġtime Series B Sl iding Means [ query B Index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery B Std Ġ= Ġtime Series B Sl iding St ds [ query B Index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery C Mean Ġ= Ġquery C Mean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery C Std Ġ= Ġquery C Std , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding Means Ġ= Ġtime Series AS l iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds Ġ= Ġtime Series AS l iding St ds , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding Means Agg QC Ġ= Ġtime Series AS l iding Means Agg QC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds Agg QC Ġ= Ġtime Series AS l iding St ds Agg QC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery BD ot Query C Ġ= Ġquery CT ime Series B Sl iding Dot Products [ query B Index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider Cache Query B TimeSeries AS l iding Dot Products Empty Ġ= Ġconsider Cache Query B TimeSeries AS l iding Dot Products Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query B TimeSeries AS l iding Dot Products Ġ= Ġcache Query B TimeSeries AS l iding Dot Products , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Query B Ġ= Ġprevious Query B , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Line Callback Ġ= Ġresult Plane Callback ?. view As Flat ( query B Index Ġ+ Ġb Index Modifier ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Index Callback Ġ= Ġwhen Ġ( result Index Callback ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġagg I , Ġa I Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaggregation Ġ= Ġagg I ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Index Ġ= Ġa I ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ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 Aggregation Ġ= Ġaggregation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest A Index Ġ= Ġa Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest B Index Ġ= Ġquery B Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Query B Ġ= Ġquery B ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrestore TB Continu ity Lag Bound Fix ?. invoke () ĊĠĠĠĠĠĠĠ Ġresult Index Callback ?. invoke ( best Aggregation , Ġbest A Index , Ġbest B Index Ġ+ Ġb Index Modifier ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbest Correlation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġmass P ear son 3 ts ( ĊĠĠĠĠĠĠĠ Ġtime Series A : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġquery B : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġquery C : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġreducer : ĠAg gregation With Reducer With Arg With Compare Ġ= ĠMAX , ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġdata Ġfor Ġthe Ġlag Ġbound ĊĠĠĠĠĠĠĠ Ġlag Bound : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery B Index : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery C Index : ĠInt ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġvertical Ġoptimizations ĊĠĠĠĠĠĠĠ Ġquery CT ime Series AS l iding Dot Products : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery B Mean : ĠDouble ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery B Std : ĠDouble ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery C Mean : ĠDouble ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery C Std : ĠDouble ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ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 AS l iding Means Agg QC : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds Agg QC : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġquery BD ot Query C : ĠDouble ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġhorizontal Ġoptimizations ĊĠĠĠĠĠĠĠ Ġconsider Cache Query B TimeSeries AS l iding Dot Products Empty : ĠDelegate < Boolean >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcache Query B TimeSeries AS l iding Dot Products : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġprevious Query B : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġline ĊĠĠĠĠĠĠĠ Ġresult Line Callback : ĠF 6 4 Flat Array ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġindex ĊĠĠĠĠĠĠĠ Ġresult Index Callback : Ġ(( aggregation : ĠAg gregation Method , Ġa Index : ĠInt ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠQ B Ġ= Ġquery B ĊĠĠĠĠĠĠĠ Ġval ĠQ C Ġ= Ġquery C ĊĊĠĠĠĠĠĠĠ Ġrequire ( QB . length Ġ== ĠQ C . length ) ĊĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠQ B . length ĊĊĠĠĠĠĠĠĠ Ġvar ĠTA Ġ= Ġtime Series A ĊĠĠĠĠĠĠĠ Ġvar Ġn A Ġ= ĠTA . length ĊĊĠĠĠĠĠĠĠ Ġrequire ( TA . all Ġ{ Ġit . isNot NaN () Ġ}) Ġ{ Ġ" time Series A Ġis Ġnot Ġallowed Ġto Ġhave Ġcontinu ity Ġremoved Ġand Ġthus Ġmay Ġnot Ġcontain ĠNaN s ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result Line Callback Ġ!= Ġnull ) Ġrequire ( result Line Callback . length Ġ== Ġn A Ġ- Ġm Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġresult Ġshould Ġbe Ġof Ġsize Ġ[ nA Ġ- Ġm Ġ+ Ġ 1 ], Ġwhere Ġ[ n ] Ġis Ġthe Ġsize Ġof Ġ[ time Series ] Ġand Ġ[ m ] Ġis Ġthe Ġsize Ġof Ġ[ query ]. " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġinput Ġrelevant Ġto ĠTA Ġvariable Ġand Ġapply Ġlag Ġbound Ġto Ġall Ġpre calculated Ġvalues ĊĠĠĠĠĠĠĠ Ġ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 ĊĠĠĠĠĠĠĠ Ġvar Ġtime Series AS l iding Means Agg QC Ġ= Ġtime Series AS l iding Means Agg QC ĊĠĠĠĠĠĠĠ Ġvar Ġtime Series AS l iding St ds Agg QC Ġ= Ġtime Series AS l iding St ds Agg QC ĊĠĠĠĠĠĠĠ Ġvar Ġcache Query B TimeSeries AS l iding Dot Products Ġ= Ġcache Query B TimeSeries AS l iding Dot Products ĊĠĠĠĠĠĠĠ Ġvar Ġquery CT ime Series AS l iding Dot Products Ġ= Ġquery CT ime Series AS l iding Dot Products ĊĠĠĠĠĠĠĠ Ġvar Ġa Index Modifier Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( lag Bound Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( abs ( query B Index !! Ġ- Ġquery C Index !! ) Ġ<= Ġlag Bound ) Ġ{ Ġ" Illegal Ġinput : Ġquery B Index Ġand Ġquery C Index Ġare Ġtoo Ġfar Ġapart Ġfor Ġthe Ġlag bound ." Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġbound Ġwould Ġmake Ġthat Ġno Ġm Ġvalues Ġare Ġleft Ġin ĠTA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query C Index Ġ> Ġn A Ġ- Ġm Ġ|| Ġquery B Index Ġ> Ġn A Ġ- Ġm ) Ġreturn Ġreducer . initializer ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Bound Index Ġ= Ġ( max Of ( query B Index , Ġquery C Index ) Ġ- Ġlag Bound ). coerce At Least ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Bound Index Ġ= Ġ( min Of ( query B Index , Ġquery C Index ) Ġ+ Ġlag Bound ). coerce At Most ( nA Ġ- Ġm ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTA Ġ= ĠTA . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn A Ġ= ĠTA . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa Index Modifier Ġ= Ġstart Bound Index ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding Means Ġ= Ġtime Series AS l iding Means ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds Ġ= Ġtime Series AS l iding St ds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding Means Agg QC Ġ= Ġtime Series AS l iding Means Agg QC ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series AS l iding St ds Agg QC Ġ= Ġtime Series AS l iding St ds Agg QC ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery CT ime Series AS l iding Dot Products Ġ= Ġquery CT ime Series AS l iding Dot Products ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Query B TimeSeries AS l iding Dot Products Ġ= Ġcache Query B TimeSeries AS l iding Dot Products ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . slice Flat ( from Ġ= Ġstart Bound Index , Ġto Ġ= Ġend Bound Index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġused Ġin Ġ Ġagg ( TA , ĠQ B ) Ġand ĠQ C ĠĠ Ġand ĠĠ Ġagg ( TA , ĠQ C ) Ġand ĠQ B ĊĠĠĠĠĠĠĠ Ġval ĠQ B dot QC Ġ= Ġquery BD ot Query C Ġ?: Ġ( QB Ġdot ĠQ C ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresults Matrix Ġ= Ġif Ġ( null Ġ== Ġresult Line Callback ) Ġnull Ġelse ĠF 6 4 Array ( 3 , Ġn A Ġ- Ġm Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġresults Index Array Ġ= Ġif Ġ( result Index Callback Ġ== Ġnull ) Ġnull Ġelse ĠInt Array ( 3 ) Ġ{ Ġ- 1 Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġagg ( TA , ĠQ B ) Ġand ĠQ C ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġmass P ear son ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Ġ= ĠTA , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggregation Queries Ġ= ĠQ B , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= ĠQ C , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreducer Ġ= Ġreducer , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Dot Aggregation Products Ġ= ĠQ B dot QC , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery TimeSeries Sl iding Dot Products Ġ= Ġquery CT ime Series AS l iding Dot Products , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Mean Ġ= Ġquery C Mean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Std Ġ= Ġquery C Std , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre calculated TimeSeries Sl iding Means Ġ= Ġtime Series AS l iding Means , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Line Callback Ġ= Ġresults Matrix ?. let Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ( result Index : ĠF 6 4 Flat Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults Matrix . V [ 0 ] Ġ= Ġresult Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Index Callback Ġ= Ġresults Index Array ?. let Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ( result Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults Index Array [ 0 ] Ġ= Ġresult Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ). coerce Not NaN ( reducer . initializer ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTA Ġand Ġagg ( QB , ĠQ C ) ĠNOTE , Ġis Ġdone Ġwithout Ġaggregation , Ġbut Ġcan Ġuse Ġthe Ġsame Ġfunction ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġmass P ear son ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Ġ= ĠTA , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= ĠQ B . copy (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ+= ĠQ C ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ/= Ġ 2 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreducer Ġ= Ġreducer , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Sl iding Means Ġ= Ġtime Series AS l iding Means , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Sl iding St ds Ġ= Ġtime Series AS l iding St ds , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Line Callback Ġ= Ġresults Matrix ?. let Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ( result Index : ĠF 6 4 Flat Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults Matrix . V [ 1 ] Ġ= Ġresult Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Index Callback Ġ= Ġresults Index Array ?. let Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ( result Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults Index Array [ 1 ] Ġ= Ġresult Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ). coerce Not NaN ( reducer . initializer ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġagg ( TA , ĠQ C ) Ġand ĠQ B ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġmass P ear son ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Ġ= ĠTA , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggregation Queries Ġ= ĠQ C , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= ĠQ B , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreducer Ġ= Ġreducer , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Dot Aggregation Products Ġ= ĠQ B dot QC , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Sl iding Means Ġ= Ġtime Series AS l iding Means Agg QC , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series Sl iding St ds Ġ= Ġtime Series AS l iding St ds Agg QC , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ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 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Mean Ġ= Ġquery B Mean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Std Ġ= Ġquery B Std , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġpre calculated TimeSeries Sl iding Means Ġ= Ġtime Series AS l iding Means , Ġnot Ġneeded ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Line Callback Ġ= Ġresults Matrix ?. let Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ( result Index : ĠF 6 4 Flat Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults Matrix . V [ 2 ] Ġ= Ġresult Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Index Callback Ġ= Ġresults Index Array ?. let Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ( result Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults Index Array [ 2 ] Ġ= Ġresult Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ). coerce Not NaN ( reducer . initializer ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġbest Correlation Ġ= Ġreducer ( a , Ġb , Ġc ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result Index Callback Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaggregation Ġ= Ġwhen Ġ( best Correlation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" broken Ġreducer ? Ġa : Ġ$ a , Ġb : Ġ$ b , Ġc : Ġ$ c , Ġreduced : Ġ$ best Correlation ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Index Ġ= Ġresults Index Array ! ![ aggregation ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Index Callback ( Aggregation Method . values ()[ aggregation ], Ġa Index Ġ+ Ġa Index Modifier ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( result Line Callback Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Matrix !!. transform In Place Ġ{ Ġit . coerce Not NaN ( reducer . initializer ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Matrix . V [ 0 ]. transform In Place Ġ{ Ġreducer ( results Matrix . V [_ I , Ġi ++ ]) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġresults Matrix . V [ 0 ]. as Flat Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline . copy To ( result Line Callback . slice Flat ( from Ġ= Ġa Index Modifier , Ġto Ġ= Ġa Index Modifier Ġ+ Ġline . length )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbest Correlation ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġaggregation Queries Ġshould Ġbe Ġ 1 ) Ġa Ġquery - sized Ġaggregation Ġflat Ġarray , Ġor Ġ 2 ) Ġan Ġarray Ġof Ġquery Ġsized Ġaggregation Ġflat Ġarrays ĊĠĠĠĠ Ġ* Ġ@ param Ġquery Dot Aggregation Products Ġis Ġan Ġ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 ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġmass P ear son ( ĊĠĠĠĠĠĠĠ Ġtime Series : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġquery : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠ Ġaggregation Queries : ĠF 6 4 Array ?, Ġ// Ġcan Ġbe Ġsupplied Ġto Ġprovide Ġaggregation Ġto Ġtime Series ĊĠĠĠĠĠĠĠ Ġreducer : ĠAg gregation With Reducer With Arg With Compare , ĊĊĠĠĠĠĠĠĠ Ġ// Ġoptional Ġvertical Ġspeed up Ġdata ĊĠĠĠĠĠĠĠ Ġquery Dot Aggregation Products : ĠDouble ?, Ġ// Ġcan Ġbe Ġsupplied Ġto Ġprevent Ġdouble Ġcalculations ĊĠĠĠĠĠĠĠ Ġquery TimeSeries Sl iding Dot Products : ĠF 6 4 Flat Array ?, ĊĠĠĠĠĠĠĠ Ġquery Mean : ĠDouble ?, ĊĠĠĠĠĠĠĠ Ġquery Std : ĠDouble ?, ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding Means : ĠF 6 4 Flat Array ?, ĊĠĠĠĠĠĠĠ Ġtime Series Sl iding St ds : ĠF 6 4 Flat Array ?, ĊĠĠĠĠĠĠĠ Ġpre calculated TimeSeries Sl iding Means : ĠF 6 4 Flat Array ?, Ġ// Ġ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 > ?, ĊĠĠĠĠĠĠĠ Ġcache Query TimeSeries Sl iding Dot Products : ĠF 6 4 Flat Array ?, ĊĠĠĠĠĠĠĠ Ġprevious Query : ĠF 6 4 Flat Array ?, ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġline ĊĠĠĠĠĠĠĠ Ġresult Line Callback : Ġ(( F 6 4 Flat Array ) Ġ-> ĠUnit )? , ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġoptional Ġresult Ġindex ĊĠĠĠĠĠĠĠ Ġresult Index Callback : Ġ(( Int ) Ġ-> ĠUnit )? , ĊĠĠĠ Ġ): Ġ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 () ĊĠĠĠĠĠĠĠ Ġval Ġsigma _ Q Ġ= Ġquery Std ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠQ . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ-= Ġmu _ Q ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsqrt ( it . dot () Ġ/ Ġit . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ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 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġ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 ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠP [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTODO ĠL ag Ġbounds Ġwill Ġmess Ġup Ġqt cache ? ĊĠĠĠĠ Ġ* ĠTODO Ġcontinu ity , Ġso Ġif ĠT Ġhas ĠNaN s ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED _ VALUE ") ĊĠĠĠ Ġoverride Ġ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 , ĊĠĠĠĠĠĠĠ Ġm : ĠInt , ĊĠĠĠĠĠĠĠ Ġprevious Query : ĠF 6 4 Flat Array ?, ĊĠĠĠĠĠĠĠ Ġreturn Array Slot : ĠSlot , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( T . all Ġ{ Ġit . isNot NaN () Ġ}) Ġ{ Ġ" update QT Cache Ġdoes Ġnot Ġ( yet ) Ġwork Ġif Ġit Ġcontains ĠNaN s ." Ġ} ĊĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġ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 ?, ĊĠĠĠ Ġ): Ġ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 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCompat ible Ġwith Ġcontinu ity Ġremoved Ġ( NaN s Ġin Ġ[ T ]). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġ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 ?, ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( T . any Ġ{ Ġit . isNaN () Ġ}) Ġprintln (" WARNING : Ġsl iding Mean And Std With Aggregation Ġ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 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTw . dot () Ġ== Ġsquare Buffer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ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 3 ts With Skipping . Companion . function ()` ĊĠĠĠ Ġ// ĠAccess Ġfrom ĠKotlin Ġusing Ġ` Stamp P ear son 3 ts With Skipping . function ()` ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġfunction Ġfixes Ġthe Ġcombination Ġof Ġwindow Ġskipping Ġand Ġlag Ġbound . ĊĠĠĠĠĠĠĠĠ Ġ* ĠTODO Ġthis Ġonly Ġworks Ġfor Ġstraight Ġlines , Ġnot ĠMP ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtime Series Ġthe Ġtime Ġseries Ġwith Ġ` NaN ` s ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtime Series No NaN Ġthe Ġoriginal Ġtime Ġseries Ġwithout Ġ` NaN ` s ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġwindow Size Ġthe Ġwindow Ġsize ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġend Of Slice Index Ġexclusive Ġindex Ġof Ġend Ġof Ġslice Ġof Ġtime Ġseries ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġfunction Ġthat Ġcan Ġbe Ġexecuted Ġto Ġreverse Ġthe Ġfix Ġapplied Ġto Ġ[ time Series ], Ġ` null ` Ġif Ġnothing Ġchanged . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfix Removed Continu ity With Lag Bound ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series No NaN : ĠF 6 4 Flat Array , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Of Slice Index : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Size : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinu ity Skipping : ĠContinu ity Skipping Type , ĊĠĠĠĠĠĠĠ Ġ): Ġ(() Ġ-> ĠUnit )? Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( continu ity Skipping Ġ== ĠContinu ity Skipping Type . MATRIX _ PROFILE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" unsupported ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Of Slice Index Ġ>= Ġtime Series . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġfixing Ġnecessary ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġadd Value To Left Side Of NaN s ( index In NaN s : ĠInt ): Ġ() Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfind Ġleft Ġof ĠNaN s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġj Ġ= Ġindex In NaN s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( time Series [ -- j ]. isNaN () Ġ&& Ġj Ġ> Ġ 0 ) ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series [ j ] Ġ= Ġtime Series No NaN [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Series [ j ] Ġ= ĠDouble . NaN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Series [ end Of Slice Index Ġ- Ġ 1 ]. isNaN ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Series . slice Flat ( from Ġ= Ġend Of Slice Index Ġ- Ġ 1 , Ġto Ġ= Ġtime Series . length ). all Ġ{ Ġit . isNaN () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġfixing Ġnecessary ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġadd Value To Left Side Of NaN s ( end Of Slice Index Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġend Ġof Ġslice Ġis Ġnext Ġto ĠNaN - piece Ġin Ġthe Ġmiddle Ġof Ġa Ġtime Ġseries ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġvalue ) Ġin Ġtime Series . slice Flat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ= Ġ( end Of Slice Index Ġ- Ġwindow Size ). coerce At Least ( 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġ= Ġend Of Slice Index ). with Index () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . isNaN ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġadd Value To Left Side Of NaN s ( i Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }