{"head":"6f47620f9ea98be987672d66f04b762ae02b4d63","size":2,"push_id":44033772,"shas":[["217b26f0b6435a202d24db1a892a9463ea0a97ca","b274abc493535ae88cb3a0742f63e38c9241d67c@gmail.com","Merge pull request #591 from smichr/csimp\n\n2671: constantsimp combines more terms","Christopher Smith"],["6f47620f9ea98be987672d66f04b762ae02b4d63","b274abc493535ae88cb3a0742f63e38c9241d67c@gmail.com","Dict makes args canonical; __eq__ defined for FiniteSet and Dict\n\n    Even though Dict is a mapping, it can't compare well with another\n    dict if the args aren't ordered, so now they are stored as a frozenset\n    and the frozen set is what is compared during comparisons.\n    This requires that elements be hashable (which is a requirement of\n    dict and Dict, anyway). (If one needs to make sure that all elements\n    being stored are hashable, the frozendict implementation at\n\n     http://code.activestate.com/recipes/414283-frozen-dictionaries/\n\n    should be considered.\n\n    An __eq__  attribute was defined for Dict and FiniteSet which compares\n    the frozenset container than holds the arguments. args properties are\n    defined which hide this fact and the items within the containers are\n    returned, e.g.\n\n    Dict((1,2)).args -> ((1,2),)\n\n    The same change was made to FiniteSet.\n\n    before this commit\n\t>>> f=FiniteSet\n        >>> args\n\t[((s0, x), None), ((s1, 1/y), None)]\n\t>>> f(args)\n\t{((s0, x), None), ((s1, 1/y), None)}\n\t>>> f(list(reversed(args)))\n\t{((s1, 1/y), None), ((s0, x), None)}\n\t>>> f(args)==_\n\tFalse\n\n    after this commit, the False is True\n\n    The Set docstring was updated to warn against thinking of it like\n    a set()-object.\n\n    is_sequence was used (with the option to accept set) in flatten","Chris Smith"]],"ref":"refs/heads/containers"}