Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bat_report() error: Tuple field type cannot be Union{} #446

Closed
gipert opened this issue Jul 16, 2024 · 2 comments
Closed

bat_report() error: Tuple field type cannot be Union{} #446

gipert opened this issue Jul 16, 2024 · 2 comments

Comments

@gipert
Copy link

gipert commented Jul 16, 2024

Is this a bug? The samples seem sane...

using StatsBase
using Statistics
using Distributions
using BAT
using DensityInterface
using IntervalSets

counts = (pass = [3, 102, 3], fail = [3, 4, 1])

likelihood = let data = counts
    
    function logpdf_poisson(ν, μ)
        return logpdf(Poisson+ eps(μ)), ν)
    end
    
    logfuncdensity(function (parameters)
        p = parameters
        return (
            logpdf_poisson(counts.pass[1] + counts.pass[3], 2 * p.μb * p.ϵb) +
            logpdf_poisson(counts.fail[1] + counts.fail[3], 2 * p.μb * (1 - p.ϵb)) +
            logpdf_poisson(counts.pass[2], p.μb * p.ϵb + p.μs * p.ϵs) +
            logpdf_poisson(counts.fail[2], p.μb + p.μs - p.μb * p.ϵb - p.μs * p.ϵs)
        )      
    end)
end

prior = distprod(
    μb = 0..200,
    μs = 0..200,
    ϵb = 0..(1-eps()),
    ϵs = 0..(1-eps()),
)

posterior = PosteriorMeasure(likelihood, prior)
samples = bat_sample(posterior, MCMCSampling(mcalg = MetropolisHastings(), nsteps = 10^5, nchains = 4)).result
bat_report(samples)

Output:

Tuple field type cannot be Union{}

Stacktrace:
 [1] #s1#1
   @ ~/.julia/packages/TypedTables/ItVth/src/TypedTables.jl:22 [inlined]
 [2] var"#s1#1"(names::Any, T::Any, ::Any, a::Any)
   @ TypedTables ./none:0
 [3] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any})
   @ Core ./boot.jl:602
 [4] _table(nt::@NamedTuple{parameter::Vector{Symbol}, value::Vector{Union{}}})
   @ TypedTables ~/.julia/packages/TypedTables/ItVth/src/Table.jl:31
 [5] Table
   @ ~/.julia/packages/TypedTables/ItVth/src/Table.jl:24 [inlined]
 [6] fixed_parameter_table(smplv::StructArrays.StructVector{DensitySample{@NamedTuple{μb::Float64, μs::Float64, ϵb::Float64, ϵs::Float64}, Float64, Int64, BAT.MCMCSampleID, Nothing}, @NamedTuple{v::ValueShapes.ShapedAsNTArray{@NamedTuple{μb::Float64, μs::Float64, ϵb::Float64, ϵs::Float64}, 1, ArraysOfArrays.ArrayOfSimilarArrays{Float64, 1, 1, 2, ElasticArrays.ElasticMatrix{Float64, Vector{Float64}}}, ValueShapes.NamedTupleShape{(:μb, :μs, :ϵb, :ϵs), NTuple{4, ValueShapes.ValueAccessor{ValueShapes.ScalarShape{Real}}}, NamedTuple}}, logd::Vector{Float64}, weight::Vector{Int64}, info::StructArrays.StructVector{BAT.MCMCSampleID, @NamedTuple{chainid::Vector{Int32}, chaincycle::Vector{Int32}, stepno::Vector{Int64}, sampletype::Vector{Int64}}, Int64}, aux::Vector{Nothing}}, Int64})
   @ BAT ~/.julia/packages/BAT/pYfQ6/src/statistics/report.jl:63
 [7] bat_report!(md::Markdown.MD, smplv::StructArrays.StructVector{DensitySample{@NamedTuple{μb::Float64, μs::Float64, ϵb::Float64, ϵs::Float64}, Float64, Int64, BAT.MCMCSampleID, Nothing}, @NamedTuple{v::ValueShapes.ShapedAsNTArray{@NamedTuple{μb::Float64, μs::Float64, ϵb::Float64, ϵs::Float64}, 1, ArraysOfArrays.ArrayOfSimilarArrays{Float64, 1, 1, 2, ElasticArrays.ElasticMatrix{Float64, Vector{Float64}}}, ValueShapes.NamedTupleShape{(:μb, :μs, :ϵb, :ϵs), NTuple{4, ValueShapes.ValueAccessor{ValueShapes.ScalarShape{Real}}}, NamedTuple}}, logd::Vector{Float64}, weight::Vector{Int64}, info::StructArrays.StructVector{BAT.MCMCSampleID, @NamedTuple{chainid::Vector{Int32}, chaincycle::Vector{Int32}, stepno::Vector{Int64}, sampletype::Vector{Int64}}, Int64}, aux::Vector{Nothing}}, Int64})
   @ BAT ~/.julia/packages/BAT/pYfQ6/src/statistics/report.jl:95
 [8] bat_report(obj::StructArrays.StructVector{DensitySample{@NamedTuple{μb::Float64, μs::Float64, ϵb::Float64, ϵs::Float64}, Float64, Int64, BAT.MCMCSampleID, Nothing}, @NamedTuple{v::ValueShapes.ShapedAsNTArray{@NamedTuple{μb::Float64, μs::Float64, ϵb::Float64, ϵs::Float64}, 1, ArraysOfArrays.ArrayOfSimilarArrays{Float64, 1, 1, 2, ElasticArrays.ElasticMatrix{Float64, Vector{Float64}}}, ValueShapes.NamedTupleShape{(:μb, :μs, :ϵb, :ϵs), NTuple{4, ValueShapes.ValueAccessor{ValueShapes.ScalarShape{Real}}}, NamedTuple}}, logd::Vector{Float64}, weight::Vector{Int64}, info::StructArrays.StructVector{BAT.MCMCSampleID, @NamedTuple{chainid::Vector{Int32}, chaincycle::Vector{Int32}, stepno::Vector{Int64}, sampletype::Vector{Int64}}, Int64}, aux::Vector{Nothing}}, Int64})
   @ BAT ~/.julia/packages/BAT/pYfQ6/src/statistics/report.jl:17
 [9] top-level scope
   @ In[39]:1
@oschulz
Copy link
Member

oschulz commented Jul 16, 2024

That looks like a bug, TypedTables.Table(samples.v) works fine, for example. I'll look into it.

@oschulz
Copy link
Member

oschulz commented Jul 28, 2024

Should be fixed now.

@oschulz oschulz closed this as completed Jul 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants