Comment #20 on issue 3501 by [email protected]: Missing partitions in sympy.utilities.iterables.multiset_partitions
http://code.google.com/p/sympy/issues/detail?id=3501

Re comment 17 - Great!  With a general dispatcher routine, if/when
7.2.1.5m working, can be later integrated, for those cases where it
provides a speedup.

re: comment 18 / checking in pull request 1658.

I agree that the existing code isn't functioning as anything better
than a (buggy) set partitions routine, since it doesn't look at its
elements.  I have to admit that I have not been able to understand the
code in that is currently checked in -- is the original author
available to shed some light on the intent?  It doesn't look anything
like algorithm M (the data structures are different), and it also
doesn't look like restricted growth strings, which is the main
algorithm Knuth presents for set partitions.  So, I am puzzled.

At any rate, the choice between broken and mysterious and working and
understood is pretty clearcut, so checking this in will be a big
improvement.

I should have some time tomorrow to review your code more carefully.
(Of course, any feedback I provide comes with the proviso that I am a
complete newbie wrt sympy.)

One thing I noticed when reading it and trying examples -- if the
input multiset has no dups, you carefully set canon to None.  But, in
this case, can't you also skip creating canonical, and checking the
cache?

As a test, I switched the code at the tail end of multiset_partitions to

                if canon:
                    canonical = tuple(
                        sorted([tuple([canon[i] for i in j]) for j in rv]))
                    if canonical not in cache:
                        cache.add(canonical)
                        yield [[multiset[j] for j in i] for i in rv]
                else:
                    yield [[multiset[j] for j in i] for i in rv]

and noticed a pleasant speedup.  (624 to 550 seconds on my factorings
to 12000 code.)  Of course, I am not claiming that this is *the* fix,
but you get the idea.


--
You received this message because you are subscribed to the Google Groups 
"sympy-issues" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sympy-issues?hl=en.

Reply via email to