K i$dZddlmZddlmZddlmZmZmZddl m Z ddl m Z Gddee Z e ZGd d eZeZy ) z"Finite extensions of ring domains.)Domain) DomainElement)CoercionFailed NotInvertibleGeneratorsError)Poly)DefaultPrintingceZdZdZdZdZdZdZdZdZ dZ d Z d Z e Z d Zd Zd ZeZdZdZdZeZdZeZdZdZdZdZdZdZdZeZe dZ!dZ"y)ExtensionElementa# Element of a finite extension. A class of univariate polynomials modulo the ``modulus`` of the extension ``ext``. It is represented by the unique polynomial ``rep`` of lowest degree. Both ``rep`` and the representation ``mod`` of ``modulus`` are of class DMP. repextc ||_||_yNr )selfr rs a/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/polys/agca/extensions.py__init__zExtensionElement.__init__sc|jSr)rfs rparentzExtensionElement.parents uu rc8|jj|Sr)rto_sympyrs ras_exprzExtensionElement.as_exprsuu~~a  rc,t|jSr)boolr rs r__bool__zExtensionElement.__bool__"sAEE{rc|Srrs r__pos__zExtensionElement.__pos__%srcDt|j |jSr)ExtElemr rrs r__neg__zExtensionElement.__neg__(svquu%%rct|tr&|j|jk(r |jSy |jj |}|jS#t $rYywxYwr) isinstancer#rr convertrrgs r_get_repzExtensionElement._get_rep+sY a !uu~uu  EEMM!$uu !  s&A A+*A+cz|j|}|#t|j|z|jStSrr*r#r rNotImplementedrr)r s r__add__zExtensionElement.__add__83jjm ?1553;. .! !rcz|j|}|#t|j|z |jStSrr,r.s r__sub__zExtensionElement.__sub__Ar0rcz|j|}|#t||jz |jStSrr,r.s r__rsub__zExtensionElement.__rsub__Hs3jjm ?3;. .! !rc|j|}|:t|j|z|jjz|jSt Sr)r*r#r rmodr-r.s r__mul__zExtensionElement.__mul__Os@jjm ?AEECK155994aee< <! !rc.|s td|jjry|jjr>|jj j |jjryd|d|jd}t|)z5Raise if division is not implemented for this divisorz Zero divisorTzCan not invert z in z7. Only division by invertible constants is implemented.) rris_Fieldr is_grounddomainis_unitLCNotImplementedError)rmsgs r _divcheckzExtensionElement._divcheckXsw/ / UU^^ UU__!5!5aeehhj!A %QCtAEE73LLC%c* *rcR|j|jjr0|jj |jj }n<|jj }|j|j|j}t||jS)zMultiplicative inverse. Raises ====== NotInvertible If the element is a zero divisor. ) r@rr9r invertr6ringexquooner#)rinvrepRs rinversezExtensionElement.inverseish 55>>UU\\!%%)),F AWWQUUAEE*Fvquu%%rc|j|}|tSt||j} |j }||zS#t $rt |d|wxYw)Nz / )r*r-r#rrHrZeroDivisionError)rr)r ginvs r __truediv__zExtensionElement.__truediv__}skjjm ;! ! C  299;D4x 2#qcQCL1 1 2s AA cn |jj|}||z S#t$r tcYSwxYwrrr'rr-r(s r __rtruediv__zExtensionElement.__rtruediv__; " a A1u  "! ! " "44c|j|}|tSt||j} |j |jjS#t $rt |d|wxYw)Nz % )r*r-r#rr@rrJzeror.s r__mod__zExtensionElement.__mod__snjjm ;! ! C  2 KKM uuzz  2#qcQCL1 1 2s AA1cn |jj|}||zS#t$r tcYSwxYwrrNr(s r__rmod__zExtensionElement.__rmod__rPrQct|ts td|dkr |j| }}|j }|jj}|jjj }|dkDr |dzr||z|z}||z|z}|dz}|dkDr t||jS#t$r t dwxYw)Nzexponent of type 'int' expectedrznegative powers are not defined) r&int TypeErrorrHr> ValueErrorr rr6rEr#)rnbmrs r__pow__zExtensionElement.__pow__s!S!=> > q5 Dyy{QB1 EE EEII EEIIMM!e1uqSAI1 A !GA !e q!%%  ' D !BCC Ds B22Cct|tr4|j|jk(xr|j|jk(StSr)r&r#r rr-r(s r__eq__zExtensionElement.__eq__s5 a !55AEE>4aeequun 4! !rc||k( Srr r(s r__ne__zExtensionElement.__ne__s6zrcDt|j|jfSr)hashr rrs r__hash__zExtensionElement.__hash__sQUUAEEN##rc:ddlm}||jS)Nr)sstr)sympy.printing.strrir)rris r__str__zExtensionElement.__str__s+AIIK  rc.|jjSr)r r:rs rr:zExtensionElement.is_groundsuurc>|jj\}|Sr)r to_list)rcs r to_groundzExtensionElement.to_groundseemmorN)#__name__ __module__ __qualname____doc__ __slots__rrrrr!r$r*r/__radd__r2r4r7__rmul__r@rHrL __floordiv__rO __rfloordiv__rTrVr`rbrdrgrk__repr__propertyr:rpr rrr r s I!& "H"""H+"&( L!M !(" $!H rr ceZdZdZdZeZdZdZdZ dZ dZ e Z e dZd Zdd Zd Zd ZdZdZdZdZdZdZdZy )MonogenicFiniteExtensiona Finite extension generated by an integral element. The generator is defined by a monic univariate polynomial derived from the argument ``mod``. A shorter alias is ``FiniteExtension``. Examples ======== Quadratic integer ring $\mathbb{Z}[\sqrt2]$: >>> from sympy import Symbol, Poly >>> from sympy.polys.agca.extensions import FiniteExtension >>> x = Symbol('x') >>> R = FiniteExtension(Poly(x**2 - 2)); R ZZ[x]/(x**2 - 2) >>> R.rank 2 >>> R(1 + x)*(3 - 2*x) x - 1 Finite field $GF(5^3)$ defined by the primitive polynomial $x^3 + x^2 + 2$ (over $\mathbb{Z}_5$). >>> F = FiniteExtension(Poly(x**3 + x**2 + 2, modulus=5)); F GF(5)[x]/(x**3 + x**2 + 2) >>> F.basis (1, x, x**2) >>> F(x + 3)/(x**2 + 2) -2*x**2 + x + 2 Function field of an elliptic curve: >>> t = Symbol('t') >>> FiniteExtension(Poly(t**2 - x**3 - x + 1, t, field=True)) ZZ(x)[t]/(t**2 - x**3 - x + 1) Tct|tr |js td|j d}|j _|_|j_ |jx_ }|j|j_ jjj_jjj _jjdjj"d_j_t)fdt+j D_jj._y)Nz!modulus must be a univariate PolyF)autorc3FK|]}j|zywrr').0igenrs r z4MonogenicFiniteExtension.__init__..sJA4<<Q/Js!)r&r is_univariaterZmonicdegreerankmodulusr r6r; old_poly_ringgensrCr'rSrEsymbolssymbol generatortuplerangebasisr9)rr6domrs` @rrz!MonogenicFiniteExtension.__init__s3%#*;*;?@ @ iiUi#JJL  77JJ& c%C%%sxx0 LL0 << .iinnQii''* c*Jtyy9IJJ  ,, rcj|jj|}t||jz|SrrCr'r#r6)rargr s rnewzMonogenicFiniteExtension.new$s+ii$sTXX~t,,rcVt|tsy|j|jk(SNF)r&FiniteExtensionr)rothers rrbzMonogenicFiniteExtension.__eq__(s"%1||u}},,rcXt|jj|jfSr)rf __class__rqrrs rrgz!MonogenicFiniteExtension.__hash__-s T^^,,dll;<>rc.|jjSr)r;has_CharacteristicZerors rrz/MonogenicFiniteExtension.has_CharacteristicZero5s{{111rc6|jjSr)r;characteristicrs rrz'MonogenicFiniteExtension.characteristic9s{{))++rNcl|jj||}t||jz|Srrrrbaser s rr'z MonogenicFiniteExtension.convert<-ii4(sTXX~t,,rcl|jj||}t||jz|Srrrs r convert_fromz%MonogenicFiniteExtension.convert_from@rrcL|jj|jSr)rCrr rrs rrz!MonogenicFiniteExtension.to_sympyDsyy!!!%%((rc$|j|Srrrs r from_sympyz#MonogenicFiniteExtension.from_sympyGs||ArcZ|jj|}|j|Sr)r set_domainr)rKr6s rrz#MonogenicFiniteExtension.set_domainJs%ll%%a(~~c""rc|j|vr td|jj|}|j |S)Nz+Can not drop generator from FiniteExtension)rrr;dropr)rrrs rrzMonogenicFiniteExtension.dropNs? ;;' !!"OP P DKK  g &q!!rc&|j||Sr)rD)rrr)s rquozMonogenicFiniteExtension.quoTszz!Qrc|jj|j|j}t||jz|Sr)rCrDr r#r6)rrr)r s rrDzMonogenicFiniteExtension.exquoWs3iiooaeeQUU+sTXX~t,,rcyrr ras r is_negativez$MonogenicFiniteExtension.is_negative[src|jr t|S|jr)|jj |j Syr)r9rr:r;r<rprs rr<z MonogenicFiniteExtension.is_unit^s9 ==7N [[;;&&q{{}5 5rr)rqrrrsrtis_FiniteExtensionr dtyperrrbrgrkrzr{rrr'rrrrrrrDrr<r rrr}r}s~'P E-8-- =?H 22,--)#"  -6rr}N)rtsympy.polys.domains.domainr!sympy.polys.domains.domainelementrsympy.polys.polyerrorsrrrsympy.polys.polytoolsrsympy.printing.defaultsr r r#r}rr rrrsL(-;&3K}oKZ G6vG6R+r