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

Understanding Error: Enzyme aligned size and Julia size disagree #999

Open
MilesCranmer opened this issue Aug 13, 2023 · 17 comments
Open

Understanding Error: Enzyme aligned size and Julia size disagree #999

MilesCranmer opened this issue Aug 13, 2023 · 17 comments

Comments

@MilesCranmer
Copy link
Contributor

I've seen this error a few times while writing an Enzyme backend for SymbolicRegression.jl – MilesCranmer/SymbolicRegression.jl#254 – and I was just wondering what sort of issue it could indicate? I can't reproduce it reliably right now, unfortunately. This is on Julia 1.10-beta1, so perhaps it could be some unimplemented functionality for the latest Julia version.

┌ Error: Enzyme aligned size and Julia size disagree
│   AlignedSize = 2192esizeof(TT) = 2136
│   fieldtypes(TT) = (Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, @NamedTuple{1, 2, 3, 4, 5::Bool, 6::UInt64, 7::Core.LLVMPtr{UInt64, 0}, 8::UInt64, 9::UInt64}, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, @NamedTuple{1, 2, 3, 4, 5, 6::NTuple{4, Float32}, 7::NTuple{4, Float32}, 8::NTuple{4, Float32}, 9::NTuple{4, Float32}, 10, 11::Core.LLVMPtr{UInt8, 0}, 12, 13, 14::UInt64, 15::UInt64, 16::UInt64, 17::UInt64, 18::UInt64, 19::Bool, 20::Float32, 21::UInt64, 22::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6::NTuple{4, Float32}, 7::NTuple{4, Float32}, 8::NTuple{4, Float32}, 9::NTuple{4, Float32}, 10, 11::Core.LLVMPtr{UInt8, 0}, 12, 13, 14::UInt64, 15::UInt64, 16::UInt64, 17::UInt64, 18::UInt64, 19::Bool, 20::Float32, 21::UInt64, 22::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6::NTuple{4, Float32}, 7::NTuple{4, Float32}, 8::NTuple{4, Float32}, 9::NTuple{4, Float32}, 10, 11::Core.LLVMPtr{UInt8, 0}, 12, 13, 14::UInt64, 15::UInt64, 16::UInt64, 17::UInt64, 18::UInt64, 19::Bool, 20::Float32, 21::UInt64, 22::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6::NTuple{4, Float32}, 7::NTuple{4, Float32}, 8::NTuple{4, Float32}, 9::NTuple{4, Float32}, 10, 11::Core.LLVMPtr{UInt8, 0}, 12, 13, 14::UInt64, 15::UInt64, 16::UInt64, 17::UInt64, 18::UInt64, 19::Bool, 20::Float32, 21::UInt64, 22::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2::UInt64}, Tuple{Core.LLVMPtr{UInt8, 0}, NTuple{4, Float32}, NTuple{4, Float32}, NTuple{4, Float32}, NTuple{4, Float32}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{NTuple{4, Float32}, 0}, Core.LLVMPtr{NTuple{4, Float32}, 0}, Core.LLVMPtr{NTuple{4, Float32}, 0}, Core.LLVMPtr{NTuple{4, Float32}, 0}, Vararg{NTuple{4, Float32}, 6}}, Tuple{Core.LLVMPtr{UInt8, 0}, NTuple{4, Float32}, NTuple{4, Float32}, NTuple{4, Float32}, NTuple{4, Float32}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{NTuple{4, Float32}, 0}, Core.LLVMPtr{NTuple{4, Float32}, 0}, Core.LLVMPtr{NTuple{4, Float32}, 0}, Core.LLVMPtr{NTuple{4, Float32}, 0}, Vararg{NTuple{4, Float32}, 6}}, Any, Any, Any, Any, Any, Any, Any, @NamedTuple{1, 2::UInt64}, Any, Any, @NamedTuple{1, 2::UInt64}, Any, Any, @NamedTuple{1, 2::UInt64}, Any, @NamedTuple{1, 2::UInt64}, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, @NamedTuple{1, 2, 3, 4, 5, 6, 7::UInt8, 8, 9, 10, 11::Bool}, @NamedTuple{1, 2, 3, 4, 5, 6, 7::UInt8, 8, 9, 10, 11::Bool}, UInt8, Any, UInt8, Any, Any, Any, Bool, Bool, UInt64, UInt64, UInt64, UInt8, UInt8, Any, Bool, UInt8, Any, Any, Bool, Bool, Bool, Any, Bool, UInt8, Bool, Bool, UInt8, Bool, Bool, Bool, Bool)
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/YO8Uj/src/utils.jl:56
Assertion failed: (isa<To>(Val) && "cast<Ty>() argument of incompatible type!"), function cast, file /opt/aarch64-apple-darwin20/aarch64-apple-darwin20/sys-root/usr/local/include/llvm/Support/Casting.h, line 578.

I will update this if I can reproduce it reliably.

@vchuravy
Copy link
Member

A MWE would be great, this error means that one of Enzyme's assumptions got violated.

@MilesCranmer
Copy link
Contributor Author

MilesCranmer commented Aug 14, 2023

Here is a working example. It's far from minimal but it does reliably generate this issue.

  1. Install this branch of DynamicExpressions.jl: Enzyme compatibility SymbolicML/DynamicExpressions.jl#52
  2. Install this branch of SymbolicRegression.jl: [WIP] Use Enzyme.jl for constant optimization MilesCranmer/SymbolicRegression.jl#254
  1. Run the following code
using SymbolicRegression
using Enzyme

options = Options(binary_operators=[+, -, *], unary_operators=[cos, exp], enable_enzyme=true)

X = randn(10, 100)
y = randn(100)
dataset = Dataset(X, y)
tree = Node(2, Node(val=0.5))
member = PopMember(tree, 100.0, 100.0, options)
SymbolicRegression.ConstantOptimizationModule.optimize_constants(dataset, member, options)

which generates the following error:

┌ Error: Enzyme aligned size and Julia size disagree
│   AlignedSize = 12752esizeof(TT) = 12488
│   fieldtypes(TT) = (Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, @NamedTuple{1, 2, 3, 4, 5::Tuple{Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}}, 6, 7, 8, 9::Bool, 10::UInt64, 11::Core.LLVMPtr{UInt64, 0}, 12::UInt64, 13::Bool, 14, 15::Bool, 16::UInt64, 17::UInt64}, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, @NamedTuple{1, 2, 3, 4, 5, 6, 7, 8::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 9::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 10::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 11::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 12::Tuple{Float64, Float64}, 13::Tuple{Float64, Float64}, 14::Tuple{Float64, Float64}, 15::Tuple{Float64, Float64}, 16::Tuple{Float64, Float64}, 17::Tuple{Float64, Float64}, 18::Tuple{Float64, Float64}, 19::Tuple{Float64, Float64}, 20::Tuple{Float64, Float64}, 21::Tuple{Float64, Float64}, 22, 23::Core.LLVMPtr{UInt8, 0}, 24, 25, 26::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 27::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 28::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 29::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 30::Tuple{Float64, Float64}, 31::Tuple{Float64, Float64}, 32::Tuple{Float64, Float64}, 33::Tuple{Float64, Float64}, 34::Tuple{Float64, Float64}, 35::Tuple{Float64, Float64}, 36::Tuple{Float64, Float64}, 37::Tuple{Float64, Float64}, 38::Tuple{Float64, Float64}, 39::Tuple{Float64, Float64}, 40, 41, 42::Core.LLVMPtr{UInt8, 0}, 43, 44, 45, 46::Core.LLVMPtr{UInt8, 0}, 47, 48, 49::UInt64, 50::UInt64, 51::UInt64, 52::UInt64, 53::UInt64, 54::UInt64, 55::UInt64, 56::UInt64, 57::UInt64, 58::Core.LLVMPtr{UInt8, 0}, 59::Tuple{Float64, Float64}, 60::Tuple{Float64, Float64}, 61::Tuple{Float64, Float64}, 62::Tuple{Float64, Float64}, 63::Bool, 64::Bool, 65::Float64, 66::Float64, 67::Float64, 68::UInt64, 69::Core.LLVMPtr{UInt8, 0}, 70::Bool, 71::Float64, 72::UInt64, 73::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6, 7, 8::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 9::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 10::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 11::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 12::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 13::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 14::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 15::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 16::Tuple{Float64, Float64}, 17::Tuple{Float64, Float64}, 18::Tuple{Float64, Float64}, 19::Tuple{Float64, Float64}, 20::Tuple{Float64, Float64}, 21::Tuple{Float64, Float64}, 22::Tuple{Float64, Float64}, 23::Tuple{Float64, Float64}, 24::Tuple{Float64, Float64}, 25::Tuple{Float64, Float64}, 26::Tuple{Float64, Float64}, 27::Tuple{Float64, Float64}, 28::Tuple{Float64, Float64}, 29::Tuple{Float64, Float64}, 30::Tuple{Float64, Float64}, 31::Tuple{Float64, Float64}, 32::Tuple{Float64, Float64}, 33::Tuple{Float64, Float64}, 34::Tuple{Float64, Float64}, 35::Tuple{Float64, Float64}, 36, 37::Core.LLVMPtr{UInt8, 0}, 38, 39, 40::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 41::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 42::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 43::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 44::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 45::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 46::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 47::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 48::Tuple{Float64, Float64}, 49::Tuple{Float64, Float64}, 50::Tuple{Float64, Float64}, 51::Tuple{Float64, Float64}, 52::Tuple{Float64, Float64}, 53::Tuple{Float64, Float64}, 54::Tuple{Float64, Float64}, 55::Tuple{Float64, Float64}, 56::Tuple{Float64, Float64}, 57::Tuple{Float64, Float64}, 58::Tuple{Float64, Float64}, 59::Tuple{Float64, Float64}, 60::Tuple{Float64, Float64}, 61::Tuple{Float64, Float64}, 62::Tuple{Float64, Float64}, 63::Tuple{Float64, Float64}, 64::Tuple{Float64, Float64}, 65::Tuple{Float64, Float64}, 66::Tuple{Float64, Float64}, 67::Tuple{Float64, Float64}, 68, 69, 70::Core.LLVMPtr{UInt8, 0}, 71, 72, 73, 74::Core.LLVMPtr{UInt8, 0}, 75, 76, 77::UInt64, 78::UInt64, 79::UInt64, 80::UInt64, 81::UInt64, 82::UInt64, 83::UInt64, 84::UInt64, 85::UInt64, 86::Core.LLVMPtr{UInt8, 0}, 87::Tuple{Float64, Float64}, 88::Tuple{Float64, Float64}, 89::Tuple{Float64, Float64}, 90::Tuple{Float64, Float64}, 91::Bool, 92::Bool, 93::Float64, 94::Float64, 95::Float64, 96::UInt64, 97::Core.LLVMPtr{UInt8, 0}, 98::Bool, 99::Float64, 100::UInt64, 101::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6, 7, 8, 9::Core.LLVMPtr{UInt8, 0}, 10, 11, 12, 13, 14::Core.LLVMPtr{UInt8, 0}, 15, 16, 17, 18::Core.LLVMPtr{UInt8, 0}, 19, 20, 21::UInt64, 22::UInt64, 23::UInt64, 24::UInt64, 25::UInt64, 26::UInt64, 27::UInt64, 28::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 29::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 30::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 31::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 32::Tuple{Float64, Float64}, 33::Tuple{Float64, Float64}, 34::Tuple{Float64, Float64}, 35::Tuple{Float64, Float64}, 36::Tuple{Float64, Float64}, 37::Tuple{Float64, Float64}, 38::Tuple{Float64, Float64}, 39::Tuple{Float64, Float64}, 40::Tuple{Float64, Float64}, 41::Tuple{Float64, Float64}, 42::UInt64, 43::UInt64, 44::Core.LLVMPtr{UInt8, 0}, 45::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 46::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 47::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 48::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 49::Tuple{Float64, Float64}, 50::Tuple{Float64, Float64}, 51::Tuple{Float64, Float64}, 52::Tuple{Float64, Float64}, 53::Tuple{Float64, Float64}, 54::Tuple{Float64, Float64}, 55::Tuple{Float64, Float64}, 56::Tuple{Float64, Float64}, 57::Tuple{Float64, Float64}, 58::Tuple{Float64, Float64}, 59::Tuple{Float64, Float64}, 60::Tuple{Float64, Float64}, 61::Tuple{Float64, Float64}, 62::Tuple{Float64, Float64}, 63::Bool, 64::Bool, 65::Float64, 66::Float64, 67::Float64, 68::UInt64, 69::Core.LLVMPtr{UInt8, 0}, 70::Bool, 71::Float64, 72::UInt64, 73::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6, 7, 8::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 9::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 10::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 11::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 12::Tuple{Float64, Float64}, 13::Tuple{Float64, Float64}, 14::Tuple{Float64, Float64}, 15::Tuple{Float64, Float64}, 16::Tuple{Float64, Float64}, 17::Tuple{Float64, Float64}, 18::Tuple{Float64, Float64}, 19::Tuple{Float64, Float64}, 20::Tuple{Float64, Float64}, 21::Tuple{Float64, Float64}, 22, 23::Core.LLVMPtr{UInt8, 0}, 24, 25, 26::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 27::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 28::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 29::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 30::Tuple{Float64, Float64}, 31::Tuple{Float64, Float64}, 32::Tuple{Float64, Float64}, 33::Tuple{Float64, Float64}, 34::Tuple{Float64, Float64}, 35::Tuple{Float64, Float64}, 36::Tuple{Float64, Float64}, 37::Tuple{Float64, Float64}, 38::Tuple{Float64, Float64}, 39::Tuple{Float64, Float64}, 40, 41, 42::Core.LLVMPtr{UInt8, 0}, 43, 44, 45, 46::Core.LLVMPtr{UInt8, 0}, 47, 48, 49::UInt64, 50::UInt64, 51::UInt64, 52::UInt64, 53::UInt64, 54::UInt64, 55::UInt64, 56::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 57::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 58::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 59::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 60::Tuple{Float64, Float64}, 61::Tuple{Float64, Float64}, 62::Tuple{Float64, Float64}, 63::Tuple{Float64, Float64}, 64::Tuple{Float64, Float64}, 65::Tuple{Float64, Float64}, 66::Tuple{Float64, Float64}, 67::Tuple{Float64, Float64}, 68::Tuple{Float64, Float64}, 69::Tuple{Float64, Float64}, 70::UInt64, 71::UInt64, 72::Core.LLVMPtr{UInt8, 0}, 73::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 74::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 75::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 76::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 77::Tuple{Float64, Float64}, 78::Tuple{Float64, Float64}, 79::Tuple{Float64, Float64}, 80::Tuple{Float64, Float64}, 81::Tuple{Float64, Float64}, 82::Tuple{Float64, Float64}, 83::Tuple{Float64, Float64}, 84::Tuple{Float64, Float64}, 85::Tuple{Float64, Float64}, 86::Tuple{Float64, Float64}, 87::Tuple{Float64, Float64}, 88::Tuple{Float64, Float64}, 89::Tuple{Float64, Float64}, 90::Tuple{Float64, Float64}, 91::Bool, 92::Bool, 93::Float64, 94::Float64, 95::Float64, 96::UInt64, 97::Core.LLVMPtr{UInt8, 0}, 98::Bool, 99::Float64, 100::UInt64, 101::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6, 7, 8, 9::Core.LLVMPtr{UInt8, 0}, 10, 11, 12, 13, 14::Core.LLVMPtr{UInt8, 0}, 15, 16, 17, 18::Core.LLVMPtr{UInt8, 0}, 19, 20, 21::UInt64, 22::UInt64, 23::UInt64, 24::UInt64, 25::UInt64, 26::UInt64, 27::UInt64, 28::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 29::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 30::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 31::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 32::Tuple{Float64, Float64}, 33::Tuple{Float64, Float64}, 34::Tuple{Float64, Float64}, 35::Tuple{Float64, Float64}, 36::Tuple{Float64, Float64}, 37::Tuple{Float64, Float64}, 38::Tuple{Float64, Float64}, 39::Tuple{Float64, Float64}, 40::Tuple{Float64, Float64}, 41::Tuple{Float64, Float64}, 42::UInt64, 43::UInt64, 44::Core.LLVMPtr{UInt8, 0}, 45::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 46::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 47::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 48::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 49::Tuple{Float64, Float64}, 50::Tuple{Float64, Float64}, 51::Tuple{Float64, Float64}, 52::Tuple{Float64, Float64}, 53::Tuple{Float64, Float64}, 54::Tuple{Float64, Float64}, 55::Tuple{Float64, Float64}, 56::Tuple{Float64, Float64}, 57::Tuple{Float64, Float64}, 58::Tuple{Float64, Float64}, 59::Tuple{Float64, Float64}, 60::Tuple{Float64, Float64}, 61::Tuple{Float64, Float64}, 62::Tuple{Float64, Float64}, 63::Bool, 64::Bool, 65::Float64, 66::Float64, 67::Float64, 68::UInt64, 69::Core.LLVMPtr{UInt8, 0}, 70::Bool, 71::Float64, 72::UInt64, 73::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6, 7, 8::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 9::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 10::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 11::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 12::Tuple{Float64, Float64}, 13::Tuple{Float64, Float64}, 14::Tuple{Float64, Float64}, 15::Tuple{Float64, Float64}, 16::Tuple{Float64, Float64}, 17::Tuple{Float64, Float64}, 18::Tuple{Float64, Float64}, 19::Tuple{Float64, Float64}, 20::Tuple{Float64, Float64}, 21::Tuple{Float64, Float64}, 22, 23::Core.LLVMPtr{UInt8, 0}, 24, 25, 26::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 27::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 28::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 29::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 30::Tuple{Float64, Float64}, 31::Tuple{Float64, Float64}, 32::Tuple{Float64, Float64}, 33::Tuple{Float64, Float64}, 34::Tuple{Float64, Float64}, 35::Tuple{Float64, Float64}, 36::Tuple{Float64, Float64}, 37::Tuple{Float64, Float64}, 38::Tuple{Float64, Float64}, 39::Tuple{Float64, Float64}, 40, 41, 42::Core.LLVMPtr{UInt8, 0}, 43, 44, 45, 46::Core.LLVMPtr{UInt8, 0}, 47, 48, 49::UInt64, 50::UInt64, 51::UInt64, 52::UInt64, 53::UInt64, 54::UInt64, 55::UInt64, 56::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 57::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 58::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 59::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 60::Tuple{Float64, Float64}, 61::Tuple{Float64, Float64}, 62::Tuple{Float64, Float64}, 63::Tuple{Float64, Float64}, 64::Tuple{Float64, Float64}, 65::Tuple{Float64, Float64}, 66::Tuple{Float64, Float64}, 67::Tuple{Float64, Float64}, 68::Tuple{Float64, Float64}, 69::Tuple{Float64, Float64}, 70::UInt64, 71::UInt64, 72::Core.LLVMPtr{UInt8, 0}, 73::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 74::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 75::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 76::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 77::Tuple{Float64, Float64}, 78::Tuple{Float64, Float64}, 79::Tuple{Float64, Float64}, 80::Tuple{Float64, Float64}, 81::Tuple{Float64, Float64}, 82::Tuple{Float64, Float64}, 83::Tuple{Float64, Float64}, 84::Tuple{Float64, Float64}, 85::Tuple{Float64, Float64}, 86::Tuple{Float64, Float64}, 87::Tuple{Float64, Float64}, 88::Tuple{Float64, Float64}, 89::Tuple{Float64, Float64}, 90::Tuple{Float64, Float64}, 91::Bool, 92::Bool, 93::Float64, 94::Float64, 95::Float64, 96::UInt64, 97::Core.LLVMPtr{UInt8, 0}, 98::Bool, 99::Float64, 100::UInt64, 101::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6::Tuple{Float64, Float64}, 7::Tuple{Float64, Float64}, 8::Tuple{Float64, Float64}, 9::Tuple{Float64, Float64}, 10, 11::Core.LLVMPtr{UInt8, 0}, 12, 13, 14::UInt64, 15::UInt64, 16::UInt64, 17::UInt64, 18::UInt64, 19::Bool, 20::Float64, 21::UInt64, 22::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6, 7::Core.LLVMPtr{UInt8, 0}, 8, 9, 10::UInt64, 11::UInt64, 12::UInt64, 13::UInt64, 14::UInt64, 15::Tuple{Float64, Float64}, 16::Tuple{Float64, Float64}, 17::Tuple{Float64, Float64}, 18::Tuple{Float64, Float64}, 19::Bool, 20::Float64, 21::UInt64, 22::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6, 7::Core.LLVMPtr{UInt8, 0}, 8, 9, 10::UInt64, 11::UInt64, 12::UInt64, 13::UInt64, 14::UInt64, 15::Tuple{Float64, Float64}, 16::Tuple{Float64, Float64}, 17::Tuple{Float64, Float64}, 18::Tuple{Float64, Float64}, 19::Bool, 20::Float64, 21::UInt64, 22::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3, 4, 5, 6, 7::Core.LLVMPtr{UInt8, 0}, 8, 9, 10::UInt64, 11::UInt64, 12::UInt64, 13::UInt64, 14::UInt64, 15::Tuple{Float64, Float64}, 16::Tuple{Float64, Float64}, 17::Tuple{Float64, Float64}, 18::Tuple{Float64, Float64}, 19::Bool, 20::Float64, 21::UInt64, 22::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2::UInt64}, Tuple{Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Vararg{Tuple{Float64, Float64}, 6}}, Tuple{Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Vararg{Tuple{Float64, Float64}, 6}}, Any, Any, Any, @NamedTuple{1, 2, 3, 4, 5, 6, 7, 8, 9, 10::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 11::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 12::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 13::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 14::Tuple{Float64, Float64}, 15::Tuple{Float64, Float64}, 16::Tuple{Float64, Float64}, 17::Tuple{Float64, Float64}, 18::Tuple{Float64, Float64}, 19::Tuple{Float64, Float64}, 20::Tuple{Float64, Float64}, 21::Tuple{Float64, Float64}, 22::Tuple{Float64, Float64}, 23::Tuple{Float64, Float64}, 24, 25, 26, 27, 28::Core.LLVMPtr{UInt8, 0}, 29::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 30::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 31::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 32::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 33::Tuple{Float64, Float64}, 34::Tuple{Float64, Float64}, 35::Tuple{Float64, Float64}, 36::Tuple{Float64, Float64}, 37::Tuple{Float64, Float64}, 38::Tuple{Float64, Float64}, 39::Tuple{Float64, Float64}, 40::Tuple{Float64, Float64}, 41::Tuple{Float64, Float64}, 42::Tuple{Float64, Float64}, 43::Core.LLVMPtr{UInt8, 0}, 44, 45, 46::Core.LLVMPtr{UInt8, 0}, 47::UInt64, 48::UInt64, 49::UInt64, 50::UInt64, 51::UInt64, 52::UInt64, 53::UInt64, 54::Core.LLVMPtr{UInt8, 0}, 55::UInt64, 56::Core.LLVMPtr{UInt8, 0}, 57::Tuple{Float64, Float64}, 58::Tuple{Float64, Float64}, 59::Tuple{Float64, Float64}, 60::Tuple{Float64, Float64}, 61::Bool, 62::Bool, 63::Float64, 64::Float64, 65::Float64, 66::Core.LLVMPtr{UInt8, 0}, 67::Bool, 68::Float64}, @NamedTuple{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14::Core.LLVMPtr{UInt8, 0}, 15::Core.LLVMPtr{UInt8, 0}, 16, 17, 18::Core.LLVMPtr{UInt8, 0}, 19::UInt64, 20::UInt64, 21::UInt64, 22::UInt64, 23::UInt64, 24::UInt64, 25::Tuple{Float64, Float64}, 26::Tuple{Float64, Float64}, 27::Tuple{Float64, Float64}, 28::Tuple{Float64, Float64}, 29::UInt64, 30::Core.LLVMPtr{UInt8, 0}, 31::Tuple{Float64, Float64}, 32::Tuple{Float64, Float64}, 33::Tuple{Float64, Float64}, 34::Tuple{Float64, Float64}, 35::UInt64, 36::Core.LLVMPtr{UInt8, 0}, 37::Tuple{Float64, Float64}, 38::Tuple{Float64, Float64}, 39::Tuple{Float64, Float64}, 40::Tuple{Float64, Float64}, 41::Bool, 42::Bool, 43::Float64, 44::Float64, 45::Float64, 46::Core.LLVMPtr{UInt8, 0}, 47::Bool, 48::Float64}, @NamedTuple{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14::Core.LLVMPtr{UInt8, 0}, 15::Core.LLVMPtr{UInt8, 0}, 16, 17, 18::Core.LLVMPtr{UInt8, 0}, 19::UInt64, 20::UInt64, 21::UInt64, 22::UInt64, 23::UInt64, 24::UInt64, 25::Tuple{Float64, Float64}, 26::Tuple{Float64, Float64}, 27::Tuple{Float64, Float64}, 28::Tuple{Float64, Float64}, 29::UInt64, 30::Core.LLVMPtr{UInt8, 0}, 31::Tuple{Float64, Float64}, 32::Tuple{Float64, Float64}, 33::Tuple{Float64, Float64}, 34::Tuple{Float64, Float64}, 35::UInt64, 36::Core.LLVMPtr{UInt8, 0}, 37::Tuple{Float64, Float64}, 38::Tuple{Float64, Float64}, 39::Tuple{Float64, Float64}, 40::Tuple{Float64, Float64}, 41::Bool, 42::Bool, 43::Float64, 44::Float64, 45::Float64, 46::Core.LLVMPtr{UInt8, 0}, 47::Bool, 48::Float64}, @NamedTuple{1, 2::UInt64}, @NamedTuple{1, 2, 3::Core.LLVMPtr{UInt8, 0}, 4::Tuple{Float64, Float64}, 5::Tuple{Float64, Float64}, 6::Tuple{Float64, Float64}, 7::Tuple{Float64, Float64}, 8::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 9::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 10::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 11::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 12::Tuple{Float64, Float64}, 13::Tuple{Float64, Float64}, 14::Tuple{Float64, Float64}, 15::Tuple{Float64, Float64}, 16::Tuple{Float64, Float64}, 17::Tuple{Float64, Float64}, 18::Tuple{Float64, Float64}, 19::Tuple{Float64, Float64}, 20::Tuple{Float64, Float64}, 21::Tuple{Float64, Float64}, 22::Core.LLVMPtr{UInt8, 0}, 23::UInt64, 24::UInt64, 25::Core.LLVMPtr{UInt8, 0}, 26::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 27::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 28::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 29::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 30::Tuple{Float64, Float64}, 31::Tuple{Float64, Float64}, 32::Tuple{Float64, Float64}, 33::Tuple{Float64, Float64}, 34::Tuple{Float64, Float64}, 35::Tuple{Float64, Float64}, 36::Tuple{Float64, Float64}, 37::Tuple{Float64, Float64}, 38::Tuple{Float64, Float64}, 39::Tuple{Float64, Float64}, 40::Bool, 41::Float64, 42::UInt64, 43::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3::Core.LLVMPtr{UInt8, 0}, 4::Core.LLVMPtr{UInt8, 0}, 5::UInt64, 6::UInt64, 7::Core.LLVMPtr{UInt8, 0}, 8::Tuple{Float64, Float64}, 9::Tuple{Float64, Float64}, 10::Tuple{Float64, Float64}, 11::Tuple{Float64, Float64}, 12::Tuple{Float64, Float64}, 13::Tuple{Float64, Float64}, 14::Tuple{Float64, Float64}, 15::Tuple{Float64, Float64}, 16::Bool, 17::Float64, 18::UInt64, 19::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3::Core.LLVMPtr{UInt8, 0}, 4::Core.LLVMPtr{UInt8, 0}, 5::UInt64, 6::UInt64, 7::Core.LLVMPtr{UInt8, 0}, 8::Tuple{Float64, Float64}, 9::Tuple{Float64, Float64}, 10::Tuple{Float64, Float64}, 11::Tuple{Float64, Float64}, 12::Tuple{Float64, Float64}, 13::Tuple{Float64, Float64}, 14::Tuple{Float64, Float64}, 15::Tuple{Float64, Float64}, 16::Bool, 17::Float64, 18::UInt64, 19::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2::UInt64}, @NamedTuple{1, 2, 3::Core.LLVMPtr{UInt8, 0}, 4::Tuple{Float64, Float64}, 5::Tuple{Float64, Float64}, 6::Tuple{Float64, Float64}, 7::Tuple{Float64, Float64}, 8::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 9::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 10::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 11::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 12::Tuple{Float64, Float64}, 13::Tuple{Float64, Float64}, 14::Tuple{Float64, Float64}, 15::Tuple{Float64, Float64}, 16::Tuple{Float64, Float64}, 17::Tuple{Float64, Float64}, 18::Tuple{Float64, Float64}, 19::Tuple{Float64, Float64}, 20::Tuple{Float64, Float64}, 21::Tuple{Float64, Float64}, 22::Core.LLVMPtr{UInt8, 0}, 23::UInt64, 24::UInt64, 25::Core.LLVMPtr{UInt8, 0}, 26::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 27::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 28::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 29::Core.LLVMPtr{Tuple{Float64, Float64}, 0}, 30::Tuple{Float64, Float64}, 31::Tuple{Float64, Float64}, 32::Tuple{Float64, Float64}, 33::Tuple{Float64, Float64}, 34::Tuple{Float64, Float64}, 35::Tuple{Float64, Float64}, 36::Tuple{Float64, Float64}, 37::Tuple{Float64, Float64}, 38::Tuple{Float64, Float64}, 39::Tuple{Float64, Float64}, 40::Bool, 41::Float64, 42::UInt64, 43::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3::Core.LLVMPtr{UInt8, 0}, 4::Core.LLVMPtr{UInt8, 0}, 5::UInt64, 6::UInt64, 7::Core.LLVMPtr{UInt8, 0}, 8::Tuple{Float64, Float64}, 9::Tuple{Float64, Float64}, 10::Tuple{Float64, Float64}, 11::Tuple{Float64, Float64}, 12::Tuple{Float64, Float64}, 13::Tuple{Float64, Float64}, 14::Tuple{Float64, Float64}, 15::Tuple{Float64, Float64}, 16::Bool, 17::Float64, 18::UInt64, 19::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2, 3::Core.LLVMPtr{UInt8, 0}, 4::Core.LLVMPtr{UInt8, 0}, 5::UInt64, 6::UInt64, 7::Core.LLVMPtr{UInt8, 0}, 8::Tuple{Float64, Float64}, 9::Tuple{Float64, Float64}, 10::Tuple{Float64, Float64}, 11::Tuple{Float64, Float64}, 12::Tuple{Float64, Float64}, 13::Tuple{Float64, Float64}, 14::Tuple{Float64, Float64}, 15::Tuple{Float64, Float64}, 16::Bool, 17::Float64, 18::UInt64, 19::Core.LLVMPtr{UInt8, 0}}, @NamedTuple{1, 2::UInt64}, Any, @NamedTuple{1, 2::UInt64}, Tuple{Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Vararg{Tuple{Float64, Float64}, 12}}, Tuple{Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, Vararg{Tuple{Float64, Float64}, 4}}, Tuple{Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, Vararg{Tuple{Float64, Float64}, 4}}, Any, Any, Any, Any, Any, Any, Any, @NamedTuple{1, 2, 3, 4, 5, 6, 7::UInt8, 8, 9, 10, 11::Bool}, @NamedTuple{1, 2, 3, 4, 5, 6, 7::UInt8, 8, 9, 10, 11::Bool}, UInt8, Any, UInt8, Any, Any, Any, Bool, Bool, UInt64, UInt64, UInt8, Any, Bool, Any, Any, Bool, Bool, Bool, Any, Bool, UInt8, Bool, Bool, Bool, Bool, Bool, Bool)
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/YO8Uj/src/utils.jl:56
Assertion failed: (isa<To>(Val) && "cast<Ty>() argument of incompatible type!"), function cast, file /opt/aarch64-apple-darwin20/aarch64-apple-darwin20/sys-root/usr/local/include/llvm/Support/Casting.h, line 578.

[83445] signal (6): Abort trap: 6
in expression starting at /Users/mcranmer/Documents/SymbolicRegression.jl/src/rep.jl:11
__pthread_kill at /usr/lib/system/libsystem_kernel.dylib (unknown line)
Allocations: 73003985 (Pool: 72946943; Big: 57042); GC: 18

versioninfo():

Julia Version 1.10.0-beta1
Commit 6616549950e (2023-07-25 17:43 UTC)
Platform Info:
  OS: macOS (arm64-apple-darwin22.4.0)
  CPU: 8 × Apple M1 Pro
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-15.0.7 (ORCJIT, apple-m1)
  Threads: 8 on 6 virtual cores
Environment:
  JULIA_NUM_THREADS = auto
  JULIA_FORMATTER_SO = /Users/mcranmer/julia_formatter.so
  JULIA_EDITOR = code

@wsmoses
Copy link
Member

wsmoses commented Aug 15, 2023

Having just released a new tag, mind double checking if the error persits on it?

@MilesCranmer
Copy link
Contributor Author

Just checked. Unfortunately it still occurs with Enzyme 0.11.7

@MilesCranmer
Copy link
Contributor Author

Not sure if this is helpful at all but here's the Julia 1.9 version. Seems like AlignedSize and esizeof(TT) change on 1.9 but are still not equal to eachother.

┌ Error: Enzyme aligned size and Julia size disagree
│   AlignedSize = 12672esizeof(TT) = 12408
│   fieldtypes(TT) = (Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17")), Tuple{Any, Any, Any, Any, Tuple{Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}}, Any, Any, Any, Bool, UInt64, Core.LLVMPtr{UInt64, 0}, UInt64, Bool, Any, Bool, UInt64, UInt64}}, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22"), Symbol("23"), Symbol("24"), Symbol("25"), Symbol("26"), Symbol("27"), Symbol("28"), Symbol("29"), Symbol("30"), Symbol("31"), Symbol("32"), Symbol("33"), Symbol("34"), Symbol("35"), Symbol("36"), Symbol("37"), Symbol("38"), Symbol("39"), Symbol("40"), Symbol("41"), Symbol("42"), Symbol("43"), Symbol("44"), Symbol("45"), Symbol("46"), Symbol("47"), Symbol("48"), Symbol("49"), Symbol("50"), Symbol("51"), Symbol("52"), Symbol("53"), Symbol("54"), Symbol("55"), Symbol("56"), Symbol("57"), Symbol("58"), Symbol("59"), Symbol("60"), Symbol("61"), Symbol("62"), Symbol("63"), Symbol("64"), Symbol("65"), Symbol("66"), Symbol("67"), Symbol("68"), Symbol("69"), Symbol("70"), Symbol("71"), Symbol("72"), Symbol("73")), Tuple{Any, Any, Any, Any, Any, Any, Any, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Bool, Float64, Float64, Float64, UInt64, Core.LLVMPtr{UInt8, 0}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22"), Symbol("23"), Symbol("24"), Symbol("25"), Symbol("26"), Symbol("27"), Symbol("28"), Symbol("29"), Symbol("30"), Symbol("31"), Symbol("32"), Symbol("33"), Symbol("34"), Symbol("35"), Symbol("36"), Symbol("37"), Symbol("38"), Symbol("39"), Symbol("40"), Symbol("41"), Symbol("42"), Symbol("43"), Symbol("44"), Symbol("45"), Symbol("46"), Symbol("47"), Symbol("48"), Symbol("49"), Symbol("50"), Symbol("51"), Symbol("52"), Symbol("53"), Symbol("54"), Symbol("55"), Symbol("56"), Symbol("57"), Symbol("58"), Symbol("59"), Symbol("60"), Symbol("61"), Symbol("62"), Symbol("63"), Symbol("64"), Symbol("65"), Symbol("66"), Symbol("67"), Symbol("68"), Symbol("69"), Symbol("70"), Symbol("71"), Symbol("72"), Symbol("73"), Symbol("74"), Symbol("75"), Symbol("76"), Symbol("77"), Symbol("78"), Symbol("79"), Symbol("80"), Symbol("81"), Symbol("82"), Symbol("83"), Symbol("84"), Symbol("85"), Symbol("86"), Symbol("87"), Symbol("88"), Symbol("89"), Symbol("90"), Symbol("91"), Symbol("92"), Symbol("93"), Symbol("94"), Symbol("95"), Symbol("96"), Symbol("97"), Symbol("98"), Symbol("99"), Symbol("100"), Symbol("101")), Tuple{Any, Any, Any, Any, Any, Any, Any, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Bool, Float64, Float64, Float64, UInt64, Core.LLVMPtr{UInt8, 0}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22"), Symbol("23"), Symbol("24"), Symbol("25"), Symbol("26"), Symbol("27"), Symbol("28"), Symbol("29"), Symbol("30"), Symbol("31"), Symbol("32"), Symbol("33"), Symbol("34"), Symbol("35"), Symbol("36"), Symbol("37"), Symbol("38"), Symbol("39"), Symbol("40"), Symbol("41"), Symbol("42"), Symbol("43"), Symbol("44"), Symbol("45"), Symbol("46"), Symbol("47"), Symbol("48"), Symbol("49"), Symbol("50"), Symbol("51"), Symbol("52"), Symbol("53"), Symbol("54"), Symbol("55"), Symbol("56"), Symbol("57"), Symbol("58"), Symbol("59"), Symbol("60"), Symbol("61"), Symbol("62"), Symbol("63"), Symbol("64"), Symbol("65"), Symbol("66"), Symbol("67"), Symbol("68"), Symbol("69"), Symbol("70"), Symbol("71"), Symbol("72"), Symbol("73")), Tuple{Any, Any, Any, Any, Any, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Bool, Float64, Float64, Float64, UInt64, Core.LLVMPtr{UInt8, 0}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22"), Symbol("23"), Symbol("24"), Symbol("25"), Symbol("26"), Symbol("27"), Symbol("28"), Symbol("29"), Symbol("30"), Symbol("31"), Symbol("32"), Symbol("33"), Symbol("34"), Symbol("35"), Symbol("36"), Symbol("37"), Symbol("38"), Symbol("39"), Symbol("40"), Symbol("41"), Symbol("42"), Symbol("43"), Symbol("44"), Symbol("45"), Symbol("46"), Symbol("47"), Symbol("48"), Symbol("49"), Symbol("50"), Symbol("51"), Symbol("52"), Symbol("53"), Symbol("54"), Symbol("55"), Symbol("56"), Symbol("57"), Symbol("58"), Symbol("59"), Symbol("60"), Symbol("61"), Symbol("62"), Symbol("63"), Symbol("64"), Symbol("65"), Symbol("66"), Symbol("67"), Symbol("68"), Symbol("69"), Symbol("70"), Symbol("71"), Symbol("72"), Symbol("73"), Symbol("74"), Symbol("75"), Symbol("76"), Symbol("77"), Symbol("78"), Symbol("79"), Symbol("80"), Symbol("81"), Symbol("82"), Symbol("83"), Symbol("84"), Symbol("85"), Symbol("86"), Symbol("87"), Symbol("88"), Symbol("89"), Symbol("90"), Symbol("91"), Symbol("92"), Symbol("93"), Symbol("94"), Symbol("95"), Symbol("96"), Symbol("97"), Symbol("98"), Symbol("99"), Symbol("100"), Symbol("101")), Tuple{Any, Any, Any, Any, Any, Any, Any, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Bool, Float64, Float64, Float64, UInt64, Core.LLVMPtr{UInt8, 0}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22"), Symbol("23"), Symbol("24"), Symbol("25"), Symbol("26"), Symbol("27"), Symbol("28"), Symbol("29"), Symbol("30"), Symbol("31"), Symbol("32"), Symbol("33"), Symbol("34"), Symbol("35"), Symbol("36"), Symbol("37"), Symbol("38"), Symbol("39"), Symbol("40"), Symbol("41"), Symbol("42"), Symbol("43"), Symbol("44"), Symbol("45"), Symbol("46"), Symbol("47"), Symbol("48"), Symbol("49"), Symbol("50"), Symbol("51"), Symbol("52"), Symbol("53"), Symbol("54"), Symbol("55"), Symbol("56"), Symbol("57"), Symbol("58"), Symbol("59"), Symbol("60"), Symbol("61"), Symbol("62"), Symbol("63"), Symbol("64"), Symbol("65"), Symbol("66"), Symbol("67"), Symbol("68"), Symbol("69"), Symbol("70"), Symbol("71"), Symbol("72"), Symbol("73")), Tuple{Any, Any, Any, Any, Any, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Bool, Float64, Float64, Float64, UInt64, Core.LLVMPtr{UInt8, 0}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22"), Symbol("23"), Symbol("24"), Symbol("25"), Symbol("26"), Symbol("27"), Symbol("28"), Symbol("29"), Symbol("30"), Symbol("31"), Symbol("32"), Symbol("33"), Symbol("34"), Symbol("35"), Symbol("36"), Symbol("37"), Symbol("38"), Symbol("39"), Symbol("40"), Symbol("41"), Symbol("42"), Symbol("43"), Symbol("44"), Symbol("45"), Symbol("46"), Symbol("47"), Symbol("48"), Symbol("49"), Symbol("50"), Symbol("51"), Symbol("52"), Symbol("53"), Symbol("54"), Symbol("55"), Symbol("56"), Symbol("57"), Symbol("58"), Symbol("59"), Symbol("60"), Symbol("61"), Symbol("62"), Symbol("63"), Symbol("64"), Symbol("65"), Symbol("66"), Symbol("67"), Symbol("68"), Symbol("69"), Symbol("70"), Symbol("71"), Symbol("72"), Symbol("73"), Symbol("74"), Symbol("75"), Symbol("76"), Symbol("77"), Symbol("78"), Symbol("79"), Symbol("80"), Symbol("81"), Symbol("82"), Symbol("83"), Symbol("84"), Symbol("85"), Symbol("86"), Symbol("87"), Symbol("88"), Symbol("89"), Symbol("90"), Symbol("91"), Symbol("92"), Symbol("93"), Symbol("94"), Symbol("95"), Symbol("96"), Symbol("97"), Symbol("98"), Symbol("99"), Symbol("100"), Symbol("101")), Tuple{Any, Any, Any, Any, Any, Any, Any, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Bool, Float64, Float64, Float64, UInt64, Core.LLVMPtr{UInt8, 0}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22")), Tuple{Any, Any, Any, Any, Any, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, UInt64, UInt64, UInt64, UInt64, UInt64, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22")), Tuple{Any, Any, Any, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, UInt64, UInt64, UInt64, UInt64, UInt64, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22")), Tuple{Any, Any, Any, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, UInt64, UInt64, UInt64, UInt64, UInt64, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22")), Tuple{Any, Any, Any, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Any, Any, UInt64, UInt64, UInt64, UInt64, UInt64, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, Tuple{Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Vararg{Tuple{Float64, Float64}, 6}}, Tuple{Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Vararg{Tuple{Float64, Float64}, 6}}, Any, Any, Any, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22"), Symbol("23"), Symbol("24"), Symbol("25"), Symbol("26"), Symbol("27"), Symbol("28"), Symbol("29"), Symbol("30"), Symbol("31"), Symbol("32"), Symbol("33"), Symbol("34"), Symbol("35"), Symbol("36"), Symbol("37"), Symbol("38"), Symbol("39"), Symbol("40"), Symbol("41"), Symbol("42"), Symbol("43"), Symbol("44"), Symbol("45"), Symbol("46"), Symbol("47"), Symbol("48"), Symbol("49"), Symbol("50"), Symbol("51"), Symbol("52"), Symbol("53"), Symbol("54"), Symbol("55"), Symbol("56"), Symbol("57"), Symbol("58"), Symbol("59"), Symbol("60"), Symbol("61"), Symbol("62"), Symbol("63"), Symbol("64"), Symbol("65"), Symbol("66"), Symbol("67"), Symbol("68")), Tuple{Any, Any, Any, Any, Any, Any, Any, Any, Any, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Any, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Core.LLVMPtr{UInt8, 0}, Any, Any, Core.LLVMPtr{UInt8, 0}, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, UInt64, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Bool, Float64, Float64, Float64, Core.LLVMPtr{UInt8, 0}, Bool, Float64}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22"), Symbol("23"), Symbol("24"), Symbol("25"), Symbol("26"), Symbol("27"), Symbol("28"), Symbol("29"), Symbol("30"), Symbol("31"), Symbol("32"), Symbol("33"), Symbol("34"), Symbol("35"), Symbol("36"), Symbol("37"), Symbol("38"), Symbol("39"), Symbol("40"), Symbol("41"), Symbol("42"), Symbol("43"), Symbol("44"), Symbol("45"), Symbol("46"), Symbol("47"), Symbol("48")), Tuple{Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, Any, Any, Core.LLVMPtr{UInt8, 0}, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Bool, Float64, Float64, Float64, Core.LLVMPtr{UInt8, 0}, Bool, Float64}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22"), Symbol("23"), Symbol("24"), Symbol("25"), Symbol("26"), Symbol("27"), Symbol("28"), Symbol("29"), Symbol("30"), Symbol("31"), Symbol("32"), Symbol("33"), Symbol("34"), Symbol("35"), Symbol("36"), Symbol("37"), Symbol("38"), Symbol("39"), Symbol("40"), Symbol("41"), Symbol("42"), Symbol("43"), Symbol("44"), Symbol("45"), Symbol("46"), Symbol("47"), Symbol("48")), Tuple{Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, Any, Any, Core.LLVMPtr{UInt8, 0}, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Bool, Float64, Float64, Float64, Core.LLVMPtr{UInt8, 0}, Bool, Float64}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22"), Symbol("23"), Symbol("24"), Symbol("25"), Symbol("26"), Symbol("27"), Symbol("28"), Symbol("29"), Symbol("30"), Symbol("31"), Symbol("32"), Symbol("33"), Symbol("34"), Symbol("35"), Symbol("36"), Symbol("37"), Symbol("38"), Symbol("39"), Symbol("40"), Symbol("41"), Symbol("42"), Symbol("43")), Tuple{Any, Any, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Core.LLVMPtr{UInt8, 0}, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19")), Tuple{Any, Any, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19")), Tuple{Any, Any, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19"), Symbol("20"), Symbol("21"), Symbol("22"), Symbol("23"), Symbol("24"), Symbol("25"), Symbol("26"), Symbol("27"), Symbol("28"), Symbol("29"), Symbol("30"), Symbol("31"), Symbol("32"), Symbol("33"), Symbol("34"), Symbol("35"), Symbol("36"), Symbol("37"), Symbol("38"), Symbol("39"), Symbol("40"), Symbol("41"), Symbol("42"), Symbol("43")), Tuple{Any, Any, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Core.LLVMPtr{UInt8, 0}, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19")), Tuple{Any, Any, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11"), Symbol("12"), Symbol("13"), Symbol("14"), Symbol("15"), Symbol("16"), Symbol("17"), Symbol("18"), Symbol("19")), Tuple{Any, Any, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, UInt64, UInt64, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Bool, Float64, UInt64, Core.LLVMPtr{UInt8, 0}}}, Any, Tuple{Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, Tuple{Float64, Float64}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Core.LLVMPtr{Tuple{Float64, Float64}, 0}, Vararg{Tuple{Float64, Float64}, 12}}, Tuple{Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, Vararg{Tuple{Float64, Float64}, 4}}, Tuple{Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, UInt64, Core.LLVMPtr{UInt8, 0}, Core.LLVMPtr{UInt8, 0}, Vararg{Tuple{Float64, Float64}, 4}}, Any, Any, Any, Any, Any, Any, Any, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11")), Tuple{Any, Any, Any, Any, Any, Any, UInt8, Any, Any, Any, Bool}}, NamedTuple{(Symbol("1"), Symbol("2"), Symbol("3"), Symbol("4"), Symbol("5"), Symbol("6"), Symbol("7"), Symbol("8"), Symbol("9"), Symbol("10"), Symbol("11")), Tuple{Any, Any, Any, Any, Any, Any, UInt8, Any, Any, Any, Bool}}, UInt8, Any, UInt8, Any, Any, Any, Bool, Bool, UInt64, UInt64, UInt8, Any, Bool, Any, Any, Bool, Bool, Bool, Any, Bool, UInt8, Bool, Bool, Bool, Bool, Bool, Bool)
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/YO8Uj/src/utils.jl:56
Assertion failed: (isa<X>(Val) && "cast<Ty>() argument of incompatible type!"), function cast, file /opt/aarch64-apple-darwin20/aarch64-apple-darwin20/sys-root/usr/local/include/llvm/Support/Casting.h, line 269.

[1253] signal (6): Abort trap: 6
in expression starting at /Users/mcranmer/Documents/SymbolicRegression.jl/src/rep.jl:11
__pthread_kill at /usr/lib/system/libsystem_kernel.dylib (unknown line)
Allocations: 117534982 (Pool: 117465318; Big: 69664); GC: 108

@wsmoses
Copy link
Member

wsmoses commented Aug 16, 2023

Alas, relatedly @MilesCranmer can you make the MWE a single function passed to an Enzyme autodiff. Otherwise I have no idea how those packages use Enzyme in order to debug.

@MilesCranmer

This comment was marked as outdated.

@MilesCranmer
Copy link
Contributor Author

MilesCranmer commented Aug 16, 2023

Here is a MWE. Keep in mind you should still install those specific branches I mentioned above.

using SymbolicRegression
using Enzyme

function opt_func!(result, x, dataset, tree, constant_nodes, options, idx)
    _set_constants!(x, constant_nodes)
    result[1] = SymbolicRegression.LossFunctionsModule.eval_loss(tree, dataset, options; regularization=false, idx=idx)
    return nothing
end
function _set_constants!(x::AbstractArray{T}, constant_nodes) where {T}
    for (xi, node) in zip(x, constant_nodes)
        node.val::T = xi
    end
    return nothing
end

options = Options(binary_operators=[+, -, *], unary_operators=[cos, exp], enable_enzyme=true)

X = randn(10, 100)
y = randn(100)
dataset = Dataset(X, y)

tree = Node(2, Node(val=0.5))  # == exp(x), where x=0.5

# Copy tree which is used for storage.
ctree = copy(tree)
# Set all constants to 0.0:
foreach(t -> t.degree == 0 && t.constant && (t.val = 0.0), ctree)

constant_nodes = filter(t -> t.degree == 0 && t.constant, tree)
c_constant_nodes = filter(t -> t.degree == 0 && t.constant, ctree)

x = map(t -> t.val::Float64, constant_nodes)
dx = map(t -> 1.0, constant_nodes)

result = [0.0]
dresult = [1.0]

idx = nothing

autodiff(
    Reverse,
    opt_func!,
    Duplicated(result, dresult),
    Duplicated(x, dx),
    Const(dataset),
    Duplicated(tree, ctree),
    Duplicated(constant_nodes, c_constant_nodes),
    Const(options),
    Const(idx),
)

@wsmoses
Copy link
Member

wsmoses commented Aug 16, 2023 via email

@MilesCranmer
Copy link
Contributor Author

Hm, it will be a bit of work to in-line everything. Maybe if I understand the error a bit better I will know what part of my code is most likely the cause. What is this error due to?

@MilesCranmer
Copy link
Contributor Author

If it helps, I think the error occurs when it hits this branch of the code: https://github.com/SymbolicML/DynamicExpressions.jl/blob/4629571123dde66d1270fedd39fe689af56ac9d6/src/EvaluateEquation.jl#L100

Is there a way the error can be triggered but not crash? Maybe it will be easier to backtrace it.

@wsmoses
Copy link
Member

wsmoses commented Aug 16, 2023 via email

@MilesCranmer
Copy link
Contributor Author

Thanks.

I tried building a more minimal MWE today but didn’t have luck reproducing the error, sorry.

One other note is that earlier I noticed via Cthulhu that there was type inference issues with return statements like:

result, flag = ...

Where result is an array and flag is a bool.

It seems like because Julia allows things like:

x, y = (1, 2, 3)

To set x=1 and y=2 (IIRC; am just getting off the plane so can’t check). Because of this allowed syntax it could be that result, flag = (::Array, ::Bool) might be causing weird inference issues for Enzyme. What do you think?

@MilesCranmer
Copy link
Contributor Author

I'm doing a binary search over the code by commenting out segments of the libraries until the error goes away. In doing so I saw this warning: warning: didn't implement memmove, using memcpy as fallback which can result in errors. Is this some internal thing in Enzyme or is it a problem with my library?

@wsmoses
Copy link
Member

wsmoses commented Aug 17, 2023

Internal to Enzyme warning, it can be ignored here

@MilesCranmer
Copy link
Contributor Author

MilesCranmer commented Aug 17, 2023

Okay, I figured out. Sorry for wasting your time on what I thought could be an Enzyme bug; turns out it's just interference between packages that wasn't being removed by the optimization before autodiff.

Here's the postmortem:

So, I remember reading about the incompatibility between Enzyme.jl and LoopVectorization.jl. I do use LoopVectorization.jl, but I didn't think this would be an issue here, because my evaluation kernels are declared like this:

function my_kernel(x, ::Val{turbo}) where {turbo}
    if turbo
        @turbo for i in eachindex(x)
            x[i] = x[i] ^ 2
        end
    else
        for i in eachindex(x)
            x[i] = x[i] ^ 2
        end
    end
end

so because I have called my evaluation loop with turbo=false inside the autodiff, I had thought the entire branch would be removed by the -O2 pass before the differentiation occurs. But since the assignment turbo -> Val(turbo) happens inside the autodiff call, I think Enzyme was actually trying to differentiate both branches of this – and ran into the LoopVectorization issue. Does this sound plausible to you?

I was able to temporarily fix this issue by completely removing the turbo branches. Is that AlignedSize issue generally indicative of interfering with other packages that manipulate the LLVM in incompatible ways?

So I think a general fix for me could be to have turbo -> Val(turbo) outside of the autodiff, which I assume would cause the optimization to remove the LoopVectorization.jl code.

@wsmoses wsmoses reopened this Aug 17, 2023
@wsmoses
Copy link
Member

wsmoses commented Aug 17, 2023

Independent of turbo not working correctly, I think we still need to figure out and fix the source of this, since this is a state that should never occur for the caching infrastructure.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants