mimir-pip/lib/src/org/mimirdb/pip/distribution/numerical/ConstantNumber.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)
}
}