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.
