sage: list(X) [((1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0), 1)]
It looks like the tuple is a concatenation of 6 (one for each factor of X) tuples of length 6 (one for each generator): (1,0,0,0,0,0), (0,1,0,0,0,0), etc., representing a, b, a, c, c, b. So you could take that tuple, break it into smaller tuples of length 6 to get each factor. Actually, after looking at further examples, the length of the tuple is unpredictable: if you first evaluate a**9, then any for element defined after that, the tuple will have length 9*6. Strange. Anyway, you should be able to break the tuple into length 6 chunks to get each factor, treating (0,0,0,0,0,0) as 1. John On Tuesday, June 9, 2015 at 9:23:59 AM UTC-7, Viviane Pons wrote: > > The thing is: we actually need this specific implementation which is much > quicker for what we're doing. So I'm going to look closer at the object and > probably open a ticket to allow for such basic operation. > > Best > > Viviane > > 2015-06-09 2:24 GMT-05:00 Nicolas Borie <[email protected] > <javascript:>>: > >> Le 09/06/2015 06:50, Viviane Pons a écrit : >> >>> Hi everyone, >>> >>> I'm doing this: >>> >>> sage: FreeA.<a,b,c,d,e,f> = FreeAlgebra(QQ,implementation="letterplace") >>> sage: P = a*b*a*c*c*b + a*b*a*d*d*b + a*c*a*d*d*c + b*c*b*d*d*c >>> sage: X = P.lm() >>> sage: X >>> a*b*a*c*c*b >>> >>> And now I would like a way to "cut" my element X into two factors of a >>> given size. Something like >>> >>> sage: u,v = X[:2],X[2:] >>> >>> with then u=a*b and v = a*c*c*d >>> >>> except this doesn't work (no __getitem__ on X). I have looked a bit, but >>> I cannot find how to do this even though it seems quite a natural >>> operation. I must say, I don't even understand the datastructure of X, >>> list(X) doesn't give me something I can easily read or transform into a >>> word or anything... >>> >>> If someone knows about this, I would appreciate the help. >>> >> Hello, >> >> This feature seems to be strongly wrapped... You can access the data >> structure by iterating on element : >> >> >> ************************************************************************************************** >> sage: FreeA.<a,b,c,d,e,f> = FreeAlgebra(QQ,implementation="letterplace") >> sage: P = a*b*a*c*c*b + a*b*a*d*d*b + a*c*a*d*d*c + b*c*b*d*d*c >> sage: for basis_elt, coef in P: >> ....: print list(basis_elt), coef >> ....: >> [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, >> 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0] 1 >> [1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, >> 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0] 1 >> [0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, >> 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0] 1 >> [1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, >> 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0] 1 >> >> ************************************************************************************************** >> >> Depending what is your need, perhaps one of the following will be easier >> to manipulate : >> >> ************************************************************************************************** >> sage: W = Words(['abcdef']) >> sage: A = W.algebra(QQ) >> sage: A >> Free module generated by Words over {'abcdef'} over Rational Field >> sage: A = FreeMonoid(6, 'a,b,c,d,e,f').algebra(QQ) >> sage: A >> Free module generated by Free monoid on 6 generators (a, b, c, d, e, f) >> over Rational Field >> >> ************************************************************************************************** >> >> Note that the first one using Words produce a strange bug on my machine >> (old sage 6.4.beta2) >> >> ************************************************************************************************** >> sage: W = Words(['abcdef']) >> sage: W.algebra(QQ) >> >> --------------------------------------------------------------------------- >> AttributeError Traceback (most recent call >> last) >> <ipython-input-30-c6db62886943> in <module>() >> ----> 1 W.algebra(QQ) >> >> /home/nborie/sage-6.3/local/lib/python2.7/site-packages/sage/structure/parent.so >> >> in sage.structure.parent.Parent.__getattr__ >> (build/cythonized/sage/structure/parent.c:7213)() >> >> AttributeError: 'Words_over_OrderedAlphabet' object has no attribute >> 'algebra' >> sage: W.al >> W.algebra W.alphabet >> sage: W.algebra(QQ) >> Free module generated by Words over {'abcdef'} over Rational Field >> >> ************************************************************************************************** >> >> The method algebra works only after I asked for a tab completion on W... >> Never see that before.... >> >> Following the feature you choose, you will perhaps have to add a product >> method (product_on_basis or whatever, most of the time, the categories does >> it already for you...) >> >> Cheers, >> Nicolas. >> >> -- >> 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 [email protected] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> Visit this group at http://groups.google.com/group/sage-devel. >> For more options, visit https://groups.google.com/d/optout. >> > > -- 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.
