# Test for Set equality

[ 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 ?

edit retag close merge delete

Sort by ยป oldest newest most voted

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.

more

Thank you very much !

( 2023-12-25 07:22:46 +0200 )edit