@@ -13,19 +13,19 @@ const alphabet_lookup = Dict([l => i for (i, l) in enumerate(alphabet)])
1313has_discrete_proposal (:: StringPrior ) = true
1414
1515# Assume proposal_atoms are unique.
16- function discrete_proposal (:: StringPrior , min_length:: Int , max_length:: Int , proposal_atoms:: Vector{String } ):: Tuple{Vector{Union{String , ProposalDummyValue}}, Vector{Float64}}
17- options = Union{String , ProposalDummyValue}[proposal_atoms... , proposal_dummy_value ]
16+ function discrete_proposal (:: StringPrior , min_length:: Int , max_length:: Int , proposal_atoms:: Vector{T } ):: Tuple{Vector{Union{T , ProposalDummyValue}}, Vector{Float64}} where T <: AbstractString
17+ options = Union{T , ProposalDummyValue}[proposal_atoms... , PROPOSAL_DUMMY_VALUE ]
1818 probs = map (s -> logdensity (StringPrior (), s, min_length, max_length, proposal_atoms), proposal_atoms)
1919 total = logsumexp (probs)
2020 probs = Float64[probs... , log1p (- exp (total))]
2121 return (options, probs)
2222end
2323
24- discrete_proposal_dummy_value (:: StringPrior , min_length:: Int , max_length:: Int , proposal_atoms:: Vector{String } ) = begin
24+ discrete_proposal_dummy_value (:: StringPrior , min_length:: Int , max_length:: Int , proposal_atoms:: Vector{<:AbstractString } ) = begin
2525 join (fill (" *" , Int (floor ((min_length + max_length) / 2 ))))
2626end
2727
28- random (:: StringPrior , min_length:: Int , max_length:: Int , proposal_atoms:: Vector{String } ) = begin
28+ random (:: StringPrior , min_length:: Int , max_length:: Int , proposal_atoms:: Vector{<:AbstractString } ) = begin
2929 len = rand (DiscreteUniform (min_length, max_length))
3030 letters = []
3131 for i= 1 : len
4040
4141const UNUSUAL_LETTER_PENALTY = 1000
4242const string_prior_density_dict = Dict {Tuple{String, Int, Int}, Float64} ()
43- function logdensity (:: StringPrior , observed:: String , min_length:: Int , max_length:: Int , proposal_atoms:: Vector{String } )
43+ function logdensity (:: StringPrior , observed:: AbstractString , min_length:: Int , max_length:: Int , proposal_atoms:: Vector{<:AbstractString } )
4444 get! (string_prior_density_dict, (observed, min_length, max_length)) do
4545 if length (observed) < min_length || length (observed) > max_length
4646 return - Inf
0 commit comments