Skip to content

Commit

Permalink
[query] Move is.hail.check to test code
Browse files Browse the repository at this point in the history
  • Loading branch information
ehigham committed Jan 29, 2025
1 parent 8330580 commit db88046
Show file tree
Hide file tree
Showing 47 changed files with 647 additions and 610 deletions.
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

0 comments on commit db88046

Please sign in to comment.