package Ġorg . vit riv r . cott ont ail . math . knn . kernels . binary . weighted Ċ Ċ import Ġorg . vit riv r . cott ont ail . database . queries . planning . cost . Cost Ċ import Ġorg . vit riv r . cott ont ail . math . knn . basics . Distance Kernel Ċ import Ġorg . vit riv r . cott ont ail . math . knn . basics . Weighted Kernel Ċ import Ġorg . vit riv r . cott ont ail . math . knn . kernels . Kernel NotFoundException Ċ import Ġorg . vit riv r . cott ont ail . model . values .* Ċ import Ġorg . vit riv r . cott ont ail . model . values . types . Real Vector Value Ċ import Ġorg . vit riv r . cott ont ail . model . values . types . Vector Value Ċ import Ġkotlin . math . pow Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Distance Kernel ] Ġimplementation Ġto Ġcalculate Ġthe ĠCh i ^ 2 Ġdistance Ġbetween Ġa Ġ[ query ] Ġand Ġa Ġseries Ġof Ġ[ Vector Value ] s . Ċ Ġ* Ċ Ġ* Ġ@ author ĠR alph ĠG asser Ċ Ġ* Ġ@ version Ġ 1 . 0 . 0 Ċ Ġ*/ Ċ sealed Ġclass ĠCh is quared Kernel < T Ġ: ĠReal Vector Value < *> >( final Ġoverride Ġval Ġquery : ĠT , Ġfinal Ġoverride Ġval Ġweight : ĠT ) Ġ: ĠDistance Kernel < T >, ĠWeight ed Kernel < T > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Ch is quared Kernel ] Ġimplementation Ġfor Ġthe Ġgiven Ġ[ query ] Ġand Ġ[ weight ] Ġ[ Vector Value ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġquery ĠThe Ġ[ Real Vector Value ] Ġto Ġreturn Ġthe Ġ[ Ch is quared Kernel ] Ġfor . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġweight ĠThe Ġ[ Real Vector Value ] Ġto Ġreturn Ġthe Ġ[ Ch is quared Kernel ] Ġfor . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ[ Ch is quared Kernel ] ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠKernel NotFoundException ĠIf Ġno Ġsupported Ġkernel Ġcould Ġbe Ġfound . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġkernel ( query : ĠReal Vector Value <* >, Ġweight : ĠReal Vector Value <* >) Ġ= Ġwhen Ġ( query ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDouble Vector Value Ġ-> ĠCh is quared Kernel . Double Vector ( query , Ġweight Ġas ĠDouble Vector Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFloat Vector Value Ġ-> ĠCh is quared Kernel . Float Vector ( query , Ġweight Ġas ĠFloat Vector Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Vector Value Ġ-> ĠCh is quared Kernel . Int Vector ( query , Ġweight Ġas ĠInt Vector Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Vector Value Ġ-> ĠCh is quared Kernel . Long Vector ( query , Ġweight Ġas ĠLong Vector Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠKernel NotFoundException ( Ch is quared Kernel :: class . java . simple Name , Ġquery ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCalculates Ġthe Ġcost Ġof Ġapplying Ġa Ġ[ Ch is quared Kernel ] Ġof Ġdimension Ġ[ d ] Ġto Ġa Ġvector . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġd ĠThe Ġdimension Ġused Ġfor Ġcost Ġcalculation . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠEst imated Ġcost . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcost ( d : ĠInt ) Ġ= Ġd Ġ* Ġ( 6 . 0 f Ġ* ĠCost . CO ST _ FLO P Ġ+ Ġ 5 . 0 f Ġ* ĠCost . CO ST _ MEMORY _ ACCESS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠThe Ġcost Ġof Ġapplying Ġthis Ġ[ Ch is quared Kernel ] Ġto Ġa Ġsingle Ġ[ Vector Value ]. Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġcost : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcost ( this . d ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Ch is quared Kernel ] Ġfor Ġa Ġ[ Double Vector Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠDouble Vector ( query : ĠDouble Vector Value , Ġweight : ĠDouble Vector Value ) Ġ: ĠCh is quared Kernel < Double Vector Value >( query , Ġweight ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( vector : ĠDouble Vector Value ): ĠDouble Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġthis . query . data . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġ((( this . query . data [ i ] Ġ- Ġvector . data [ i ]). pow ( 2 )) Ġ/ Ġ( this . query . data [ i ] Ġ+ Ġvector . data [ i ])) Ġ* Ġthis . weight . data [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDouble Value ( sum ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Ch is quared Kernel ] Ġfor Ġa Ġ[ Float Vector Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠFloat Vector ( query : ĠFloat Vector Value , Ġweight : ĠFloat Vector Value ) Ġ: ĠCh is quared Kernel < Float Vector Value >( query , Ġweight ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( vector : ĠFloat Vector Value ): ĠDouble Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġthis . query . data . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġ((( this . query . data [ i ] Ġ- Ġvector . data [ i ]). pow ( 2 )) Ġ/ Ġ( this . query . data [ i ] Ġ+ Ġvector . data [ i ])) Ġ* Ġthis . weight . data [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDouble Value ( sum ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Ch is quared Kernel ] Ġfor Ġa Ġ[ Long Vector Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠLong Vector ( query : ĠLong Vector Value , Ġweight : ĠLong Vector Value ) Ġ: ĠCh is quared Kernel < Long Vector Value >( query , Ġweight ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( vector : ĠLong Vector Value ): ĠDouble Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġthis . query . data . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġ((( this . query . data [ i ] Ġ- Ġvector . data [ i ]). toDouble (). pow ( 2 )) Ġ/ Ġ( this . query . data [ i ] Ġ+ Ġvector . data [ i ])) Ġ* Ġthis . weight . data [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDouble Value ( sum ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Ch is quared Kernel ] Ġfor Ġa Ġ[ Int Vector Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠInt Vector ( query : ĠInt Vector Value , Ġweight : ĠInt Vector Value ) Ġ: ĠCh is quared Kernel < Int Vector Value >( query , Ġweight ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( vector : ĠInt Vector Value ): ĠDouble Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġthis . query . data . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġ((( this . query . data [ i ] Ġ- Ġvector . data [ i ]). toDouble (). pow ( 2 )) Ġ/ Ġ( this . query . data [ i ] Ġ+ Ġvector . data [ i ])) Ġ* Ġthis . weight . data [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDouble Value ( sum ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }