Error running Hail tests

Hopefully this is the right place to ask this, but let me know if there is a better location.

I am trying to put in my first PR for some minor changes to the new Hail VDS sex imputation method, but I am running into some errors during testing that are likely just because I installed something incorrectly.

Here are the steps I took:

I did this, but within PyCharm:

git clone https://github.com/hail-is/hail.git

Made my changes in PyCharm and added some small test code. Then I tried to run the tests by doing the following:

conda activate hail
python --version

Python 3.7.11

brew install --cask adoptopenjdk8
export PATH="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin:$PATH"
export JAVA_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/"
java -version

openjdk version “1.8.0_292”
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)

cd hail/hail
make cloud_base=gs://gnomad-tmp/hailctl/dataproc/jgoodric install HAIL_COMPILE_NATIVES=1 SCALA_VERSION=2.12.13 SPARK_VERSION=3.1.2
make install-dev-deps
make -j8 test

For many of the tests I get this error:

hail.utils.java.FatalError: ClassCastException: java.lang.reflect.Constructor cannot be cast to is.hail.types.encoded.EncoderAsmFunction

Java stack trace:
java.lang.ClassCastException: java.lang.reflect.Constructor cannot be cast to is.hail.types.encoded.EncoderAsmFunction
	at is.hail.io.CompiledEncoder.<init>(Encoder.scala:30)
	at is.hail.types.encoded.EType.$anonfun$buildEncoder$1(EType.scala:33)
	at is.hail.io.TypedCodecSpec.$anonfun$buildEncoder$1(TypedCodecSpec.scala:25)
	at is.hail.expr.ir.EmitClassBuilder.encodeLiterals(EmitClassBuilder.scala:315)
	at is.hail.expr.ir.EmitClassBuilder.resultWithIndex(EmitClassBuilder.scala:676)
	at is.hail.expr.ir.WrappedEmitClassBuilder.resultWithIndex(EmitClassBuilder.scala:167)
	at is.hail.expr.ir.WrappedEmitClassBuilder.resultWithIndex$(EmitClassBuilder.scala:167)
	at is.hail.expr.ir.EmitFunctionBuilder.resultWithIndex(EmitClassBuilder.scala:1109)
	at is.hail.expr.ir.Emit.$anonfun$emitI$225(Emit.scala:2334)
	at is.hail.expr.ir.IEmitCodeGen.map(Emit.scala:334)
	at is.hail.expr.ir.Emit.emitI(Emit.scala:2275)
	at is.hail.expr.ir.Emit.emitI$2(Emit.scala:780)
	at is.hail.expr.ir.Emit.$anonfun$emitI$219(Emit.scala:2232)
	at is.hail.expr.ir.Emit.$anonfun$emitI$219$adapted(Emit.scala:2231)
	at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:75)
	at is.hail.expr.ir.Emit.emitI(Emit.scala:2231)
	at is.hail.expr.ir.Emit.$anonfun$emitSplitMethod$1(Emit.scala:575)
	at is.hail.expr.ir.Emit.$anonfun$emitSplitMethod$1$adapted(Emit.scala:573)
	at is.hail.expr.ir.EmitCodeBuilder$.scoped(EmitCodeBuilder.scala:18)
	at is.hail.expr.ir.EmitCodeBuilder$.scopedVoid(EmitCodeBuilder.scala:28)
	at is.hail.expr.ir.EmitMethodBuilder.voidWithBuilder(EmitClassBuilder.scala:1042)
	at is.hail.expr.ir.Emit.emitSplitMethod(Emit.scala:573)
	at is.hail.expr.ir.Emit.emitInSeparateMethod(Emit.scala:590)
	at is.hail.expr.ir.Emit.$anonfun$emit$1(Emit.scala:2470)
	at is.hail.expr.ir.EmitCode$.fromI(Emit.scala:429)
	at is.hail.expr.ir.Emit.emit(Emit.scala:2470)
	at is.hail.expr.ir.Emit.emit$2(Emit.scala:2475)
	at is.hail.expr.ir.Emit.$anonfun$emit$6(Emit.scala:2501)
	at is.hail.expr.ir.EmitCode$.fromI(Emit.scala:429)
	at is.hail.expr.ir.Emit.emit(Emit.scala:2500)
	at is.hail.expr.ir.Emit.emitFallback$1(Emit.scala:792)
	at is.hail.expr.ir.Emit.emitI(Emit.scala:2399)
	at is.hail.expr.ir.Emit.emitI$3(Emit.scala:2478)
	at is.hail.expr.ir.Emit.$anonfun$emit$7(Emit.scala:2503)
	at is.hail.expr.ir.EmitCodeBuilder.withScopedMaybeStreamValue(EmitCodeBuilder.scala:182)
	at is.hail.expr.ir.Emit.$anonfun$emit$6(Emit.scala:2502)
	at is.hail.expr.ir.EmitCode$.fromI(Emit.scala:429)
	at is.hail.expr.ir.Emit.emit(Emit.scala:2500)
	at is.hail.expr.ir.Emit.emitFallback$1(Emit.scala:792)
	at is.hail.expr.ir.Emit.emitI(Emit.scala:2399)
	at is.hail.expr.ir.Emit.$anonfun$emitSplitMethod$1(Emit.scala:575)
	at is.hail.expr.ir.Emit.$anonfun$emitSplitMethod$1$adapted(Emit.scala:573)
	at is.hail.expr.ir.EmitCodeBuilder$.scoped(EmitCodeBuilder.scala:18)
	at is.hail.expr.ir.EmitCodeBuilder$.scopedVoid(EmitCodeBuilder.scala:28)
	at is.hail.expr.ir.EmitMethodBuilder.voidWithBuilder(EmitClassBuilder.scala:1042)
	at is.hail.expr.ir.Emit.emitSplitMethod(Emit.scala:573)
	at is.hail.expr.ir.Emit.emitInSeparateMethod(Emit.scala:590)
	at is.hail.expr.ir.Emit.emitI(Emit.scala:774)
	at is.hail.expr.ir.Emit.emitInNewBuilder$1(Emit.scala:783)
	at is.hail.expr.ir.Emit.$anonfun$emitI$29(Emit.scala:931)
	at is.hail.expr.ir.EmitCode$.fromI(Emit.scala:429)
	at is.hail.expr.ir.Emit.$anonfun$emitI$28(Emit.scala:931)
	at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:286)
	at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)
	at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)
	at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)
	at scala.collection.TraversableLike.map(TraversableLike.scala:286)
	at scala.collection.TraversableLike.map$(TraversableLike.scala:279)
	at scala.collection.AbstractTraversable.map(Traversable.scala:108)
	at is.hail.expr.ir.Emit.emitI(Emit.scala:930)
	at is.hail.expr.ir.Emit$.$anonfun$apply$5(Emit.scala:78)
	at is.hail.expr.ir.EmitCodeBuilder$.scoped(EmitCodeBuilder.scala:18)
	at is.hail.expr.ir.EmitCodeBuilder$.scopedCode(EmitCodeBuilder.scala:23)
	at is.hail.expr.ir.EmitMethodBuilder.emitWithBuilder(EmitClassBuilder.scala:1040)
	at is.hail.expr.ir.WrappedEmitMethodBuilder.emitWithBuilder(EmitClassBuilder.scala:1093)
	at is.hail.expr.ir.WrappedEmitMethodBuilder.emitWithBuilder$(EmitClassBuilder.scala:1093)
	at is.hail.expr.ir.EmitFunctionBuilder.emitWithBuilder(EmitClassBuilder.scala:1109)
	at is.hail.expr.ir.Emit$.apply(Emit.scala:75)
	at is.hail.expr.ir.Compile$.apply(Compile.scala:77)
	at is.hail.expr.ir.CompileAndEvaluate$.$anonfun$_apply$4(CompileAndEvaluate.scala:61)
	at is.hail.utils.ExecutionTimer.time(ExecutionTimer.scala:81)
	at is.hail.expr.ir.CompileAndEvaluate$._apply(CompileAndEvaluate.scala:61)
	at is.hail.expr.ir.CompileAndEvaluate$.evalToIR(CompileAndEvaluate.scala:30)
	at is.hail.expr.ir.LowerOrInterpretNonCompilable$.evaluate$1(LowerOrInterpretNonCompilable.scala:30)
	at is.hail.expr.ir.LowerOrInterpretNonCompilable$.rewrite$1(LowerOrInterpretNonCompilable.scala:67)
	at is.hail.expr.ir.LowerOrInterpretNonCompilable$.rewrite$1(LowerOrInterpretNonCompilable.scala:53)
	at is.hail.expr.ir.LowerOrInterpretNonCompilable$.apply(LowerOrInterpretNonCompilable.scala:72)
	at is.hail.expr.ir.lowering.LowerOrInterpretNonCompilablePass$.transform(LoweringPass.scala:69)
	at is.hail.expr.ir.lowering.LoweringPass.$anonfun$apply$3(LoweringPass.scala:16)
	at is.hail.utils.ExecutionTimer.time(ExecutionTimer.scala:81)
	at is.hail.expr.ir.lowering.LoweringPass.$anonfun$apply$1(LoweringPass.scala:16)
	at is.hail.utils.ExecutionTimer.time(ExecutionTimer.scala:81)
	at is.hail.expr.ir.lowering.LoweringPass.apply(LoweringPass.scala:14)
	at is.hail.expr.ir.lowering.LoweringPass.apply$(LoweringPass.scala:13)
	at is.hail.expr.ir.lowering.LowerOrInterpretNonCompilablePass$.apply(LoweringPass.scala:64)
	at is.hail.expr.ir.lowering.LoweringPipeline.$anonfun$apply$1(LoweringPipeline.scala:15)
	at is.hail.expr.ir.lowering.LoweringPipeline.$anonfun$apply$1$adapted(LoweringPipeline.scala:13)
	at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:36)
	at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:33)
	at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:38)
	at is.hail.expr.ir.lowering.LoweringPipeline.apply(LoweringPipeline.scala:13)
	at is.hail.expr.ir.CompileAndEvaluate$._apply(CompileAndEvaluate.scala:47)
	at is.hail.backend.spark.SparkBackend._execute(SparkBackend.scala:383)
	at is.hail.backend.spark.SparkBackend.$anonfun$executeLiteral$2(SparkBackend.scala:394)
	at is.hail.backend.ExecuteContext$.$anonfun$scoped$3(ExecuteContext.scala:48)
	at is.hail.utils.package$.using(package.scala:638)
	at is.hail.backend.ExecuteContext$.$anonfun$scoped$2(ExecuteContext.scala:48)
	at is.hail.utils.package$.using(package.scala:638)
	at is.hail.annotations.RegionPool$.scoped(RegionPool.scala:17)
	at is.hail.backend.ExecuteContext$.scoped(ExecuteContext.scala:47)
	at is.hail.backend.spark.SparkBackend.withExecuteContext(SparkBackend.scala:277)
	at is.hail.backend.spark.SparkBackend.$anonfun$executeLiteral$1(SparkBackend.scala:391)
	at is.hail.utils.ExecutionTimer$.time(ExecutionTimer.scala:52)
	at is.hail.utils.ExecutionTimer$.logTime(ExecutionTimer.scala:59)
	at is.hail.backend.spark.SparkBackend.executeLiteral(SparkBackend.scala:390)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
	at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
	at py4j.Gateway.invoke(Gateway.java:282)
	at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
	at py4j.commands.CallCommand.execute(CallCommand.java:79)
	at py4j.GatewayConnection.run(GatewayConnection.java:238)
	at java.lang.Thread.run(Thread.java:748)

Hail version: 0.2.90-fd85443c0aac
Error summary: ClassCastException: java.lang.reflect.Constructor cannot be cast to is.hail.types.encoded.EncoderAsmFunction

I didn’t run the full test, but I can send the full output before I stopped it, unable to upload here.

Thank you!

-Julia

As an update, this was solved. @tpoterba suggested that it might be a conflict in local install versions vs the version I wanted to use, and after uninstalling several things and re-installing them, I was able to get this all working.