Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[query] Move is.hail.check to test code #14801

Open
wants to merge 1 commit into
base: ehigham/ctx-coercer-cache
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions hail/hail/src/is/hail/types/physical/PArray.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package is.hail.types.physical

import is.hail.annotations.Annotation
import is.hail.backend.HailStateManager
import is.hail.check.Gen
import is.hail.types.virtual.TArray

trait PArrayIterator {
Expand All @@ -17,7 +14,4 @@ abstract class PArray extends PArrayBackedContainer {
final protected[physical] val elementRequired = elementType.required

def elementIterator(aoff: Long, length: Int): PArrayIterator

override def genNonmissingValue(sm: HailStateManager): Gen[IndexedSeq[Annotation]] =
Gen.buildableOf[Array](elementType.genValue(sm)).map(x => x: IndexedSeq[Annotation])
}
9 changes: 1 addition & 8 deletions hail/hail/src/is/hail/types/physical/PBaseStruct.scala
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package is.hail.types.physical

import is.hail.annotations._
import is.hail.asm4s.{Code, _}
import is.hail.asm4s._
import is.hail.backend.HailStateManager
import is.hail.check.Gen
import is.hail.expr.ir.EmitCodeBuilder
import is.hail.types.physical.stypes.interfaces.SBaseStructValue
import is.hail.utils._
Expand Down Expand Up @@ -144,10 +143,4 @@ abstract class PBaseStruct extends PType {
override def loadCheapSCode(cb: EmitCodeBuilder, addr: Code[Long]): SBaseStructValue

override lazy val containsPointers: Boolean = types.exists(_.containsPointers)

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] =
if (types.isEmpty) {
Gen.const(Annotation.empty)
} else
Gen.uniformSequence(types.map(t => t.genValue(sm))).map(a => Annotation(a: _*))
}
6 changes: 0 additions & 6 deletions hail/hail/src/is/hail/types/physical/PDict.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package is.hail.types.physical

import is.hail.annotations._
import is.hail.backend.HailStateManager
import is.hail.check.Gen
import is.hail.types.physical.stypes.interfaces.SContainer
import is.hail.types.virtual.TDict

Expand All @@ -15,7 +12,4 @@ abstract class PDict extends PContainer {
def sType: SContainer

def elementType: PStruct

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] =
Gen.buildableOf2[Map](Gen.zip(keyType.genValue(sm), valueType.genValue(sm)))
}
6 changes: 0 additions & 6 deletions hail/hail/src/is/hail/types/physical/PSet.scala
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
package is.hail.types.physical

import is.hail.annotations._
import is.hail.backend.HailStateManager
import is.hail.check.Gen
import is.hail.types.virtual.TSet

abstract class PSet extends PContainer {
lazy val virtualType: TSet = TSet(elementType.virtualType)

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] =
Gen.buildableOf[Set](elementType.genValue(sm))
}
113 changes: 0 additions & 113 deletions hail/hail/src/is/hail/types/physical/PType.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,12 @@ package is.hail.types.physical
import is.hail.annotations._
import is.hail.asm4s._
import is.hail.backend.{ExecuteContext, HailStateManager}
import is.hail.check.{Arbitrary, Gen}
import is.hail.expr.ir._
import is.hail.types.{tcoerce, Requiredness}
import is.hail.types.physical.stypes.{SType, SValue}
import is.hail.types.physical.stypes.concrete.SRNGState
import is.hail.types.virtual._
import is.hail.utils._
import is.hail.variant.ReferenceGenome

import org.apache.spark.sql.Row
import org.json4s.CustomSerializer
Expand All @@ -31,108 +29,6 @@ class PStructSerializer extends CustomSerializer[PStruct](format =>
)

object PType {
def genScalar(required: Boolean): Gen[PType] =
Gen.oneOf(
PBoolean(required),
PInt32(required),
PInt64(required),
PFloat32(required),
PFloat64(required),
PCanonicalString(required),
PCanonicalCall(required),
)

val genOptionalScalar: Gen[PType] = genScalar(false)

val genRequiredScalar: Gen[PType] = genScalar(true)

def genComplexType(required: Boolean): Gen[PType] = {
val rgDependents = ReferenceGenome.hailReferences.toArray.map(PCanonicalLocus(_, required))
val others = Array(PCanonicalCall(required))
Gen.oneOfSeq(rgDependents ++ others)
}

def genFields(required: Boolean, genFieldType: Gen[PType]): Gen[Array[PField]] = {
Gen.buildableOf[Array](
Gen.zip(Gen.identifier, genFieldType)
)
.filter(fields => fields.map(_._1).areDistinct())
.map(fields =>
fields
.iterator
.zipWithIndex
.map { case ((k, t), i) => PField(k, t, i) }
.toArray
)
}

def preGenStruct(required: Boolean, genFieldType: Gen[PType]): Gen[PStruct] =
for (fields <- genFields(required, genFieldType)) yield PCanonicalStruct(fields, required)

def preGenTuple(required: Boolean, genFieldType: Gen[PType]): Gen[PTuple] =
for (fields <- genFields(required, genFieldType))
yield PCanonicalTuple(required, fields.map(_.typ): _*)

private val defaultRequiredGenRatio = 0.2

def genStruct: Gen[PStruct] = Gen.coin(defaultRequiredGenRatio).flatMap(preGenStruct(_, genArb))

val genOptionalStruct: Gen[PType] = preGenStruct(required = false, genArb)

val genRequiredStruct: Gen[PType] = preGenStruct(required = true, genArb)

val genInsertableStruct: Gen[PStruct] = Gen.coin(defaultRequiredGenRatio).flatMap(required =>
if (required)
preGenStruct(required = true, genArb)
else
preGenStruct(required = false, genOptional)
)

def genSized(size: Int, required: Boolean, genPStruct: Gen[PStruct]): Gen[PType] =
if (size < 1)
Gen.const(PCanonicalStruct.empty(required))
else if (size < 2)
genScalar(required)
else {
Gen.frequency(
(4, genScalar(required)),
(1, genComplexType(required)),
(
1,
genArb.map {
PCanonicalArray(_)
},
),
(
1,
genArb.map {
PCanonicalSet(_)
},
),
(
1,
genArb.map {
PCanonicalInterval(_)
},
),
(1, preGenTuple(required, genArb)),
(1, Gen.zip(genRequired, genArb).map { case (k, v) => PCanonicalDict(k, v) }),
(1, genPStruct.resize(size)),
)
}

def preGenArb(required: Boolean, genStruct: Gen[PStruct] = genStruct): Gen[PType] =
Gen.sized(genSized(_, required, genStruct))

def genArb: Gen[PType] = Gen.coin(0.2).flatMap(preGenArb(_))

val genOptional: Gen[PType] = preGenArb(required = false)

val genRequired: Gen[PType] = preGenArb(required = true)

val genInsertable: Gen[PStruct] = genInsertableStruct

implicit def arbType = Arbitrary(genArb)

def canonical(t: Type, required: Boolean, innerRequired: Boolean): PType = {
t match {
Expand Down Expand Up @@ -397,15 +293,6 @@ object PType {
}

abstract class PType extends Serializable with Requiredness {
self =>

def genValue(sm: HailStateManager): Gen[Annotation] =
if (required) genNonmissingValue(sm)
else Gen.nextCoin(0.05).flatMap(isEmpty =>
if (isEmpty) Gen.const(null) else genNonmissingValue(sm)
)

def genNonmissingValue(sm: HailStateManager): Gen[Annotation] = virtualType.genNonmissingValue(sm)

def virtualType: Type

Expand Down
4 changes: 0 additions & 4 deletions hail/hail/src/is/hail/types/virtual/TArray.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package is.hail.types.virtual

import is.hail.annotations.{Annotation, ExtendedOrdering}
import is.hail.backend.HailStateManager
import is.hail.check.Gen

import org.json4s.jackson.JsonMethods

Expand Down Expand Up @@ -43,9 +42,6 @@ final case class TArray(elementType: Type) extends TContainer {

override def str(a: Annotation): String = JsonMethods.compact(export(a))

override def genNonmissingValue(sm: HailStateManager): Gen[IndexedSeq[Annotation]] =
Gen.buildableOf[Array](elementType.genValue(sm)).map(x => x: IndexedSeq[Annotation])

def mkOrdering(sm: HailStateManager, missingEqual: Boolean): ExtendedOrdering =
ExtendedOrdering.iterableOrdering(elementType.ordering(sm), missingEqual)

Expand Down
13 changes: 0 additions & 13 deletions hail/hail/src/is/hail/types/virtual/TBaseStruct.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package is.hail.types.virtual

import is.hail.annotations._
import is.hail.backend.HailStateManager
import is.hail.check.Gen
import is.hail.utils._

import org.apache.spark.sql.Row
Expand Down Expand Up @@ -95,18 +94,6 @@ abstract class TBaseStruct extends Type {

override def str(a: Annotation): String = JsonMethods.compact(export(a))

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] = {
if (types.isEmpty) {
Gen.const(Annotation.empty)
} else
Gen.size.flatMap(fuel =>
if (types.length > fuel)
Gen.uniformSequence(types.map(t => Gen.const(null))).map(a => Annotation(a: _*))
else
Gen.uniformSequence(types.map(t => t.genValue(sm))).map(a => Annotation(a: _*))
)
}

override def valuesSimilar(a1: Annotation, a2: Annotation, tolerance: Double, absolute: Boolean)
: Boolean =
a1 == a2 || (a1 != null && a2 != null
Expand Down
5 changes: 0 additions & 5 deletions hail/hail/src/is/hail/types/virtual/TBinary.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,12 @@ package is.hail.types.virtual

import is.hail.annotations._
import is.hail.backend.HailStateManager
import is.hail.check.Arbitrary._
import is.hail.check.Gen

case object TBinary extends Type {
def _toPretty = "Binary"

def _typeCheck(a: Any): Boolean = a.isInstanceOf[Array[Byte]]

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] =
Gen.buildableOf(arbitrary[Byte])

def mkOrdering(sm: HailStateManager, _missingEqual: Boolean = true): ExtendedOrdering =
ExtendedOrdering.iterableOrdering(new ExtendedOrdering {
val missingEqual = _missingEqual
Expand Down
4 changes: 0 additions & 4 deletions hail/hail/src/is/hail/types/virtual/TBoolean.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package is.hail.types.virtual

import is.hail.annotations._
import is.hail.backend.HailStateManager
import is.hail.check.Arbitrary._
import is.hail.check.Gen

case object TBoolean extends Type {
def _toPretty = "Boolean"
Expand All @@ -17,8 +15,6 @@ case object TBoolean extends Type {

def parse(s: String): Annotation = s.toBoolean

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] = arbitrary[Boolean]

override def mkOrdering(sm: HailStateManager, missingEqual: Boolean): ExtendedOrdering =
ExtendedOrdering.extendToNull(implicitly[Ordering[Boolean]], missingEqual)

Expand Down
3 changes: 0 additions & 3 deletions hail/hail/src/is/hail/types/virtual/TCall.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package is.hail.types.virtual

import is.hail.annotations._
import is.hail.backend.HailStateManager
import is.hail.check.Gen
import is.hail.variant.Call

case object TCall extends Type {
Expand All @@ -15,8 +14,6 @@ case object TCall extends Type {

def _typeCheck(a: Any): Boolean = a.isInstanceOf[Int]

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] = Call.genNonmissingValue

override def str(a: Annotation): String =
if (a == null) "NA" else Call.toString(a.asInstanceOf[Call])

Expand Down
4 changes: 0 additions & 4 deletions hail/hail/src/is/hail/types/virtual/TDict.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package is.hail.types.virtual

import is.hail.annotations.{Annotation, ExtendedOrdering}
import is.hail.backend.HailStateManager
import is.hail.check.Gen
import is.hail.utils._

import org.json4s.jackson.JsonMethods
Expand Down Expand Up @@ -59,9 +58,6 @@ final case class TDict(keyType: Type, valueType: Type) extends TContainer {

override def str(a: Annotation): String = JsonMethods.compact(export(a))

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] =
Gen.buildableOf2[Map](Gen.zip(keyType.genValue(sm), valueType.genValue(sm)))

override def valuesSimilar(a1: Annotation, a2: Annotation, tolerance: Double, absolute: Boolean)
: Boolean =
a1 == a2 || (a1 != null && a2 != null &&
Expand Down
5 changes: 0 additions & 5 deletions hail/hail/src/is/hail/types/virtual/TFloat32.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package is.hail.types.virtual

import is.hail.annotations._
import is.hail.backend.HailStateManager
import is.hail.check.Arbitrary._
import is.hail.check.Gen
import is.hail.utils._

case object TFloat32 extends TNumeric {
Expand All @@ -19,9 +17,6 @@ case object TFloat32 extends TNumeric {
override def str(a: Annotation): String =
if (a == null) "NA" else "%.5e".format(a.asInstanceOf[Float])

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] =
arbitrary[Double].map(_.toFloat)

override def valuesSimilar(a1: Annotation, a2: Annotation, tolerance: Double, absolute: Boolean)
: Boolean =
a1 == a2 || (a1 != null && a2 != null && {
Expand Down
4 changes: 0 additions & 4 deletions hail/hail/src/is/hail/types/virtual/TFloat64.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package is.hail.types.virtual

import is.hail.annotations._
import is.hail.backend.HailStateManager
import is.hail.check.Arbitrary._
import is.hail.check.Gen
import is.hail.utils._

case object TFloat64 extends TNumeric {
Expand All @@ -19,8 +17,6 @@ case object TFloat64 extends TNumeric {
override def str(a: Annotation): String =
if (a == null) "NA" else "%.5e".format(a.asInstanceOf[Double])

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] = arbitrary[Double]

override def valuesSimilar(a1: Annotation, a2: Annotation, tolerance: Double, absolute: Boolean)
: Boolean =
a1 == a2 || (a1 != null && a2 != null && {
Expand Down
4 changes: 0 additions & 4 deletions hail/hail/src/is/hail/types/virtual/TInt32.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package is.hail.types.virtual

import is.hail.annotations._
import is.hail.backend.HailStateManager
import is.hail.check.Arbitrary._
import is.hail.check.Gen

case object TInt32 extends TIntegral {
def _toPretty = "Int32"
Expand All @@ -13,8 +11,6 @@ case object TInt32 extends TIntegral {

def _typeCheck(a: Any): Boolean = a.isInstanceOf[Int]

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] = arbitrary[Int]

override def mkOrdering(sm: HailStateManager, missingEqual: Boolean): ExtendedOrdering =
ExtendedOrdering.extendToNull(implicitly[Ordering[Int]], missingEqual)

Expand Down
4 changes: 0 additions & 4 deletions hail/hail/src/is/hail/types/virtual/TInt64.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package is.hail.types.virtual

import is.hail.annotations._
import is.hail.backend.HailStateManager
import is.hail.check.Arbitrary._
import is.hail.check.Gen

case object TInt64 extends TIntegral {
def _toPretty = "Int64"
Expand All @@ -13,8 +11,6 @@ case object TInt64 extends TIntegral {

def _typeCheck(a: Any): Boolean = a.isInstanceOf[Long]

override def genNonmissingValue(sm: HailStateManager): Gen[Annotation] = arbitrary[Long]

override def mkOrdering(sm: HailStateManager, missingEqual: Boolean): ExtendedOrdering =
ExtendedOrdering.extendToNull(implicitly[Ordering[Long]], missingEqual)

Expand Down
Loading