Hey everyone, On http://trac.sagemath.org/ticket/15289 I'm implementing monoids and groups indexed by an arbitrary set of generators and Nicolas and I would like your input on some possible idioms.
* Is anyone opposed to removing Free* from the global namespace and instead accessing free objects via their respective category. For example, instead of `FreeGroup(blah)` we access it by `Groups().free(blah)` and `FreeAlgebra(R, blah)` becomes `Algebras(R).free(blah)`. However this partially conflicts with http://trac.sagemath.org/ticket/15801, we could work around it by passing in the base ring as before. I do like this idiom since it has a more category-theoretic feel. * If we decide to not support the first, is should we be able to access free abelian groups via `FreeGroup` with an optional boolean keyword of `abelian`. Same for monoids. * (In a similar vein to the second) Should we pass an optional boolean argument of `additive` to `FreeGroup` (and maybe `FreeMonoid`)? * Should `IndexedFreeAbelianGroup` be additive or multiplicative. I'm voting for multiplicative since `CombinatorialFreeModule` over ZZ is the additive counterpart. Last is should we indexed polynomials by elements of an additive group? I wanted to use `IndexedFreeGroup` as the indexing set for a `CombinatorialFreeModule` to build (non-commutative) polynomial-like rings. It's easy enough to do it with it's (additive) ZZ-module counterpart (`CombinatorialFreeModule`) as well, but defining def product_on_basis(self, a, b): return self.monomial(a + b) feels slightly unnatural to me. Also I haven't tested speed/memory yet to compare. I'd appreciate any thoughts you have on the matters above (I suspect some are going to controversial), and if you have better names. Best, Travis -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.