I would rather deprecate the `.sum()` of Composition. If you want to concatenate composition, use `+`. There is also a mistake here, `__add__` is implemented instead of `_add_`.
Vincent 2014-05-20 10:57 UTC+02:00, Nathann Cohen <nathann.co...@gmail.com>: > Please help me follow you : > > You want to define a + and * operatorsfor Combinations, in such a way that > Combination.sum() is not necessary anymore, which in turn means that > sum(Combination([1,2,3])) would return 6 ? > > Nathann > > > On 20 May 2014 10:16, Simon King <simon.k...@uni-jena.de> wrote: > >> Hi Nicolas, >> >> On 2014-05-19, Nicolas M. Thiery <nicolas.thi...@u-psud.fr> wrote: >> > On Mon, May 19, 2014 at 04:01:52PM +0000, Simon King wrote: >> >> Multiplication? I always think of words as elements of a free group, >> >> of >> >> course multiplicatively written. Hence, concatenation of words >> >> w1,...,wn >> >> would be prod([w1,w2,...,wn]). >> > >> > Indeed. >> > >> > `+` works too for concatenation of words, which is consistent with >> > Python strings. But sum does not. Oh well. >> >> The reason is that the sum(...) function starts the summation with >> zero, unless told to be differently. However, 0 is not coerced to the >> empy word, or to strings for that matter. If it would, summation would >> work. >> sage: W = Words(range(27)) >> sage: a = W([randint(0,26) for _ in range(10)]) >> sage: sum([a,a,a]) >> <BOOM> >> TypeError: unsupported operand type(s) for +: 'int' and >> 'FiniteWord_list' >> sage: sum([a,a,a],a) >> word: >> >> 20,17,5,14,2,14,5,9,4,21,20,17,5,14,2,14,5,9,4,21,20,17,5,14,2,14,5,9,4,21,20,17,5,14,2,14,5,9,4,21 >> sage: sum(['a','a','a']) >> <BOOM> >> TypeError: unsupported operand type(s) for +: 'int' and 'str' >> sage: sum(['a','a','a'],'a') >> <BOOM> # O dear... >> TypeError: sum() can't sum strings [use ''.join(seq) instead] >> >> Nonetheless, I think multiplicative notation should be enabled as well, >> as a courtesy to group theorists... >> >> But it is all not easy. I stated above, one should coerce 0 to the empty >> word. But then, written multiplicatively, one would coerce 1 to the >> empty word as well. Not very nice. Specifically if you really think of >> words being additive, and 5*a should be a+a+a+a+a, and not empty_word*a. >> >> Perhaps one should better say that W has a single operator (either + or >> *, >> but not both), and if + is chosen, then 5+a should not be defined, but >> 5*a should be a+a+a+a+a. Or if * is chosen, then 5+a and 5*a should not >> be defined, but a^5 should be it. In other words, one shouldn't try to >> coerce NN into W, but one should think of W as endowed with an NN >> action. And at the end of the day, I'd say that sum([a,a,a]) is a misuse >> of the sum() function. >> >> Best regards, >> Simon >> >> >> >> >> >> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "sage-combinat-devel" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/sage-combinat-devel/PDPkJc_PBSE/unsubscribe >> . >> To unsubscribe from this group and all its topics, send an email to >> sage-combinat-devel+unsubscr...@googlegroups.com. >> To post to this group, send email to >> sage-combinat-devel@googlegroups.com. >> Visit this group at http://groups.google.com/group/sage-combinat-devel. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > You received this message because you are subscribed to the Google Groups > "sage-combinat-devel" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sage-combinat-devel+unsubscr...@googlegroups.com. > To post to this group, send email to sage-combinat-devel@googlegroups.com. > Visit this group at http://groups.google.com/group/sage-combinat-devel. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sage-combinat-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-combinat-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-combinat-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-combinat-devel. For more options, visit https://groups.google.com/d/optout.