On Friday, 21 September 2012 10:25:45 UTC+8, Andrew Mathas wrote:
>
> Among other things, the patch 
> #13072<http://trac.sagemath.org/sage_trac/ticket/13072>cleans up 
> sage.combinat.partition. I would like some input as to should 
> happen to the function number_of_partitions.
>
> Arguably, if you want to compute the number of partitions of some integer 
> in sage then you should use the Partitions class:
> sage: Partitions(2000).cardinality()
> 4720819175619413888601432406799959512200344166
> It has been suggested, however, that in some applications that the extra 
> overhead required to create the Partitions class would be significant and, 
> consequently, that it is better to keep a stand alone number_of_partitions 
> function for *fast* computations of the partition function.
>
> Currently, in the global namespace number_of_partitions points to
> sage.combinat.partition.number_of_partitions
> This function does some mild argument parsing, most of which is historical 
> in that it allows you to choose between different algorithms -- which you 
> almost certainly do not want to do because the non-default algorithms are 
> (significantly) slower than the default algorithm. There is also an option 
> to allow you to compute the number of k-tuples of partitions which sum to 
> n, for which one can/should use PartitionTuples(n).cardinality() -- 
> although, see #11476. <http://trac.sagemath.org/sage_trac/ticket/11476> 
> If there is a need to have a *fast* number_of_partitions implementation of 
> the partition function then I think that we should deprecate all of the 
> argument parsing and have the function in the global point directly to the 
> default implementation, which is currently Bober's algorithm 
> insage.combinat.partition
> s.number_of_partitions. Currently, the function number_of_partitions is 
> effectively a wrapper to this function with some extra argument parsing on 
> top to slow it down.
>

This decreases the pedagogical value of Sage code for no good reason. 
I'd rather consider making these various implementations directly visible 
to the user. Then
doing, say, sage.combinat.partition.number_of_partitions_Bober will call 
Bober's algorithm, sage.combinat.partition.number_of_partitions_FLINT will
call the algorithm in FLINT (when it will be available), etc. The user who 
needs a speedup will
then do the choice, if necessary. Needless to say, the default 
implementation should better
point to a fast implementation.
So this looks like option 5. :–)

Dima

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To post to this group, send email to sage-devel@googlegroups.com.
To unsubscribe from this group, send email to 
sage-devel+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel?hl=en.


Reply via email to