hamzaelsaawy/DiscreteFactors.jl

new version of `join` broken

Closed this issue · 0 comments

Hi!

f1 = Factor([:a], [1;1])
f2 = Factor([:a], [1;1])
join(*, f1, f2)

throws an error while
join(*, f1, f1)
works fine.

This is due to lines 20-24 of index_join.jl:

common = intersect(ϕ1.dimensions, ϕ2.dimensions)
index_common1 = indexin(common, ϕ1.dimensions)
index_common2 = indexin(common, ϕ2.dimensions)
if [size(ϕ1)[index_common1]...] != [size(ϕ2)[index_common2]...]

here, common correctly identifies that the dimensions are identical, but the indexin implementation is dictionary based, and the hashes of the identical dimensions in f1 and f2 are different, so the second indexin will return 0 and cause a bounds error when trying to index the size.

Not sure the best way to fix this?