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.

Reply via email to