Package evaluation to test SDDP on Julia 1.14.0-DEV.2373 (cf67ecc88f*) started at 2026-06-13T15:48:08.004 ################################################################################ # Set-up # Installing PkgEval dependencies (TestEnv)... Activating project at `~/.julia/environments/v1.14` Set-up completed after 15.08s ################################################################################ # Installation # Installing SDDP... Resolving package versions... Updating `~/.julia/environments/v1.14/Project.toml` [f4570300] + SDDP v1.13.2 Updating `~/.julia/environments/v1.14/Manifest.toml` [d1d4a3ce] + BitFlags v0.1.10 [523fee87] + CodecBzip2 v0.8.5 [944b1d66] + CodecZlib v0.7.8 [bbf7d656] + CommonSubexpressions v0.3.1 [f0e56b4a] + ConcurrentUtilities v2.5.1 [163ba53b] + DiffResults v1.1.0 [b552c78f] + DiffRules v1.16.0 [ffbed154] + DocStringExtensions v0.9.5 [460bff9d] + ExceptionUnwrapping v0.1.11 [e2ba6199] + ExprTools v0.1.10 [f6369f11] + ForwardDiff v1.4.1 ⌅ [cd3eb016] + HTTP v1.11.0 [92d709cd] + IrrationalConstants v0.2.6 [692b3bcd] + JLLWrappers v1.8.0 [682c06a0] + JSON v1.6.1 [4076af6c] + JuMP v1.30.1 [2ab3a3ac] + LogExpFunctions v1.0.1 [e6f89c97] + LoggingExtras v1.2.0 [1914dd2f] + MacroTools v0.5.16 [b8f27783] + MathOptInterface v1.51.1 [739be429] + MbedTLS v1.1.10 [d8a4904e] + MutableArithmetics v1.8.0 [77ba4419] + NaNMath v1.1.4 [4d8831e6] + OpenSSL v1.6.1 ⌅ [bac558e1] + OrderedCollections v1.8.2 [69de0a69] + Parsers v2.8.5 [aea7be01] + PrecompileTools v1.3.4 [21216c6a] + Preferences v1.5.2 [3cdcf5f2] + RecipesBase v1.3.4 [189a3867] + Reexport v1.2.2 [f4570300] + SDDP v1.13.2 [777ac1f9] + SimpleBufferStream v1.2.0 [276daf66] + SpecialFunctions v2.8.0 [1e83bf80] + StaticArraysCore v1.4.4 [10745b16] + Statistics v1.11.1 [ec057cc2] + StructUtils v2.8.2 [a759f4b9] + TimerOutputs v0.5.29 [3bb67fe8] + TranscodingStreams v0.11.3 [5c2747f8] + URIs v1.6.1 [6e34b625] + Bzip2_jll v1.0.9+0 [c8ffd9c3] + MbedTLS_jll v2.28.1010+0 [efe28fd5] + OpenSpecFun_jll v0.5.6+0 [56f22d72] + Artifacts v1.11.0 [2a0f44e3] + Base64 v1.11.0 [ade2ca70] + Dates v1.11.0 [8ba89e20] + Distributed v1.11.0 [b77e0a4c] + InteractiveUtils v1.11.0 [ac6e5ff7] + JuliaSyntaxHighlighting v1.13.0 [8f399da3] + Libdl v1.11.0 [37e2e46d] + LinearAlgebra v1.14.0 [56ddb016] + Logging v1.11.0 [d6f4376e] + Markdown v1.11.0 [ca575930] + NetworkOptions v1.3.0 [de0858da] + Printf v1.11.0 [9a3f8284] + Random v1.11.0 [ea8e919c] + SHA v1.13.0 [9e88b42a] + Serialization v1.11.0 [6462fe0b] + Sockets v1.11.0 [2f01184e] + SparseArrays v1.13.0 [f489334b] + StyledStrings v1.13.0 [fa267f1f] + TOML v1.0.3 [8dfed614] + Test v1.11.0 [cf7118a7] + UUIDs v1.11.0 [4ec0a83e] + Unicode v1.11.0 [e66e0078] + CompilerSupportLibraries_jll v1.5.2+0 [14a3606d] + MozillaCACerts_jll v2026.5.14 [4536629a] + OpenBLAS_jll v0.3.33+0 [05823500] + OpenLibm_jll v0.8.7+0 [458c3c95] + OpenSSL_jll v3.5.7+0 [bea87d4a] + SuiteSparse_jll v7.10.1+0 [83775a58] + Zlib_jll v1.3.2+0 [8e850b90] + libblastrampoline_jll v5.15.0+0 Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m` Installation completed after 5.71s ################################################################################ # Precompilation # Precompiling PkgEval dependencies... Precompiling package dependencies... Precompiling project... 3.7 s ✓ HiGHS_jll 61.2 s ✓ MathOptIIS ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 ✗ SDDP ERROR: LoadError: UndefVarError: `processFontArg!` not defined in `Plots` Suggestion: check for spelling errors or missing imports. Stacktrace:  [1] macro expansion  @ ~/.julia/packages/Plots/GIume/src/args.jl:1401 [inlined]  [2] preprocess_attributes!(plotattributes::Dict{Symbol, Any})  @ Plots ~/.julia/packages/Plots/GIume/src/args.jl:1332  [3] default(; reset::Bool, kw::@Kwargs{titlefont::Tuple{Int64, String}, legendfontsize::Int64, guidefont::Tuple{Int64, Symbol}, tickfont::Tuple{Int64, Symbol}, guide::String, framestyle::Symbol, yminorgrid::Bool})  @ Plots ~/.julia/packages/Plots/GIume/src/args.jl:1040  [4] var"##42#1067"()  @ Plots ~/.julia/packages/Plots/GIume/src/init.jl:671  [5] top-level scope  @ none:122  [6] eval(m::Module, e::Any)  @ Core boot.jl:522  [7] _broadcast_getindex_evalf(f::Core.EvalInto, args::Expr)  @ Base.Broadcast broadcast.jl:702 [inlined]  [8] _broadcast_getindex(bc::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Tuple{Base.OneTo{Int64}}, Core.EvalInto, Tuple{Base.Broadcast.Extruded{Vector{Expr}, Tuple{Bool}, Tuple{Int64}}}}, I::Int64)  @ Base.Broadcast broadcast.jl:675 [inlined]  [9] _getindex(::IndexLinear, bc::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Tuple{Base.OneTo{Int64}}, Core.EvalInto, Tuple{Base.Broadcast.Extruded{Vector{Expr}, Tuple{Bool}, Tuple{Int64}}}}, I::Int64)  @ Base.Broadcast broadcast.jl:619 [inlined]  [10] getindex(bc::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Tuple{Base.OneTo{Int64}}, Core.EvalInto, Tuple{Base.Broadcast.Extruded{Vector{Expr}, Tuple{Bool}, Tuple{Int64}}}}, Is::Int64)  @ Base.Broadcast broadcast.jl:615 [inlined]  [11] copyto_nonleaf!(dest::Vector{Nothing}, bc::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Tuple{Base.OneTo{Int64}}, Core.EvalInto, Tuple{Base.Broadcast.Extruded{Vector{Expr}, Tuple{Bool}, Tuple{Int64}}}}, iter::Base.OneTo{Int64}, state::Int64, count::Int64)  @ Base.Broadcast broadcast.jl:1115  [12] copy(bc::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Tuple{Base.OneTo{Int64}}, Core.EvalInto, Tuple{Vector{Expr}}})  @ Base.Broadcast broadcast.jl:952 [inlined]  [13] materialize(bc::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Nothing, Core.EvalInto, Tuple{Vector{Expr}}})  @ Base.Broadcast broadcast.jl:899 [inlined]  [14] macro expansion  @ ~/.julia/packages/Plots/GIume/src/init.jl:130 [inlined]  [15] macro expansion  @ ~/.julia/packages/Plots/GIume/src/init.jl:126 [inlined]  [16] (::Plots.var"##->###30"{Vector{Expr}, Vector{Expr}})()  @ Plots ~/.julia/packages/Plots/GIume/src/init.jl:96  [17] withenv(::Plots.var"##->###30"{Vector{Expr}, Vector{Expr}}, ::Pair{String, String}, ::Vararg{Pair{String, String}})  @ Base env.jl:265  [18] macro expansion  @ ~/.julia/packages/Plots/GIume/src/init.jl:127 [inlined]  [19] macro expansion  @ ~/.julia/packages/Plots/GIume/src/init.jl:126 [inlined]  [20] top-level scope  @ ~/.julia/packages/Plots/GIume/src/init.jl:96  [21] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [22] top-level scope  @ ~/.julia/packages/Plots/GIume/src/Plots.jl:176  [23] include(mod::Module, _path::String)  @ Base Base.jl:325  [24] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [25] top-level scope  @ stdin:5  [26] eval(m::Module, e::Any)  @ Core boot.jl:522  [27] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [28] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [29] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [30] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/Plots/GIume/src/init.jl:96 in expression starting at /home/pkgeval/.julia/packages/Plots/GIume/src/Plots.jl:1 in expression starting at stdin:5 ✗ Plots 99.0 s ✓ HiGHS 3 dependencies successfully precompiled in 572 seconds. 205 already precompiled. Precompilation completed after 601.91s ################################################################################ # Testing # Testing SDDP Status `/tmp/jl_m5UDqS/Project.toml` ⌅ [87dc4568] HiGHS v1.22.2 [b6b21f68] Ipopt v1.14.3 [682c06a0] JSON v1.6.1 [7d188eb4] JSONSchema v1.5.0 [91a5bcdd] Plots v1.41.6 [f4570300] SDDP v1.13.2 [10745b16] Statistics v1.11.1 [8ba89e20] Distributed v1.11.0 [f43a241f] Downloads v1.7.0 [44cfe95a] Pkg v1.14.0 [9a3f8284] Random v1.11.0 [8dfed614] Test v1.11.0 Status `/tmp/jl_m5UDqS/Manifest.toml` [66dad0bd] AliasTables v1.1.3 [d1d4a3ce] BitFlags v0.1.10 [523fee87] CodecBzip2 v0.8.5 [944b1d66] CodecZlib v0.7.8 [35d6a980] ColorSchemes v3.31.0 [3da002f7] ColorTypes v0.12.1 [c3611d14] ColorVectorSpace v0.11.0 [5ae59095] Colors v0.13.1 [bbf7d656] CommonSubexpressions v0.3.1 [f0e56b4a] ConcurrentUtilities v2.5.1 [d38c429a] Contour v0.6.3 [9a962f9c] DataAPI v1.16.0 [864edb3b] DataStructures v0.19.5 [8bb1440f] DelimitedFiles v1.9.1 [163ba53b] DiffResults v1.1.0 [b552c78f] DiffRules v1.16.0 [ffbed154] DocStringExtensions v0.9.5 [460bff9d] ExceptionUnwrapping v0.1.11 [e2ba6199] ExprTools v0.1.10 [c87230d0] FFMPEG v0.4.5 ⌅ [53c48c17] FixedPointNumbers v0.8.6 [1fa38f19] Format v1.3.7 [f6369f11] ForwardDiff v1.4.1 [28b8d3ca] GR v0.73.26 [42e2da0e] Grisu v1.0.2 ⌅ [cd3eb016] HTTP v1.11.0 ⌅ [87dc4568] HiGHS v1.22.2 [b6b21f68] Ipopt v1.14.3 [92d709cd] IrrationalConstants v0.2.6 [1019f520] JLFzf v0.1.11 [692b3bcd] JLLWrappers v1.8.0 [682c06a0] JSON v1.6.1 [7d188eb4] JSONSchema v1.5.0 [4076af6c] JuMP v1.30.1 [b964fa9f] LaTeXStrings v1.4.0 [23fbe1c1] Latexify v0.16.10 [2ab3a3ac] LogExpFunctions v1.0.1 [e6f89c97] LoggingExtras v1.2.0 [1914dd2f] MacroTools v0.5.16 ⌅ [8c4f8055] MathOptIIS v0.1.2 [b8f27783] MathOptInterface v1.51.1 [739be429] MbedTLS v1.1.10 [442fdcdd] Measures v0.3.3 [e1d29d7a] Missings v1.2.0 [d8a4904e] MutableArithmetics v1.8.0 [77ba4419] NaNMath v1.1.4 [4d8831e6] OpenSSL v1.6.1 ⌅ [bac558e1] OrderedCollections v1.8.2 [69de0a69] Parsers v2.8.5 [ccf2f8ad] PlotThemes v3.3.0 [995b91a9] PlotUtils v1.4.4 [91a5bcdd] Plots v1.41.6 [aea7be01] PrecompileTools v1.3.4 [21216c6a] Preferences v1.5.2 [43287f4e] PtrArrays v1.4.0 [3cdcf5f2] RecipesBase v1.3.4 [01d81517] RecipesPipeline v0.6.12 [189a3867] Reexport v1.2.2 [05181044] RelocatableFolders v1.0.1 [ae029012] Requires v1.3.1 [f4570300] SDDP v1.13.2 [6c6a2e73] Scratch v1.3.0 [992d4aef] Showoff v1.0.3 [777ac1f9] SimpleBufferStream v1.2.0 [a2af1166] SortingAlgorithms v1.2.2 [276daf66] SpecialFunctions v2.8.0 [860ef19b] StableRNGs v1.0.4 [1e83bf80] StaticArraysCore v1.4.4 [10745b16] Statistics v1.11.1 [82ae8749] StatsAPI v1.8.0 [2913bbd2] StatsBase v0.34.11 [ec057cc2] StructUtils v2.8.2 [62fd8b95] TensorCore v0.1.1 [a759f4b9] TimerOutputs v0.5.29 [3bb67fe8] TranscodingStreams v0.11.3 [5c2747f8] URIs v1.6.1 [1cfade01] UnicodeFun v0.4.1 [41fe7b60] Unzip v0.2.0 [ae81ac8f] ASL_jll v0.1.3+0 [6e34b625] Bzip2_jll v1.0.9+0 [83423d85] Cairo_jll v1.18.7+0 [ee1fde0b] Dbus_jll v1.16.2+0 [2702e6a9] EpollShim_jll v0.0.20230411+1 [2e619515] Expat_jll v2.8.1+0 [b22a6f82] FFMPEG_jll v8.1.0+0 [a3f928ae] Fontconfig_jll v2.17.1+0 [d7e528f0] FreeType2_jll v2.14.3+1 [559328eb] FriBidi_jll v1.0.17+0 [0656b61e] GLFW_jll v3.4.1+1 [d2c73de3] GR_jll v0.73.26+0 ⌅ [b0724c58] GettextRuntime_jll v0.22.4+0 [61579ee1] Ghostscript_jll v9.55.1+0 [7746bdde] Glib_jll v2.86.3+0 [3b182d85] Graphite2_jll v1.3.15+0 [2e76f6c2] HarfBuzz_jll v8.5.1+0 ⌅ [8fd58aa0] HiGHS_jll v1.13.1+0 [e33a78d0] Hwloc_jll v2.13.0+1 ⌅ [9cc047cb] Ipopt_jll v300.1400.1901+0 [aacddb02] JpegTurbo_jll v3.1.5+0 [c1c5ebd0] LAME_jll v3.100.3+0 [88015f11] LERC_jll v4.1.0+0 [1d63c593] LLVMOpenMP_jll v18.1.8+0 ⌅ [e9f186c6] Libffi_jll v3.4.7+0 [7e76a0d4] Libglvnd_jll v1.7.1+1 [94ce4f54] Libiconv_jll v1.18.0+0 [4b2f31a3] Libmount_jll v2.42.0+0 [89763e89] Libtiff_jll v4.7.2+0 [38a345b3] Libuuid_jll v2.42.0+0 [d00139f3] METIS_jll v5.1.3+0 ⌅ [d7ed1dd3] MUMPS_seq_jll v500.800.200+0 [c8ffd9c3] MbedTLS_jll v2.28.1010+0 [e7412a2a] Ogg_jll v1.3.6+0 [656ef2d0] OpenBLAS32_jll v0.3.33+1 [efe28fd5] OpenSpecFun_jll v0.5.6+0 [91d4177d] Opus_jll v1.6.1+0 [36c8627f] Pango_jll v1.57.1+0 [30392449] Pixman_jll v0.46.4+0 [c0090381] Qt6Base_jll v6.10.2+2 [629bc702] Qt6Declarative_jll v6.10.2+1 [ce943373] Qt6ShaderTools_jll v6.10.2+1 [6de9746b] Qt6Svg_jll v6.10.2+0 [e99dba38] Qt6Wayland_jll v6.10.2+1 [319450e9] SPRAL_jll v2025.9.18+0 [a44049a8] Vulkan_Loader_jll v1.3.243+0 [a2964d1f] Wayland_jll v1.24.0+0 ⌅ [02c8fc9c] XML2_jll v2.13.9+0 [ffd25f8a] XZ_jll v5.8.3+0 [f67eecfb] Xorg_libICE_jll v1.1.2+0 [c834827a] Xorg_libSM_jll v1.2.6+0 [4f6342f7] Xorg_libX11_jll v1.8.13+0 [0c0b7dd1] Xorg_libXau_jll v1.0.13+0 [935fb764] Xorg_libXcursor_jll v1.2.4+0 [a3789734] Xorg_libXdmcp_jll v1.1.6+0 [1082639a] Xorg_libXext_jll v1.3.8+0 [d091e8ba] Xorg_libXfixes_jll v6.0.2+0 [a51aa0fd] Xorg_libXi_jll v1.8.3+0 [d1454406] Xorg_libXinerama_jll v1.1.7+0 [ec84b674] Xorg_libXrandr_jll v1.5.6+0 [ea2f1a96] Xorg_libXrender_jll v0.9.12+0 [a65dc6b1] Xorg_libpciaccess_jll v0.19.0+0 [c7cfdc94] Xorg_libxcb_jll v1.17.1+0 [cc61e674] Xorg_libxkbfile_jll v1.2.0+0 [e920d4aa] Xorg_xcb_util_cursor_jll v0.1.6+0 [12413925] Xorg_xcb_util_image_jll v0.4.1+0 [2def613f] Xorg_xcb_util_jll v0.4.1+0 [975044d2] Xorg_xcb_util_keysyms_jll v0.4.1+0 [0d47668e] Xorg_xcb_util_renderutil_jll v0.3.10+0 [c22f9ab0] Xorg_xcb_util_wm_jll v0.4.2+0 [35661453] Xorg_xkbcomp_jll v1.4.7+0 [33bec58e] Xorg_xkeyboard_config_jll v2.47.0+1 [c5fb5394] Xorg_xtrans_jll v1.6.0+0 [35ca27e7] eudev_jll v3.2.14+0 [214eeab7] fzf_jll v0.61.1+0 [a4ae2306] libaom_jll v3.13.3+0 [0ac62f75] libass_jll v0.17.4+0 [1183f4f0] libdecor_jll v0.2.2+0 [8e53e030] libdrm_jll v2.4.125+1 [2db6ffa8] libevdev_jll v1.13.4+0 [f638f0a6] libfdk_aac_jll v2.0.4+0 [36db933b] libinput_jll v1.28.1+0 [b53b4c65] libpng_jll v1.6.58+0 [9a156e7d] libva_jll v2.23.0+0 [f27f6e37] libvorbis_jll v1.3.8+0 [009596ad] mtdev_jll v1.1.7+0 ⌅ [1270edf5] x264_jll v10164.0.1+0 [dfaa095f] x265_jll v4.1.0+0 [d8fb68d0] xkbcommon_jll v1.13.0+0 [0dad84c5] ArgTools v1.2.0 [56f22d72] Artifacts v1.11.0 [2a0f44e3] Base64 v1.11.0 [ade2ca70] Dates v1.11.0 [8ba89e20] Distributed v1.11.0 [f43a241f] Downloads v1.7.0 [7b1f6079] FileWatching v1.11.0 [b77e0a4c] InteractiveUtils v1.11.0 [ac6e5ff7] JuliaSyntaxHighlighting v1.13.0 [b27032c2] LibCURL v1.0.0 [76f85450] LibGit2 v1.11.0 [8f399da3] Libdl v1.11.0 [37e2e46d] LinearAlgebra v1.14.0 [56ddb016] Logging v1.11.0 [d6f4376e] Markdown v1.11.0 [a63ad114] Mmap v1.11.0 [ca575930] NetworkOptions v1.3.0 [44cfe95a] Pkg v1.14.0 [de0858da] Printf v1.11.0 [3fa0cd96] REPL v1.11.0 [9a3f8284] Random v1.11.0 [ea8e919c] SHA v1.13.0 [9e88b42a] Serialization v1.11.0 [6462fe0b] Sockets v1.11.0 [2f01184e] SparseArrays v1.13.0 [f489334b] StyledStrings v1.13.0 [fa267f1f] TOML v1.0.3 [a4e569a6] Tar v1.10.0 [8dfed614] Test v1.11.0 [cf7118a7] UUIDs v1.11.0 [4ec0a83e] Unicode v1.11.0 [e66e0078] CompilerSupportLibraries_jll v1.5.2+0 [deac9b47] LibCURL_jll v8.20.0+1 [e37daf67] LibGit2_jll v1.9.4+0 [29816b5a] LibSSH2_jll v1.11.101+0 [14a3606d] MozillaCACerts_jll v2026.5.14 [4536629a] OpenBLAS_jll v0.3.33+0 [05823500] OpenLibm_jll v0.8.7+0 [458c3c95] OpenSSL_jll v3.5.7+0 [efcefdf7] PCRE2_jll v10.47.0+0 [bea87d4a] SuiteSparse_jll v7.10.1+0 [83775a58] Zlib_jll v1.3.2+0 [3161d3a3] Zstd_jll v1.5.7+1 [8e850b90] libblastrampoline_jll v5.15.0+0 [8e850ede] nghttp2_jll v1.69.0+0 [3f19e933] p7zip_jll v17.8.0+0 Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. Testing Running tests... [ Info: Experimental.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ Experimental.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_t6goFr" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/Experimental.jl:7 [ Info: Inner.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ Inner.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_3oLbes" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/Inner.jl:7 [ Info: MSPFormat.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ MSPFormat.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_kfGKzV" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/MSPFormat.jl:7 [ Info: algorithm.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ algorithm.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_JkhoBK" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/algorithm.jl:7 [ Info: binary_expansion.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ binary_expansion.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_RIWfdy" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/binary_expansion.jl:7 [ Info: deterministic_equivalent.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ deterministic_equivalent.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_bg0iV0" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/deterministic_equivalent.jl:7 [ Info: modeling_aids.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ modeling_aids.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_tlTQp1" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/modeling_aids.jl:7 [ Info: user_interface.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ user_interface.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_KfcPQQ" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/user_interface.jl:7 [ Info: backward_sampling_schemes.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ backward_sampling_schemes.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_dxiohN" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/plugins/backward_sampling_schemes.jl:7 [ Info: bellman_functions.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ bellman_functions.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_0FYBhY" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/plugins/bellman_functions.jl:7 [ Info: duality_handlers.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ duality_handlers.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_Mw7ZYn" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/plugins/duality_handlers.jl:7 [ Info: forward_passes.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ forward_passes.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_qdR5ma" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/plugins/forward_passes.jl:7 [ Info: local_improvement_search.jl ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ local_improvement_search.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_0GqFho" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/plugins/local_improvement_search.jl:7 [ Info: parallel_schemes.jl parallel_schemes.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: TaskFailedException nested task error: Timed out waiting to read host:port string from worker. Stacktrace: [1] worker_from_id(pg::Distributed.ProcessGroup, i::Int64) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:1118 [2] worker_from_id(i::Int64) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:1115 [inlined] [3] macro expansion @ /opt/julia/share/julia/stdlib/v1.14/Distributed/src/remotecall.jl:559 [inlined] [4] remote_do(::Function, ::Int64; kwargs::@Kwargs{}) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/remotecall.jl:539 [5] macro expansion @ /opt/julia/share/julia/stdlib/v1.14/Distributed/src/remotecall.jl:559 [inlined] [6] remote_do(::typeof(exit), ::Int64) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/remotecall.jl:539 [inlined] [7] kill(manager::Distributed.LocalManager, pid::Int64, config::WorkerConfig; profile_wait::Int64, exit_timeout::Int64, term_timeout::Int64) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/managers.jl:746 [8] kill(manager::Distributed.LocalManager, pid::Int64, config::WorkerConfig) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/managers.jl:743 [inlined] [9] create_worker(manager::Distributed.LocalManager, wconfig::WorkerConfig) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:621 [10] setup_launched_worker(manager::Distributed.LocalManager, wconfig::WorkerConfig, launched_q::Vector{Int64}) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:565 ┌[11] macro expansion │ @ /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:521 [inlined] ╰──── repeated 2 times [13] (::Distributed.var"##kw_body#addprocs_locked#0##->###2"{Vector{Int64}, Distributed.LocalManager, WorkerConfig})() @ Distributed task.jl:506 caused by: Timed out waiting to read host:port string from worker. Stacktrace: [1] read_worker_host_port(io::Base.PipeEndpoint) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:359 [2] macro expansion @ /opt/julia/share/julia/stdlib/v1.14/Distributed/src/managers.jl:582 [inlined] [3] connect(manager::Distributed.LocalManager, pid::Int64, config::WorkerConfig) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/managers.jl:563 [4] create_worker(manager::Distributed.LocalManager, wconfig::WorkerConfig) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:618 [5] setup_launched_worker(manager::Distributed.LocalManager, wconfig::WorkerConfig, launched_q::Vector{Int64}) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:565 ┌[6] macro expansion │ @ /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:521 [inlined] ╰─── repeated 2 times [8] (::Distributed.var"##kw_body#addprocs_locked#0##->###2"{Vector{Int64}, Distributed.LocalManager, WorkerConfig})() @ Distributed task.jl:506 ...and 3 more exceptions. Stacktrace: [1] sync_end(c::Channel{Any}) @ Base task.jl:630 [2] macro expansion @ task.jl:663 [inlined] [3] addprocs_locked(manager::Distributed.LocalManager; kwargs::@Kwargs{}) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:506 [4] addprocs_locked(manager::Distributed.LocalManager) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:471 [inlined] [5] macro expansion @ /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:465 [inlined] [6] addprocs(manager::Distributed.LocalManager; kwargs::@Kwargs{}) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:418 [7] macro expansion @ /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:458 [inlined] [8] addprocs(manager::Distributed.LocalManager) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/cluster.jl:418 [inlined] [9] macro expansion @ /opt/julia/share/julia/stdlib/v1.14/Distributed/src/managers.jl:472 [inlined] [10] addprocs(np::Int64; restrict::Bool, kwargs::@Kwargs{}) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/managers.jl:447 [inlined] [11] macro expansion @ /opt/julia/share/julia/stdlib/v1.14/Distributed/src/managers.jl:469 [inlined] [12] addprocs(np::Int64) @ Distributed /opt/julia/share/julia/stdlib/v1.14/Distributed/src/managers.jl:447 [13] top-level scope @ ~/.julia/packages/SDDP/R1Ovj/test/plugins/parallel_schemes.jl:9 [14] include(mapexpr::Function, mod::Module, _path::String) @ Base Base.jl:326 [15] macro expansion @ ~/.julia/packages/SDDP/R1Ovj/test/runtests.jl:17 [inlined] [16] macro expansion @ /opt/julia/share/julia/stdlib/v1.14/Test/src/Test.jl:2415 [inlined] [17] macro expansion @ /opt/julia/share/julia/stdlib/v1.14/Test/src/Test.jl:2241 [inlined] [18] util_test_directory(dir::String, exclude::Vector{String}) @ Main ~/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 [19] top-level scope @ ~/.julia/packages/SDDP/R1Ovj/test/runtests.jl:25 [20] macro expansion @ /opt/julia/share/julia/stdlib/v1.14/Test/src/Test.jl:2241 [inlined] [21] macro expansion @ /opt/julia/share/julia/stdlib/v1.14/Test/src/Test.jl:2415 [inlined] [22] macro expansion @ ~/.julia/packages/SDDP/R1Ovj/test/runtests.jl:26 [inlined] [23] include(mapexpr::Function, mod::Module, _path::String) @ Base Base.jl:326 [24] top-level scope @ none:6 [25] eval(m::Module, e::Any) @ Core boot.jl:522 [26] exec_options(opts::Base.JLOptions) @ Base client.jl:321 [27] _start() @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/plugins/parallel_schemes.jl:9 [ Info: risk_measures.jl  ====================================================================================== Information request received. A stacktrace will print followed by a 1.0 second profile. --trace-compile is enabled during profile collection. ======================================================================================  cmd: /opt/julia/bin/julia 145 running 1 of 1  signal (10): User defined signal 1 _ZN4llvm8FastISel14getRegForValueEPKNS_5ValueE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm8FastISel31handlePHINodesInSuccessorBlocksEPKNS_10BasicBlockE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm8FastISel17selectInstructionEPKNS_11InstructionE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm16SelectionDAGISel20SelectAllBasicBlocksERKNS_8FunctionE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm16SelectionDAGISel20runOnMachineFunctionERNS_15MachineFunctionE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm22SelectionDAGISelLegacy20runOnMachineFunctionERNS_15MachineFunctionE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm19MachineFunctionPass13runOnFunctionERNS_8FunctionE.part.0 at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm13FPPassManager13runOnFunctionERNS_8FunctionE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm13FPPassManager11runOnModuleERNS_6ModuleE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm6legacy15PassManagerImpl3runERNS_6ModuleE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) operator() at /source/src/jitlayers.cpp:1414:23 compileModule at /source/src/jitlayers.cpp:2390:79 materialize at /source/src/jitlayers.cpp:906:36 _ZN4llvm3orc19MaterializationTask3runEv at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) dispatch at /source/src/julia-task-dispatcher.h:353:11 _ZN4llvm3orc16ExecutionSession22dispatchOutstandingMUsEv at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm3orc16ExecutionSession17OL_completeLookupESt10unique_ptrINS0_21InProgressLookupStateESt14default_deleteIS3_EESt10shared_ptrINS0_23AsynchronousSymbolQueryEESt8functionIFvRKNS_8DenseMapIPNS0_8JITDylibENS_8DenseSetINS0_15SymbolStringPtrENS_12DenseMapInfoISF_vEEEENSG_ISD_vEENS_6detail12DenseMapPairISD_SI_EEEEEE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm3orc25InProgressFullLookupState8completeESt10unique_ptrINS0_21InProgressLookupStateESt14default_deleteIS3_EE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm3orc16ExecutionSession19OL_applyQueryPhase1ESt10unique_ptrINS0_21InProgressLookupStateESt14default_deleteIS3_EENS_5ErrorE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) _ZN4llvm3orc16ExecutionSession6lookupENS0_10LookupKindERKSt6vectorISt4pairIPNS0_8JITDylibENS0_19JITDylibLookupFlagsEESaIS8_EENS0_15SymbolLookupSetENS0_11SymbolStateENS_15unique_functionIFvNS_8ExpectedINS_8DenseMapINS0_15SymbolStringPtrENS0_17ExecutorSymbolDefENS_12DenseMapInfoISI_vEENS_6detail12DenseMapPairISI_SJ_EEEEEEEEESt8functionIFvRKNSH_IS6_NS_8DenseSetISI_SL_EENSK_IS6_vEENSN_IS6_SV_EEEEEE at /opt/julia/bin/../lib/julia/libLLVM.so.21.1jl (unknown line) publishCIs at /source/src/jitlayers.cpp:2085:14 jl_compile_codeinst_impl at /source/src/jitlayers.cpp:510:39 jl_compile_method_very_internal at /source/src/gf.c:3946:27 _jl_invoke at /source/src/gf.c:4352:16 [inlined] ijl_apply_generic at /source/src/gf.c:4598:12 jl_apply at /source/src/julia.h:2388:12 [inlined] ijl_lower at /source/src/ast.c:1274:26 jl_eval_toplevel_stmts at /source/src/toplevel.c:598:31 jl_eval_module_expr at /source/src/toplevel.c:263:5 [inlined] jl_toplevel_eval_flex at /source/src/toplevel.c:665:27 jl_eval_toplevel_stmts at /source/src/toplevel.c:602:15 jl_toplevel_eval_flex at /source/src/toplevel.c:684:27 ijl_toplevel_eval at /source/src/toplevel.c:782:12 ijl_toplevel_eval_in at /source/src/toplevel.c:827:13 eval at ./boot.jl:522:0 (pc: 1) include_string at ./loading.jl:3132:0 (pc: 207) _jl_invoke at /source/src/gf.c:4360:23 [inlined] ijl_apply_generic at /source/src/gf.c:4598:12 _include at ./loading.jl:3192:0 (pc: 122) include at ./Base.jl:325:0 (pc: 1) include_package_for_output at ./loading.jl:3296:0 (pc: 837) jfptr_include_package_for_output_1.1 at /opt/julia/lib/julia/sys.so (unknown line) _jl_invoke at /source/src/gf.c:4360:23 [inlined] ijl_apply_generic at /source/src/gf.c:4598:12 jl_apply at /source/src/julia.h:2388:12 [inlined] do_call at /source/src/interpreter.c:123:26 eval_value at /source/src/interpreter.c:243:16 eval_stmt_value at /source/src/interpreter.c:194:23 [inlined] eval_body at /source/src/interpreter.c:706:13 jl_interpret_toplevel_thunk at /source/src/interpreter.c:897:21 ijl_eval_thunk at /source/src/toplevel.c:768:18 jl_toplevel_eval_flex at /source/src/toplevel.c:712:26 jl_eval_toplevel_stmts at /source/src/toplevel.c:602:15 jl_toplevel_eval_flex at /source/src/toplevel.c:684:27 ijl_toplevel_eval at /source/src/toplevel.c:782:12 ijl_toplevel_eval_in at /source/src/toplevel.c:827:13 eval at ./boot.jl:522:0 (pc: 1) include_string at ./loading.jl:3132:0 (pc: 207) include_string at ./loading.jl:3142:0 [inlined] exec_options at ./client.jl:353:0 (pc: 841) _start at ./client.jl:596:0 (pc: 294) jfptr__start_0.1 at /opt/julia/lib/julia/sys.so (unknown line) _jl_invoke at /source/src/gf.c:4360:23 [inlined] ijl_apply_generic at /source/src/gf.c:4598:12 jl_apply at /source/src/julia.h:2388:12 [inlined] true_main at /source/src/jlapi.c:971:29 jl_repl_entrypoint at /source/src/jlapi.c:1138:15 main at /source/cli/loader_exe.c:58:15 unknown function (ip: 0x779714e26249) at /lib/x86_64-linux-gnu/libc.so.6 __libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line) unknown function (ip: 0x4010b8) at /workspace/srcdir/glibc-2.17/csu/../sysdeps/x86_64/start.S unknown function (ip: (nil)) at (unknown file)   ============================================================== Profile collected. A report will print at the next yield point. Disabling --trace-compile ==============================================================  ====================================================================================== Information request received. A stacktrace will print followed by a 1.0 second profile. --trace-compile is enabled during profile collection. ====================================================================================== cmd: /opt/julia/bin/julia 91 running 0 of 1 signal (10): User defined signal 1 epoll_pwait at /lib/x86_64-linux-gnu/libc.so.6 (unknown line) uv__io_poll at /workspace/srcdir/libuv/src/unix/linux.c:1404:0 uv_run at /workspace/srcdir/libuv/src/unix/core.c:430:0 ijl_task_get_next at /source/src/scheduler.c:524:34 wait at ./task.jl:1248:0 (pc: 107) wait_forever at ./task.jl:1170:0 (pc: 4) jfptr_wait_forever_0.1 at /opt/julia/lib/julia/sys.so (unknown line) _jl_invoke at /source/src/gf.c:4360:23 [inlined] ijl_apply_generic at /source/src/gf.c:4598:12 jl_apply at /source/src/julia.h:2388:12 [inlined] start_task at /source/src/task.c:1276:19 unknown function (ip: (nil)) at (unknown file) ============================================================== Profile collected. A report will print at the next yield point. Disabling --trace-compile ============================================================== ┌ Warning: There were no samples collected in one or more groups. │ This may be due to idle threads, or you may need to run your │ program longer (perhaps by running it multiple times), │ or adjust the delay between samples with `Profile.init()`. └ @ Profile /opt/julia/share/julia/stdlib/v1.14/Profile/src/Profile.jl:1361 Overhead ╎ [+additional indent] Count File:Line Function ========================================================= Thread 1 (default) Task 0x00007b916c841000 Total snapshots: 709. Utilization: 0% ╎709 @Base/task.jl:1170 wait_forever() 708╎ 709 @Base/task.jl:1248 wait() ====================================================================================== Information request received. A stacktrace will print followed by a 1.0 second profile. --trace-compile is enabled during profile collection. ====================================================================================== cmd: /opt/julia/bin/julia 1 running 0 of 1 signal (10): User defined signal 1 epoll_pwait at /lib/x86_64-linux-gnu/libc.so.6 (unknown line) uv__io_poll at /workspace/srcdir/libuv/src/unix/linux.c:1404:0 uv_run at /workspace/srcdir/libuv/src/unix/core.c:430:0 ijl_task_get_next at /source/src/scheduler.c:524:34 ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =# Core.@doc " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" function construct_belief_update(graph::SDDP.PolicyGraph{T}, partition::Vector{Set{T}}) where T │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1430 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1435 =# │ Φ = build_Φ(graph) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1436 =# │ Ω = Dict{T, Dict{Any, Float64}}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1437 =# │ for (index, node) = graph.nodes │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1438 =# │ Ω[index] = Dict{Any, Float64}() │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1439 =# │ for noise = node.noise_terms │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1440 =# │ (Ω[index])[noise.term] = noise.probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1441 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1442 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ function belief_updater(outgoing_belief::Dict{T, Float64}, incoming_belief::Dict{T, Float64}, observed_partition::Int, observed_noise)::Dict{T, Float64} │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1450 =# │ PY = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1451 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1452 =# │ probability = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1453 =# │ for (node_j, Ωj) = Ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1454 =# │ p_ij = get(Φ, (node_i, node_j), 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1455 =# │ p_ω = get(Ωj, observed_noise, 0.0) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1456 =# │ probability += p_ij * p_ω │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1457 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1458 =# │ PY += belief * probability │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1459 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1460 =# │ if PY ≈ 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1461 =# │ error("Unable to update belief in partition ", observed_partition, " after observing ", observed_noise, ".The incoming belief ", "is:\n ", incoming_belief) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1472 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1473 =# │ PX = sum((belief * get(Φ, (node_j, node_i), 0.0) for (node_j, belief) = incoming_belief)) │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1477 =# │ PY_X = 0.0 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1478 =# │ if node_i in partition[observed_partition] │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1479 =# │ PY_X += get(Ω[node_i], observed_noise, 0.0) │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1481 =# │ outgoing_belief[node_i] = (PY_X * PX) / PY │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1482 =# │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1483 =# │ if length(outgoing_belief) == 2 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1484 =# │ for (node_i, belief) = incoming_belief │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1485 =# │ if belief < 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1486 =# │ incoming_belief[node_i] = 0.0 │ elseif #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1487 =# belief > 1 - 1.0e-6 │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1488 =# │ incoming_belief[node_i] = 1.0 │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1490 =# │ end │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1492 =# │ return outgoing_belief │ end │ #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1494 =# │ return belief_updater │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) :: Value │ │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ │ [::] │ │ graph :: Identifier │ │ [curly] │ │ [.] │ │ SDDP :: Identifier │ │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ │ [::] │ │ partition :: Identifier │ │ [curly] │ │ Vector :: Identifier │ │ [curly] │ │ Set :: Identifier │ │ T :: Identifier │ │ T :: Identifier │ │ [block] │ │ [=] │ │ Φ :: Identifier │ │ [call] │ │ build_Φ :: Identifier │ │ graph :: Identifier │ │ [=] │ │ Ω :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ │ node :: Identifier │ │ [.] │ │ graph :: Identifier │ │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [call] │ │ [curly] │ │ Dict :: Identifier │ │ Any :: Identifier │ │ Float64 :: Identifier │ │ [for] │ │ [=] │ │ noise :: Identifier │ │ [.] │ │ node :: Identifier │ │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ │ index :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ │ [::] │ │ outgoing_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ incoming_belief :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [::] │ │ observed_partition :: Identifier │ │ Int :: Identifier │ │ observed_noise :: Identifier │ │ [curly] │ │ Dict :: Identifier │ │ T :: Identifier │ │ Float64 :: Identifier │ │ [block] │ │ [=] │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ probability :: Identifier │ │ 0.0 :: Value │ │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ Ωj :: Identifier │ │ Ω :: Identifier │ │ [block] │ │ [=] │ │ p_ij :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_i :: Identifier │ │ node_j :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ p_ω :: Identifier │ │ [call] │ │ get :: Identifier │ │ Ωj :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [unknown_head] │ │ probability :: Identifier │ │ [call] │ │ * :: Identifier │ │ p_ij :: Identifier │ │ p_ω :: Identifier │ │ [unknown_head] │ │ PY :: Identifier │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ probability :: Identifier │ │ [if] │ │ [call] │ │ ≈ :: Identifier │ │ PY :: Identifier │ │ 0.0 :: Value │ │ [block] │ │ [call] │ │ error :: Identifier │ │ "Unable to update belief in partition " :: Value │ │ observed_partition :: Identifier │ │ " after observing " :: Value │ │ observed_noise :: Identifier │ │ ".The incoming belief " :: Value │ │ "is:\n " :: Value │ │ incoming_belief :: Identifier │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [=] │ │ PX :: Identifier │ │ [call] │ │ sum :: Identifier │ │ [generator] │ │ [call] │ │ * :: Identifier │ │ belief :: Identifier │ │ [call] │ │ get :: Identifier │ │ Φ :: Identifier │ │ [tuple] │ │ node_j :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [=] │ │ PY_X :: Identifier │ │ 0.0 :: Value │ │ [if] │ │ [call] │ │ in :: Identifier │ │ node_i :: Identifier │ │ [ref] │ │ partition :: Identifier │ │ observed_partition :: Identifier │ │ [block] │ │ [unknown_head] │ │ PY_X :: Identifier │ │ [call] │ │ get :: Identifier │ │ [ref] │ │ Ω :: Identifier │ │ node_i :: Identifier │ │ observed_noise :: Identifier │ │ 0.0 :: Value │ │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ │ node_i :: Identifier │ │ [call] │ │ / :: Identifier │ │ [call] │ │ * :: Identifier │ │ PY_X :: Identifier │ │ PX :: Identifier │ │ PY :: Identifier │ │ [if] │ │ [call] │ │ == :: Identifier │ │ [call] │ │ length :: Identifier │ │ outgoing_belief :: Identifier │ │ 2 :: Value │ │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ │ belief :: Identifier │ │ incoming_belief :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ │ belief :: Identifier │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 0.0 :: Value │ │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ │ belief :: Identifier │ │ [call] │ │ - :: Identifier │ │ 1 :: Value │ │ 1.0e-6 :: Value │ │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ │ node_i :: Identifier │ │ 1.0 :: Value │ │ [return] │ │ outgoing_belief :: Identifier │ │ [return] │ │ belief_updater :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [call] │ │ construct_belief_update :: Identifier │ scope_layer=1 │ [::] │ │ graph :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [::] │ │ partition :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ Φ :: Identifier │ scope_layer=1 │ [call] │ │ build_Φ :: Identifier │ scope_layer=1 │ graph :: Identifier │ scope_layer=1 │ [=] │ │ Ω :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ index :: Identifier │ scope_layer=1 │ node :: Identifier │ scope_layer=1 │ [.] │ │ graph :: Identifier │ scope_layer=1 │ [inert] │ │ nodes :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ noise :: Identifier │ scope_layer=1 │ [.] │ │ node :: Identifier │ scope_layer=1 │ [inert] │ │ noise_terms :: Identifier │ │ [block] │ │ [=] │ │ [ref] │ │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ index :: Identifier │ scope_layer=1 │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ term :: Identifier │ │ [.] │ │ noise :: Identifier │ scope_layer=1 │ [inert] │ │ probability :: Identifier │ │ [function] │ │ [::] │ │ [call] │ │ belief_updater :: Identifier │ scope_layer=1 │ [::] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ incoming_belief :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [::] │ │ observed_partition :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ [curly] │ │ Dict :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Float64 :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ probability :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [for] │ │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ Ω :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ p_ij :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ node_j :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ p_ω :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Ωj :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [unknown_head] │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ p_ij :: Identifier │ scope_layer=1 │ p_ω :: Identifier │ scope_layer=1 │ [unknown_head] │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ probability :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ ≈ :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [block] │ │ [call] │ │ error :: Identifier │ scope_layer=1 │ "Unable to update belief in partition " :: Value │ macro_source=271 │ observed_partition :: Identifier │ scope_layer=1 │ " after observing " :: Value │ macro_source=271 │ observed_noise :: Identifier │ scope_layer=1 │ ".The incoming belief " :: Value │ macro_source=271 │ "is:\n " :: Value │ macro_source=271 │ incoming_belief :: Identifier │ scope_layer=1 │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ PX :: Identifier │ scope_layer=1 │ [call] │ │ sum :: Identifier │ scope_layer=1 │ [generator] │ │ [call] │ │ * :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ Φ :: Identifier │ scope_layer=1 │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [tuple] │ │ node_j :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [=] │ │ PY_X :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [if] │ │ [call] │ │ in :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [ref] │ │ partition :: Identifier │ scope_layer=1 │ observed_partition :: Identifier │ scope_layer=1 │ [block] │ │ [unknown_head] │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ [call] │ │ get :: Identifier │ scope_layer=1 │ [ref] │ │ Ω :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ observed_noise :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [=] │ │ [ref] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ [call] │ │ / :: Identifier │ scope_layer=1 │ [call] │ │ * :: Identifier │ scope_layer=1 │ PY_X :: Identifier │ scope_layer=1 │ PX :: Identifier │ scope_layer=1 │ PY :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ == :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ outgoing_belief :: Identifier │ scope_layer=1 │ 2 :: Value │ macro_source=271 │ [block] │ │ [for] │ │ [=] │ │ [tuple] │ │ node_i :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ incoming_belief :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ < :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 0.0 :: Value │ macro_source=271 │ [elseif] │ │ [block] │ │ [call] │ │ > :: Identifier │ scope_layer=1 │ belief :: Identifier │ scope_layer=1 │ [call] │ │ - :: Identifier │ scope_layer=1 │ 1 :: Value │ macro_source=271 │ 1.0e-6 :: Value │ macro_source=271 │ [block] │ │ [=] │ │ [ref] │ │ incoming_belief :: Identifier │ scope_layer=1 │ node_i :: Identifier │ scope_layer=1 │ 1.0 :: Value │ macro_source=271 │ [return] │ │ outgoing_belief :: Identifier │ scope_layer=1 │ [return] │ │ belief_updater :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=271 │ SDDP :: Value │ macro_source=271 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=271 │ SDDP :: Value │ │ [inert] │ jl_source=L65 │ construct_belief_update :: Identifier │ │ [call] │ macro_source=271 │ Base.Docs.docstr :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Core.svec :: Value │ macro_source=271 │ " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" :: Value │ macro_source=271 │ [call] │ macro_source=271 │ Dict{Symbol, Any} :: Value │ macro_source=271 │ :path => "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" :: Value │ macro_source=271 │ :linenumber => 1411 :: Value │ macro_source=271 │ :module => SDDP :: Value │ macro_source=271 │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ [.] │ │ SDDP :: Identifier │ scope_layer=1 │ [inert] │ │ PolicyGraph :: Identifier │ │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Vector :: Identifier │ scope_layer=1 │ [curly] │ │ Set :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl" │ line = 1411 └ mod = SDDP wait at ./task.jl:1248:0 (pc: 107) wait_forever at ./task.jl:1170:0 (pc: 4) jfptr_wait_forever_0.1 at /opt/julia/lib/julia/sys.so (unknown line) _jl_invoke at /source/src/gf.c:4360:23 [inlined] ijl_apply_generic at /source/src/gf.c:4598:12 jl_apply at /source/src/julia.h:2388:12 [inlined] start_task at /source/src/task.c:1276:19 unknown function (ip: (nil)) at (unknown file) ============================================================== Profile collected. A report will print at the next yield point. Disabling --trace-compile ============================================================== │ exception = │ This interactive function requires a stdlib to be loaded, and package code should instead use it directly from that stdlib. │ Stacktrace: │ [1] error(s::String) │ @ Base error.jl:56 │ [2] require_stdlib(package_uuidkey::Base.PkgId, ext::Nothing, from::Module) │ @ Base loading.jl:3024 │ [3] require_stdlib(package_uuidkey::Base.PkgId) │ @ Base loading.jl:3020 [inlined] │ [4] macro expansion │ @ some.jl:157 [inlined] │ [5] profile_printing_listener(cond::Base.AsyncCondition) │ @ Base Base.jl:357 │ [6] (::Base.var"#start_profile_listener##0#start_profile_listener##1"{Base.AsyncCondition})() │ @ Base Base.jl:376 └ @ Base Base.jl:367  include_ns=308282446475 deps_ns=66322842857 compilation_ns=47511407 methods=1882 ┌ Warning: There were no samples collected in one or more groups. │ This may be due to idle threads, or you may need to run your │ program longer (perhaps by running it multiple times), │ or adjust the delay between samples with `Profile.init()`. └ @ Profile /opt/julia/share/julia/stdlib/v1.14/Profile/src/Profile.jl:1361 Overhead ╎ [+additional indent] Count File:Line Function ========================================================= Thread 1 (default) Task 0x000079bcdfb1e4a0 Total snapshots: 283. Utilization: 0% ╎283 @Base/task.jl:1170 wait_forever() 282╎ 283 @Base/task.jl:1248 wait() ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443 =# - Found unexpected binding of kind static_parameter Expression:  #₆₇/T Containing expressions:  (= #₁₄₅/T #₆₇/T)  (call core.svec (call core.svec #₁₁₉/#construct_belief_update#belief_updater##0 (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  (call core.svec (call core.svec (function_type #₆₈/belief_updater) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) (call core.apply_type #₇₂/Dict #₆₇/T #₇₄/Float64) #₇₈/Int core.Any) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443:0)  Detailed provenance:  #₆₇/T  └─ T  └─ T  ├─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1443  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 =#) " construct_belief_update(graph::PolicyGraph{T}, partition::Vector{Set{T}})\n\nReturns a function that calculates the belief update. That function has the\nfollowing signature and returns the outgoing belief:\n\n belief_update(\n incoming_belief::Dict{T, Float64},\n observed_partition::Int,\n observed_noise\n )::Dict{T,Float64}\n\nWe use Bayes theorem: P(X′ | Y) = P(Y | X′) × P(X′) / P(Y), where P(Xᵢ′ | Y) is\nthe probability of being in node i given the observation of ω. In addition\n\n - P(Xⱼ′) = ∑ᵢ P(Xᵢ) × Φᵢⱼ\n - P(Y|Xᵢ′) = P(ω ∈ Ωᵢ)\n - P(Y) = ∑ᵢ P(Xᵢ′) × P(ω ∈ Ωᵢ)\n" (function (where (call construct_belief_update (:: graph (curly (. SDDP (inert PolicyGraph)) T)) (:: partition (curly Vector (curly Set T)))) T) (block (= Φ (call build_Φ graph)) (= Ω (call (curly Dict T (curly Dict Any Float64)))) (for (= (tuple index node) (. graph (inert nodes))) (block (= (ref Ω index) (call (curly Dict Any Float64))) (for (= noise (. node (inert noise_terms))) (block (= (ref (ref Ω index) (. noise (inert term))) (. noise (inert probability))))))) (function (:: (call belief_updater (:: outgoing_belief (curly Dict T Float64)) (:: incoming_belief (curly Dict T Float64)) (:: observed_partition Int) observed_noise) (curly Dict T Float64)) (block (= PY 0.0) (for (= (tuple node_i belief) incoming_belief) (block (= probability 0.0) (for (= (tuple node_j Ωj) Ω) (block (= p_ij (call get Φ (tuple node_i node_j) 0.0)) (= p_ω (call get Ωj observed_noise 0.0)) (unknown_head probability (call * p_ij p_ω)))) (unknown_head PY (call * belief probability)))) (if (call ≈ PY 0.0) (block (call error "Unable to update belief in partition " observed_partition " after observing " observed_noise ".The incoming belief " "is:\n " incoming_belief))) (for (= (tuple node_i belief) incoming_belief) (block (= PX (call sum (generator (call * belief (call get Φ (tuple node_j node_i) 0.0)) (= (tuple node_j belief) incoming_belief)))) (= PY_X 0.0) (if (call in node_i (ref partition observed_partition)) (block (unknown_head PY_X (call get (ref Ω node_i) observed_noise 0.0)))) (= (ref outgoing_belief node_i) (call / (call * PY_X PX) PY)))) (if (call == (call length outgoing_belief) 2) (block (for (= (tuple node_i belief) incoming_belief) (block (if (call < belief 1.0e-6) (block (= (ref incoming_belief node_i) 0.0)) (elseif (block (call > belief (call - 1 1.0e-6))) (block (= (ref incoming_belief node_i) 1.0)))))))) (return outgoing_belief))) (return belief_updater))))  └─ @ /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:29  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/user_interface.jl:1411 in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/src/SDDP.jl:7 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ SDDP │ [Output was shown above] └ risk_measures.jl: Error During Test at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/runtests.jl:14 Got exception outside of a @test LoadError: The following 1 package failed to precompile: SDDP Failed to precompile SDDP [f4570300-c277-11e8-125c-4912f86ce65d] to "/home/pkgeval/.julia/compiled/v1.14/SDDP/jl_uTz7pc" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/plugins/risk_measures.jl:7 [ Info: sampling_schemes.jl [1] signal 15: Terminated in expression starting at /PkgEval.jl/scripts/evaluate.jl:214 epoll_pwait at /lib/x86_64-linux-gnu/libc.so.6 (unknown line) uv__io_poll at /workspace/srcdir/libuv/src/unix/linux.c:1404:0 uv_run at /workspace/srcdir/libuv/src/unix/core.c:430:0 ijl_task_get_next at /source/src/scheduler.c:524:34 wait at ./task.jl:1248:0 (pc: 107) wait_forever at ./task.jl:1170:0 (pc: 4) jfptr_wait_forever_0.1 at /opt/julia/lib/julia/sys.so (unknown line) _jl_invoke at /source/src/gf.c:4360:23 [inlined] ijl_apply_generic at /source/src/gf.c:4598:12 jl_apply at /source/src/julia.h:2388:12 [inlined] start_task at /source/src/task.c:1276:19 unknown function (ip: (nil)) at (unknown file) Allocations: 24336293 (Pool: 24335490; Big: 803); GC: 19 [91] signal 15: Terminated in expression starting at /home/pkgeval/.julia/packages/SDDP/R1Ovj/test/plugins/sampling_schemes.jl:9 epoll_pwait at /lib/x86_64-linux-gnu/libc.so.6 (unknown line) uv__io_poll at /workspace/srcdir/libuv/src/unix/linux.c:1404:0 uv_run at /workspace/srcdir/libuv/src/unix/core.c:430:0 ijl_task_get_next at /source/src/scheduler.c:524:34 wait at ./task.jl:1248:0 (pc: 107) wait_forever at ./task.jl:1170:0 (pc: 4) jfptr_wait_forever_0.1 at /opt/julia/lib/julia/sys.so (unknown line) _jl_invoke at /source/src/gf.c:4360:23 [inlined] ijl_apply_generic at /source/src/gf.c:4598:12 jl_apply at /source/src/julia.h:2388:12 [inlined] start_task at /source/src/task.c:1276:19 unknown function (ip: (nil)) at (unknown file) Allocations: 26942734 (Pool: 26942410; Big: 324); GC: 80 PkgEval terminated after 2733.89s: test duration exceeded the time limit