First time here? Check out the FAQ!

Ask Your Question
0

Test for Set equality

asked 1 year ago

Emmanuel Charpentier gravatar image

[ Note : as of 2023-12-24, my browser retrieves this question that seems t have never been asked, (an still of interest). So I pot it very lately... ]

Inspired by this question, I stumbled in an unexpected difficulty when trying to compare two Sets :

sage: L[:2]
[[
[ 2 -2]  [0 1]  [   0    1]
[-2  1], [0 1], [   0 -1/2]
],
 [
[ 2 -2]  [   0    1]  [0 1]
[-2  1], [   0 -1/2], [0 1]
]]
sage: Set(L[0][1:])==Set(L[1][1:])
False

Quite unexpected... However :

sage: all([u in Set(L[1][1:]) for u in Set(L[0][1:])])
True
sage: all([u in Set(L[0][1:]) for u in Set(L[1][1:])])
True

as expected.

The Sets reference doesn't mention testing forv Sets equality.

Is that a bug, an oversight or an expected behaviour ?

Preview: (hide)

1 Answer

Sort by » oldest newest most voted
1

answered 1 year ago

Max Alekseyev gravatar image

updated 1 year ago

Set is known to be buggy for mutable (non-hashable) objects. If you plan to form a set of matrices, you need to declare those matrices as immutable. A simple workaround would be using Set(map(lambda m: Matrix(m,immutable=True),L[0][1:])) instead of Set(L[0][1:]). Alternatively, you can upfront declare all matrices immutable, or call .set_immutable() method on the elements of L.

Preview: (hide)
link

Comments

Thank you very much !

Emmanuel Charpentier gravatar imageEmmanuel Charpentier ( 1 year ago )

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 1 year ago

Seen: 222 times

Last updated: Dec 24 '23