@@ -3,14 +3,12 @@ package is.hail.types.physical
33import is .hail .annotations ._
44import is .hail .asm4s ._
55import is .hail .backend .{ExecuteContext , HailStateManager }
6- import is .hail .check .{Arbitrary , Gen }
76import is .hail .expr .ir ._
87import is .hail .types .{tcoerce , Requiredness }
98import is .hail .types .physical .stypes .{SType , SValue }
109import is .hail .types .physical .stypes .concrete .SRNGState
1110import is .hail .types .virtual ._
1211import is .hail .utils ._
13- import is .hail .variant .ReferenceGenome
1412
1513import org .apache .spark .sql .Row
1614import org .json4s .CustomSerializer
@@ -31,108 +29,6 @@ class PStructSerializer extends CustomSerializer[PStruct](format =>
3129 )
3230
3331object PType {
34- def genScalar (required : Boolean ): Gen [PType ] =
35- Gen .oneOf(
36- PBoolean (required),
37- PInt32 (required),
38- PInt64 (required),
39- PFloat32 (required),
40- PFloat64 (required),
41- PCanonicalString (required),
42- PCanonicalCall (required),
43- )
44-
45- val genOptionalScalar : Gen [PType ] = genScalar(false )
46-
47- val genRequiredScalar : Gen [PType ] = genScalar(true )
48-
49- def genComplexType (required : Boolean ): Gen [PType ] = {
50- val rgDependents = ReferenceGenome .hailReferences.toArray.map(PCanonicalLocus (_, required))
51- val others = Array (PCanonicalCall (required))
52- Gen .oneOfSeq(rgDependents ++ others)
53- }
54-
55- def genFields (required : Boolean , genFieldType : Gen [PType ]): Gen [Array [PField ]] = {
56- Gen .buildableOf[Array ](
57- Gen .zip(Gen .identifier, genFieldType)
58- )
59- .filter(fields => fields.map(_._1).areDistinct())
60- .map(fields =>
61- fields
62- .iterator
63- .zipWithIndex
64- .map { case ((k, t), i) => PField (k, t, i) }
65- .toArray
66- )
67- }
68-
69- def preGenStruct (required : Boolean , genFieldType : Gen [PType ]): Gen [PStruct ] =
70- for (fields <- genFields(required, genFieldType)) yield PCanonicalStruct (fields, required)
71-
72- def preGenTuple (required : Boolean , genFieldType : Gen [PType ]): Gen [PTuple ] =
73- for (fields <- genFields(required, genFieldType))
74- yield PCanonicalTuple (required, fields.map(_.typ): _* )
75-
76- private val defaultRequiredGenRatio = 0.2
77-
78- def genStruct : Gen [PStruct ] = Gen .coin(defaultRequiredGenRatio).flatMap(preGenStruct(_, genArb))
79-
80- val genOptionalStruct : Gen [PType ] = preGenStruct(required = false , genArb)
81-
82- val genRequiredStruct : Gen [PType ] = preGenStruct(required = true , genArb)
83-
84- val genInsertableStruct : Gen [PStruct ] = Gen .coin(defaultRequiredGenRatio).flatMap(required =>
85- if (required)
86- preGenStruct(required = true , genArb)
87- else
88- preGenStruct(required = false , genOptional)
89- )
90-
91- def genSized (size : Int , required : Boolean , genPStruct : Gen [PStruct ]): Gen [PType ] =
92- if (size < 1 )
93- Gen .const(PCanonicalStruct .empty(required))
94- else if (size < 2 )
95- genScalar(required)
96- else {
97- Gen .frequency(
98- (4 , genScalar(required)),
99- (1 , genComplexType(required)),
100- (
101- 1 ,
102- genArb.map {
103- PCanonicalArray (_)
104- },
105- ),
106- (
107- 1 ,
108- genArb.map {
109- PCanonicalSet (_)
110- },
111- ),
112- (
113- 1 ,
114- genArb.map {
115- PCanonicalInterval (_)
116- },
117- ),
118- (1 , preGenTuple(required, genArb)),
119- (1 , Gen .zip(genRequired, genArb).map { case (k, v) => PCanonicalDict (k, v) }),
120- (1 , genPStruct.resize(size)),
121- )
122- }
123-
124- def preGenArb (required : Boolean , genStruct : Gen [PStruct ] = genStruct): Gen [PType ] =
125- Gen .sized(genSized(_, required, genStruct))
126-
127- def genArb : Gen [PType ] = Gen .coin(0.2 ).flatMap(preGenArb(_))
128-
129- val genOptional : Gen [PType ] = preGenArb(required = false )
130-
131- val genRequired : Gen [PType ] = preGenArb(required = true )
132-
133- val genInsertable : Gen [PStruct ] = genInsertableStruct
134-
135- implicit def arbType = Arbitrary (genArb)
13632
13733 def canonical (t : Type , required : Boolean , innerRequired : Boolean ): PType = {
13834 t match {
@@ -397,15 +293,6 @@ object PType {
397293}
398294
399295abstract class PType extends Serializable with Requiredness {
400- self =>
401-
402- def genValue (sm : HailStateManager ): Gen [Annotation ] =
403- if (required) genNonmissingValue(sm)
404- else Gen .nextCoin(0.05 ).flatMap(isEmpty =>
405- if (isEmpty) Gen .const(null ) else genNonmissingValue(sm)
406- )
407-
408- def genNonmissingValue (sm : HailStateManager ): Gen [Annotation ] = virtualType.genNonmissingValue(sm)
409296
410297 def virtualType : Type
411298
0 commit comments