These computations can probably be done conveniently in fields of 
AlgebraicField class. Their elements are essentially coefficient lists of 
polynomials in a primitive element over the base field. The polynomial is 
automatically transformed to its lowest terms using the minimal polynomial 
of the primitive element. The primitive element can be given as a SymPy 
expression, and the field is obtained by adjoining that to the base field, 
typically the field of rational numbers.

>>> w = exp(2*pi*I/12)
>>> K = QQ.algebraic_field(w)
>>> type(K)
<class 'sympy.polys.domains.algebraicfield.AlgebraicField'>

The primitive element of  K  represented by  w  can be obtained by the 
method  'from_sympy' , and the inverse method is 'to_sympy'. All arithmetic 
operations are defined for the elements of  K.

>>> z = K.from_sympy(w)
>>> type(z)
<class 'sympy.polys.polyclasses.ANP'>
>>> K.to_sympy(z**6 - 1)
-2
>>> type(z**6 - 1)
<class 'sympy.polys.polyclasses.ANP'>

Working with matrices over algebraic fields is more complicated because the 
implementation will automatically try to 'sympify' the matrix entries, 
i.e., transform them to SymPy expressions. As a workaround, it should be 
possible to use a custom matrix class with trivial sympification routine.

 >>> class MyMatrix(Matrix):
...     _sympify = staticmethod(lambda x: x)
...

Kalevi Suominen

On Friday, May 26, 2017 at 9:39:46 PM UTC+3, Calvin McPhail-Snyder wrote:
>
> Have there been any relevant updates since this post? I sometimes have to 
> do matrix computations whose entries are polynomials in roots of unity, and 
> it would be nice if there were a way to work easily with variables that 
> have relations, i.e. in quotients of polynomial rings. Of course, I have no 
> idea how hard that sort of thing is to implement, so maybe it's an 
> unrealistic hope. The current solution for computations in C[x]/(f) is to 
> apply reduce at every step of the calculation with basis f, and I suppose 
> that works.
>
>
> On Tuesday, November 27, 2012 at 11:11:01 AM UTC-8, Aaron Meurer wrote:
>>
>> Actually, the best you could do with that is to make w**2 automatically 
>> return -w - 1. Automatic reduction would be much smarter in the polys. I'm 
>> not sure if there's support for it there yet. Unfortunately, the algebraic 
>> number support there is still in its infant stage. 
>>
>> Aaron Meurer
>>
>> On Nov 27, 2012, at 12:05 PM, Aaron Meurer <[email protected]> wrote:
>>
>> Oh, I see what you want. No, I don't think we have a RootOfUnity class. 
>> You might try to write one, using ImaginaryUnit as your guide, and see how 
>> far you can get with it. However, be aware that making stuff auto combine 
>> without modifying the core is not easy and is a major problem that we're 
>> trying to solve.  
>>
>> We do have RootOf, which represents an arbitrary algebraic number. 
>> Depending on what you want to do with it, it may or may not be enough. 
>>
>> Aaron Meurer
>>
>> On Nov 26, 2012, at 10:29 PM, simon <[email protected]> wrote:
>>
>>
>> Thanks Aaron, but that function is actually more complicated than what I 
>> am doing now.
>>
>> Given that we have ImaginaryUnit I thought it might be possible to extend 
>> this to
>> arbitrary roots of unity, for example.
>>
>> Cheers,
>> Simon.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "sympy" group.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msg/sympy/-/6PCSI_BSbpcJ.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to 
>> [email protected].
>> For more options, visit this group at 
>> http://groups.google.com/group/sympy?hl=en.
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" 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 https://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/26136629-fce9-48c6-8be8-f3c6c9ccd9e2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to