64 lines
1.7 KiB
Scala
64 lines
1.7 KiB
Scala
package org.mimirdb.pip.distribution.numerical
|
|
|
|
import scala.util.Random
|
|
import java.io.Serializable
|
|
import java.io.ObjectOutputStream
|
|
import java.io.ObjectInputStream
|
|
import org.apache.commons.math3.special.Erf
|
|
import org.apache.spark.sql.Column
|
|
import org.apache.spark.sql.types.DoubleType
|
|
import org.mimirdb.pip.SampleParams
|
|
import org.mimirdb.pip.udt.UnivariateDistribution
|
|
import org.mimirdb.pip.udt.UnivariateDistributionType
|
|
import org.mimirdb.pip.udt.UnivariateDistributionConstructor
|
|
import org.apache.spark.sql.catalyst.expressions.Expression
|
|
|
|
/**
|
|
* The Uniform distribution
|
|
*
|
|
*/
|
|
object ConstantNumber
|
|
extends NumericalDistributionFamily
|
|
with CDFSupported
|
|
with ICDFSupported
|
|
{
|
|
def sample(params: Any, random: scala.util.Random): Double =
|
|
params.asInstanceOf[Double]
|
|
|
|
def serialize(in: ObjectOutputStream, params: Any): Unit =
|
|
{
|
|
in.writeDouble(params.asInstanceOf[Double])
|
|
}
|
|
|
|
def deserialize(in: ObjectInputStream): Double =
|
|
in.readDouble()
|
|
|
|
def min(params: Any) = params.asInstanceOf[Double]
|
|
def max(params: Any) = params.asInstanceOf[Double]
|
|
|
|
def cdf(value: Double, params: Any): Double =
|
|
{
|
|
val p = params.asInstanceOf[Double]
|
|
if(value < p) { 0.0 }
|
|
else { 1.0 }
|
|
}
|
|
|
|
def icdf(value: Double, params: Any): Double =
|
|
value.asInstanceOf[Double]
|
|
|
|
def describe(params: Any): String =
|
|
s"{ $params }"
|
|
|
|
case class Constructor(args: Seq[Expression])
|
|
extends UnivariateDistributionConstructor
|
|
{
|
|
def family = ConstantNumber
|
|
def params(values: Seq[Any]) =
|
|
values(0).asInstanceOf[Double]
|
|
|
|
def withNewChildrenInternal(newChildren: IndexedSeq[Expression]) =
|
|
copy(args = newChildren)
|
|
}
|
|
|
|
}
|