/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 ĠK Math Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġspace . k science . k math . stat Ċ Ċ import Ġspace . k science . k math . chains . Chain Ċ import Ġspace . k science . k math . chains . Constant Chain Ċ import Ġspace . k science . k math . chains . map Ċ import Ġspace . k science . k math . chains . zip Ċ import Ġspace . k science . k math . operations . Group Ċ import Ġspace . k science . k math . operations . Scale Operations Ċ import Ġspace . k science . k math . operations . invoke Ċ Ċ /** Ċ Ġ* ĠImplements Ġ[ Sampler ] Ġby Ġsampling Ġonly Ġcertain Ġ[ value ]. Ċ Ġ* Ċ Ġ* Ġ@ property Ġvalue Ġthe Ġvalue Ġto Ġsample . Ċ Ġ*/ Ċ public Ġclass ĠConstant Sampler < out ĠT Ġ: ĠAny >( public Ġval Ġvalue : ĠT ) Ġ: ĠSampler < T > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsample ( generator : ĠRandom Generator ): ĠChain < T > Ġ= ĠConstant Chain ( value ) Ċ } Ċ Ċ /** Ċ Ġ* ĠImplements Ġ[ Sampler ] Ġby Ġdeleg ating Ġsampling Ġto Ġvalue Ġof Ġ[ chain Builder ]. Ċ Ġ* Ċ Ġ* Ġ@ property Ġchain Builder Ġthe Ġprovider Ġof Ġ[ Chain ]. Ċ Ġ*/ Ċ public Ġclass ĠBasic Sampler < out ĠT Ġ: ĠAny >( public Ġval Ġchain Builder : Ġ( Random Generator ) Ġ-> ĠChain < T >) Ġ: ĠSampler < T > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsample ( generator : ĠRandom Generator ): ĠChain < T > Ġ= Ġchain Builder ( generator ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġspace Ġof Ġsamp lers . ĠAllows Ġperforming Ġsimple Ġoperations Ġon Ġdistributions . Ċ Ġ* Ċ Ġ* Ġ@ property Ġalgebra Ġthe Ġspace Ġto Ġprovide Ġaddition Ġand Ġscalar Ġmultiplication Ġfor Ġ[ T ]. Ċ Ġ*/ Ċ public Ġclass ĠSampler Space < T Ġ: ĠAny , Ġout ĠS >( public Ġval Ġalgebra : ĠS ) Ġ: ĠGroup < Sampler < T >>, ĊĠĠĠ ĠScale Operations < Sampler < T >> Ġwhere ĠS Ġ: ĠGroup < T >, ĠS Ġ: ĠScale Operations < T > Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġzero : ĠSampler < T > Ġ= ĠConstant Sampler ( algebra . zero ) ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( left : ĠSampler < T >, Ġright : ĠSampler < T >): ĠSampler < T > Ġ= ĠBasic Sampler Ġ{ Ġgenerator Ġ-> ĊĠĠĠĠĠĠĠ Ġleft . sample ( generator ). zip ( right . sample ( generator )) Ġ{ Ġa Value , Ġb Value Ġ-> Ġalgebra Ġ{ Ġa Value Ġ+ Ġb Value Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġscale ( a : ĠSampler < T >, Ġvalue : ĠDouble ): ĠSampler < T > Ġ= ĠBasic Sampler Ġ{ Ġgenerator Ġ-> ĊĠĠĠĠĠĠĠ Ġa . sample ( generator ). map Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalgebra Ġ{ Ġa Ġ* Ġvalue Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSampler < T >. unary Minus (): ĠSampler < T > Ġ= Ġscale ( this , Ġ- 1 . 0 ) Ċ } Ċ