K iy dZddlmZddlmZddlmZddlmZddl m Z ddl m Z m Z ddlmZmZmZdd lmZmZmZmZdd lmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8dd l9m:Z:m;Z;mZ>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRdd lSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbdd lcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmddlnmoZompZpmqZqmrZrmsZsmtZtmuZuddlvmwZwmxZxmyZymzZzddl{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZddlmZmZedk(rddlZdZndZdZGdde ZGddeZGddeZdZGdde e ZdZGd d!e Zy)"z1OO layer for several polynomial representations. ) annotations) GROUND_TYPES)sympy_deprecation_warning)oo) CantSympify)PicklableWithSlots _sort_factors)DomainZZQQ)CoercionFailedExactQuotientFailed DomainError NotInvertible)!ninf dmp_validate dup_normal dmp_normal dup_convert dmp_convertdmp_from_sympy dup_strip dmp_degree_indmp_degree_listdmp_negative_p dmp_ground_LC dmp_ground_TCdmp_ground_nthdmp_one dmp_grounddmp_zero dmp_zero_p dmp_one_p dmp_ground_p dup_from_dict dmp_from_dict dmp_to_dict dmp_deflate dmp_inject dmp_eject dmp_terms_gcddmp_list_terms dmp_exclude dup_slice dmp_slice_in dmp_permute dmp_to_tuple)dmp_add_grounddmp_sub_grounddmp_mul_grounddmp_quo_grounddmp_exquo_grounddmp_absdmp_negdmp_adddmp_subdmp_muldmp_sqrdmp_powdmp_pdivdmp_premdmp_pquo dmp_pexquodmp_divdmp_remdmp_quo dmp_exquo dmp_add_mul dmp_sub_mul dmp_max_norm dmp_l1_normdmp_l2_norm_squared)dmp_clear_denomsdmp_integrate_in dmp_diff_in dmp_eval_in dup_revertdmp_ground_truncdmp_ground_contentdmp_ground_primitivedmp_ground_monic dmp_compose dup_decompose dup_shift dmp_shift dup_transformdmp_lift) dup_half_gcdex dup_gcdex dup_invertdmp_subresultants dmp_resultantdmp_discriminant dmp_inner_gcddmp_gcddmp_lcm dmp_cancel) dup_gff_listdmp_norm dmp_sqf_p dmp_sqf_norm dmp_sqf_part dmp_sqf_listdmp_sqf_list_include)dup_cyclotomic_pdmp_irreducible_pdmp_factor_listdmp_factor_list_include) dup_isolate_real_roots_sqfdup_isolate_real_rootsdup_isolate_all_roots_sqfdup_isolate_all_rootsdup_refine_real_rootdup_count_real_rootsdup_count_complex_roots dup_sturmdup_cauchy_upper_bounddup_cauchy_lower_bounddup_mignotte_sep_bound_squared)UnificationFailedPolynomialErrorflintNcn|jxs(|jxs|jxr |jSN)is_ZZis_QQis_FF _is_flintDs ]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/polys/polyclasses.py_supported_flint_domainrs'wwZ>d?Z?d@Z@dAZAdBZBdCZCdDZDdEZEdFZFdGZGdHZHdIZIdJZJdKZKdLZLdMZMdNZNdOZOdPZPdQZQdRZRdSZSdTZTdUZUdVZVdWZWdXZXdYZYdZZZd[Z[d\Z\dd]Z]d^Z^d_Z_d`Z`daZadbZbdcZcddZddeZedfZfdgZgdhZhdiZidjZjddkZkdlZlddmZmdnZnddoZodpZpdqZqdrZrdsZsdtZtduZudvZvdwZwdxZxdyZydzZzd{Z{dd|Z|dd}Z}d~Z~dZdZdZdZdZdZddZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZddZddZdZdZddZdZdZdZdZddZdZddZddZe dZe dZe dZe dZe dZe dZe dZe dZe dZe dZe dZe dZdZdZdZdZdZdZd„ZdÄZdĄZdńZdƄZdDŽZdȄZdɄZdʄZd˄Zdd̄Zdd̈́Zd΄ZdτZdЄZdфZd҄Zy)DMP)Dense Multivariate Polynomials over `K`. rintlevr domNc|t|\}}n't|tstdt |z|j |||S)Nzexpected list, got %s)r isinstancelistr typenewclsreprrs r__new__z DMP.__new__sG ;#C(HCC& !849!DE EwwsC%%rct'|dk(r"t|rtj|||Stj|||SNr)r|r DUP_Flint_new DMP_Pythonrs rrzDMP.news?  ax3C8 ~~c344sC--rc>tddd|jS)z!Get the representation of ``f``. ay Accessing the ``DMP.rep`` attribute is deprecated. The internal representation of ``DMP`` instances can now be ``DUP_Flint`` when the ground types are ``flint``. In this case the ``DMP`` instance does not have a ``rep`` attribute. Use ``DMP.to_list()`` instead. Using ``DMP.to_list()`` also works in previous versions of SymPy. z1.13zdmp-rep)deprecated_since_versionactive_deprecations_target)rto_listfs rrzDMP.reps' "# &,'0 yy{rctit|trY|jdk(rJt |j r5t j|j|j |jS|S)zConvert to DUP_Flint if possible. This method should be used when the domain or level is changed and it potentially becomes possible to convert from DMP_Python to DUP_Flint. r) r|rrrrrrr_reprs rto_bestz DMP.to_bestsQ  !Z(QUUaZz;DMP._validate_args..validate_rep..s7a3;;q>7s)rrall)rrrr validate_reps rrz(DMP._validate_args..validate_repsKc4( ((ax737777-A C!G,-r)rr r)rrrrrs ` @r_validate_argszDMP._validate_argss:#v&&&#s#q00 - S#rcBt|||}|j|||Sr~)r&rrrrrs r from_dictz DMP.from_dicts#Cc*wwsC%%rc@|jt||d|||S)zCCreate an instance of ``cls`` given a list of native coefficients. N)rrrs r from_listz DMP.from_lists"ww{3T37cBBrc>|jt|||||S)zBCreate an instance of ``cls`` given a list of SymPy coefficients. )rrrs rfrom_sympy_listzDMP.from_sympy_lists ww~c34c3??rc N|ttt||||Sr~)dictrzip)rmonomscoeffsrrs rfrom_monoms_coeffszDMP.from_monoms_coeffss"4S012C==rc|j|k(r|S|jst|j|St |t r;t |r|j|S|jj|St |tr;t |r|j|jS|j|Std)z0Convert ``f`` to a ``DMP`` over the new domain. zunreachable code) rrr|_convertrrr to_DMP_Pythonr to_DUP_Flint RuntimeErrorrrs rconvertz DMP.converts 55C<H UUem::c? " 9 %&s+zz#&(11#66 : &&s+zz#3355zz#&12 2rctr~NotImplementedErrorrs rrz DMP._convert!!rc.tt|||Sr~)rr!rrrs rzerozDMP.zeros8C=#s++rc0tt||||Sr~)rrrs ronezDMP.ones73$c3//rctr~rrs r_onezDMP._onerrcp|jjd|jd|jdSN(, )) __class____name__rrrs r__repr__z DMP.__repr__s# {{33QYY[!%%HHrct|jj|j|j|j fSr~)hashrrto_tuplerrrs r__hash__z DMP.__hash__ s.Q[[))1::<FGGrcP|j|j|jfSr~)rrrselfs r__getnewargs__zDMP.__getnewargs__ s||~txx11rctz*Construct a new ground instance of ``f``. rrcoeffs r ground_newzDMP.ground_new!!rc>t|tr|j|jk7rtd|d||j|jk7rG|jj |j}|j |}|j |}||fSz7Unify and return ``DMP`` instances of ``f`` and ``g``. Cannot unify  with )rrrrzrunifyrrgrs r unify_DMPz DMP.unify_DMPsr!S!QUUaee^#A$FG G 55AEE>%%++aee$C #A #A!t rcdt|j|j|j|S)AConvert ``f`` to a dict representation with native coefficients. r)r'rrr)rrs rto_dictz DMP.to_dict s!199;quu4@@rc|j|}|jD]#\}}|jj|||<%|S)@Convert ``f`` to a dict representation with SymPy coefficients. r)ritemsrto_sympy)rrrkvs r to_sympy_dictzDMP.to_sympy_dict$sHiiTi"IIK 'DAqUU^^A&CF ' rc>fdjS)@Convert ``f`` to a list representation with SymPy coefficients. cg}|D]T}t|tr|j|+|jjj |V|Sr~)rrappendrr)routvalrsympify_nested_lists rrz.DMP.to_sympy_list..sympify_nested_list/sSC 4c4(JJ2378JJquu~~c23  4 Jr)r)rrs`@r to_sympy_listzDMP.to_sympy_list-s #199;//rctAConvert ``f`` to a list representation with native coefficients. rrs rrz DMP.to_list:rrctzx Convert ``f`` to a tuple representation with native coefficients. This is needed for hashing. rrs rrz DMP.to_tuple>s "!rcT|j|jjS)zMake the ground domain a ring. )rrget_ringrs rto_ringz DMP.to_ringFsyy)**rcT|j|jjS)z Make the ground domain a field. )rr get_fieldrs rto_fieldz DMP.to_fieldJyy*++rcT|j|jjS)zMake the ground domain exact. )rr get_exactrs rto_exactz DMP.to_exactNrrch|js|s|j||S|j|||Sz1Take a continuous subsequence of terms of ``f``. )r_slice _slice_levrmnjs rslicez DMP.sliceRs.uuQ88Aq> !<<1a( (rctr~r)rrrs rrz DMP._sliceYrrctr~rrs rrzDMP._slice_lev\rrcX|j|Dcgc]\}}| c}}Scc}}w)z;Returns all non-zero coefficients from ``f`` in lex order. orderterms)rr _rs rrz DMP.coeffs_% wwUw35tq!555 &cX|j|Dcgc]\}}| c}}Scc}}w)z8Returns all non-zero monomials from ``f`` in lex order. rr!)rr rr#s rrz DMP.monomscr$r%c|jr+d|jdzz}||jjfgS|j |S)4Returns all non-zero terms from ``f`` in lex order. rrr)is_zerorrr_terms)rr  zero_monoms rr"z DMP.termsgsB 99quuqy)J,- -88%8( (rctr~rrr s rr+z DMP._termsorrc|jr td|s|jjgSt |j S)z%Returns all coefficients from ``f``. &multivariate polynomials not supported)rr{rrrrrs r all_coeffszDMP.all_coeffsrs9 55!"JK KEEJJ<  $ $rc|jr td|j}|dkrdgSt|j Dcgc] \}}||z f c}}Scc}}w)z"Returns all monomials from ``f``. r0rr))rr{degree enumeraterrrirs r all_monomszDMP.all_monoms|sW 55!"JK K HHJ q56M*3AIIK*@B$!Qa!eXB BBs A c|jr td|j}|dkrd|jjfgSt |j Dcgc] \}}||z f|fc}}Scc}}w)z Returns all terms from a ``f``. r0rr))rr{r3rrr4rr5s r all_termsz DMP.all_termssj 55!"JK K HHJ q5155::&' '/8/EGtq!q1uh]G GGs"A8c>|jjSz-Convert algebraic coefficients to rationals. )_liftrrs rliftzDMP.liftswwy  ""rctr~rrs rr<z DMP._liftrrct2Reduce degree of `f` by mapping `x_i^m` to `y_i`. rrs rdeflatez DMP.deflaterrct,Inject ground domain generators into ``f``. rrfronts rinjectz DMP.injectrrct2Eject selected generators into the ground domain. rrrrGs rejectz DMP.ejectrrcL|j\}}||jfS)ap Remove useless generators from ``f``. Returns the removed generators and the new excluded ``f``. Examples ======== >>> from sympy.polys.polyclasses import DMP >>> from sympy.polys.domains import ZZ >>> DMP([[[ZZ(1)]], [[ZZ(1)], [ZZ(2)]]], ZZ).exclude() ([2], DMP_Python([[1], [1, 2]], ZZ)) )_excluderrJFs rexcludez DMP.excludes# zz|1!))+~rctr~rrs rrOz DMP._excluderrc$|j|S)a Returns a polynomial in `K[x_{P(1)}, ..., x_{P(n)}]`. Examples ======== >>> from sympy.polys.polyclasses import DMP >>> from sympy.polys.domains import ZZ >>> DMP([[[ZZ(2)], [ZZ(1), ZZ(0)]], [[]]], ZZ).permute([1, 0, 2]) DMP_Python([[[2], []], [[1, 0], []]], ZZ) >>> DMP([[[ZZ(2)], [ZZ(1), ZZ(0)]], [[]]], ZZ).permute([1, 2, 0]) DMP_Python([[[1], []], [[2, 0], []]], ZZ) )_permuterPs rpermutez DMP.permutes"zz!}rctr~rrWs rrVz DMP._permuterrctz/Remove GCD of terms from the polynomial ``f``. rrs r terms_gcdz DMP.terms_gcdrrctz)Make all coefficients in ``f`` positive. rrs rabszDMP.absrrct"Negate all coefficients in ``f``. rrs rnegzDMP.negrrcV|j|jj|Sz.Add an element of the ground domain to ``f``. ) _add_groundrrrrs r add_groundzDMP.add_ground}}QUU]]1-..rcV|j|jj|Sz5Subtract an element of the ground domain from ``f``. ) _sub_groundrrrhs r sub_groundzDMP.sub_groundrjrcV|j|jj|Sz5Multiply ``f`` by a an element of the ground domain. ) _mul_groundrrrhs r mul_groundzDMP.mul_groundrjrcV|j|jj|Sz8Quotient of ``f`` by a an element of the ground domain. ) _quo_groundrrrhs r quo_groundzDMP.quo_groundrjrcV|j|jj|Sz>Exact quotient of ``f`` by a an element of the ground domain. ) _exquo_groundrrrhs r exquo_groundzDMP.exquo_groundsquu}}Q/00rcL|j|\}}|j|Sz2Add two multivariate polynomials ``f`` and ``g``. )r_addrrrRGs raddzDMP.add!{{1~1vvayrcL|j|\}}|j|Sz7Subtract two multivariate polynomials ``f`` and ``g``. )r_subr~s rsubzDMP.subrrcL|j|\}}|j|Sz7Multiply two multivariate polynomials ``f`` and ``g``. )r_mulr~s rmulzDMP.mulrrc"|jS(Square a multivariate polynomial ``f``. )_sqrrs rsqrzDMP.sqrs vvxrcrt|tstdt|z|j |S)+Raise ``f`` to a non-negative power ``n``. ``int`` expected, got %s)rr TypeErrorr_powrrs rpowzDMP.pows/!S!6a@A AvvayrcL|j|\}}|j|S/Polynomial pseudo-division of ``f`` and ``g``. )r_pdivr~s rpdivzDMP.pdiv !{{1~1wwqzrcL|j|\}}|j|S0Polynomial pseudo-remainder of ``f`` and ``g``. )r_premr~s rpremzDMP.premrrcL|j|\}}|j|S/Polynomial pseudo-quotient of ``f`` and ``g``. )r_pquor~s rpquozDMP.pquorrcL|j|\}}|j|S5Polynomial exact pseudo-quotient of ``f`` and ``g``. )r_pexquor~s rpexquoz DMP.pexquos!{{1~1yy|rcL|j|\}}|j|Sz7Polynomial division with remainder of ``f`` and ``g``. )r_divr~s rdivzDMP.div rrcL|j|\}}|j|Sz2Computes polynomial remainder of ``f`` and ``g``. )r_remr~s rremzDMP.rem%rrcL|j|\}}|j|Sz1Computes polynomial quotient of ``f`` and ``g``. )r_quor~s rquozDMP.quo*rrcL|j|\}}|j|Sz7Computes polynomial exact quotient of ``f`` and ``g``. )r_exquor~s rexquoz DMP.exquo/s!{{1~1xx{rctr~rrhs rrgzDMP._add_ground4rrctr~rrhs rrmzDMP._sub_ground7rrctr~rrhs rrqzDMP._mul_ground:rrctr~rrhs rruzDMP._quo_ground=rrctr~rrhs rryzDMP._exquo_ground@rrctr~rrrs rr}zDMP._addCrrctr~rrs rrzDMP._subFrrctr~rrs rrzDMP._mulIrrctr~rrs rrzDMP._sqrLrrctr~rrs rrzDMP._powOrrctr~rrs rrz DMP._pdivRrrctr~rrs rrz DMP._premUrrctr~rrs rrz DMP._pquoXrrctr~rrs rrz DMP._pexquo[rrctr~rrs rrzDMP._div^rrctr~rrs rrzDMP._remarrctr~rrs rrzDMP._quodrrctr~rrs rrz DMP._exquogrrcrt|tstdt|z|j |S)0Returns the leading degree of ``f`` in ``x_j``. r)rrrr_degreerrs rr3z DMP.degreejs/!S!6a@A Ayy|rctr~rrs rrz DMP._degreeqrrctz$Returns a list of degrees of ``f``. rrs r degree_listzDMP.degree_listtrrct#Returns the total degree of ``f``. rrs r total_degreezDMP.total_degreexrrc|j}i}|t|jddk(}|jD][}t|d}||kr||z }nd}|r|d||d|fz<0t |d}||xx|z cc<|d|t |<]t j||jt|z|jS)z&Return homogeneous polynomial of ``f``rr) rlenr"sumrtuplerrrrr) rstdresult new_symboltermdr6ls r homogenizezDMP.homogenize|s ^^ 3qwwy|A// GGI +DDG A2vF)-atAw!~&aM! #'7uQx  +}}VQUUS_%.s-az!S!-sza sequence of integers expected)r_nthrrNs rnthzDMP.nths* -1- -66!9 => >rctr~rrs rrzDMP._nthrrctzReturns maximum norm of ``f``. rrs rmax_normz DMP.max_normrrctzReturns l1 norm of ``f``. rrs rl1_normz DMP.l1_normrrctz!Return squared l2 norm of ``f``. rrs rl2_norm_squaredzDMP.l2_norm_squaredrrctz0Clear denominators, but keep the ground domain. rrs r clear_denomszDMP.clear_denomsrrct|tstdt|zt|tstdt|z|j ||S)EComputes the ``m``-th order indefinite integral of ``f`` in ``x_j``. r)rrrr _integraterrrs r integratez DMP.integratesQ!S!6a@A A!S!6a@A A||Aq!!rctr~rr s rrzDMP._integraterrct|tstdt|zt|tstdt|z|j ||S) >}}Qrctr~rrs rrzDMP._half_gcdexrrc|j|\}}|jr td|jjs t d|j |S)-Extended Euclidean algorithm, if univariate. rzground domain must be a field)rrrris_Fieldr_gcdexr~s rgcdexz DMP.gcdexsK{{1~1 55=> >uu~~=> >xx{rctr~rrs rr$z DMP._gcdexrrcz|j|\}}|jr td|j|S)(Invert ``f`` modulo ``g``, if possible. r)rrr_invertr~s rinvertz DMP.inverts4{{1~1 55=> >yy|rctr~rrs rr)z DMP._invertrrcR|jr td|j|S)"Compute ``f**(-1)`` mod ``x**n``. r)rr_revertrs rrevertz DMP.reverts# 55=> >yy|rctr~rrs rr.z DMP._revertrrcL|j|\}}|j|Sz7Computes subresultant PRS sequence of ``f`` and ``g``. )r_subresultantsr~s r subresultantszDMP.subresultantss${{1~1""rctr~rrs rr3zDMP._subresultants#rrcr|j|\}}|r|j|S|j|S/Computes resultant of ``f`` and ``g`` via PRS. )r_resultant_includePRS _resultant)rr includePRSrRrs r resultantz DMP.resultant&s5{{1~1 **1- -<<? "rctr~r)rrr;s rr:zDMP._resultant.rrct Computes discriminant of ``f``. rrs r discriminantzDMP.discriminant1rrcL|j|\}}|j|Sz4Returns GCD of ``f`` and ``g`` and their cofactors. )r _cofactorsr~s r cofactorsz DMP.cofactors5s!{{1~1||Arctr~rrs rrDzDMP._cofactors:rrcL|j|\}}|j|Sz+Returns polynomial GCD of ``f`` and ``g``. )r_gcdr~s rgcdzDMP.gcd=rrctr~rrs rrIzDMP._gcdBrrcL|j|\}}|j|S+Returns polynomial LCM of ``f`` and ``g``. )r_lcmr~s rlcmzDMP.lcmErrctr~rrs rrOzDMP._lcmJrrcr|j|\}}|r|j|S|j|S6Cancel common factors in a rational function ``f/g``. )r_cancel_include_cancel)rrincluderRrs rcancelz DMP.cancelMs5{{1~1 $$Q' '99Q< rctr~rrs rrVz DMP._cancelVrrctr~rrs rrUzDMP._cancel_includeYrrcV|j|jj|Sz&Reduce ``f`` modulo a constant ``p``. )_truncrrrps rtruncz DMP.trunc\sxx a())rctr~rr^s rr]z DMP._trunc`rrctz'Divides all coefficients by ``LC(f)``. rrs rmonicz DMP.moniccrrctz(Returns GCD of polynomial coefficients. rrs rcontentz DMP.contentgrrctz/Returns content and a primitive form of ``f``. rrs r primitivez DMP.primitivekrrcL|j|\}}|j|Sz4Computes functional composition of ``f`` and ``g``. )r_composer~s rcomposez DMP.composeos!{{1~1zz!}rctr~rrs rrmz DMP._composetrrcP|jr td|jS),Computes functional decomposition of ``f``. r)rr _decomposers r decomposez DMP.decomposews! 55=> >||~rctr~rrs rrrzDMP._decompose~rrc|jr td|j|jj |S)/Efficiently compute Taylor shift ``f(x + a)``. r)rr_shiftrrrs rshiftz DMP.shifts1 55=> >xx a())rc~|Dcgc]}|jj|}}|j|Scc}wz/Efficiently compute Taylor shift ``f(X + A)``. )rr _shift_list)rrais r shift_listzDMP.shift_lists6)* +2QUU]]2  + +}}Q ,s":ctr~rrs rrwz DMP._shiftrrc|jr td|j|\}}|j|\}}|j|\}}|j||S)5Evaluate functional transformation ``q**n * f(p/q)``.r)rrr _transform)rr_qrXQrRs r transformz DMP.transformsY 55=> >{{1~1{{1~1{{1~1||Aq!!rctr~rrr_rs rrzDMP._transformrrcP|jr td|jS)&Computes the Sturm sequence of ``f``. r)rr_sturmrs rsturmz DMP.sturms! 55=> >xxzrctr~rrs rrz DMP._sturmrrcP|jr td|jS)7Computes the Cauchy upper bound on the roots of ``f``. r)rr_cauchy_upper_boundrs rcauchy_upper_boundzDMP.cauchy_upper_bound$ 55=> >$$&&rctr~rrs rrzDMP._cauchy_upper_boundrrcP|jr td|jS)?Computes the Cauchy lower bound on the nonzero roots of ``f``. r)rr_cauchy_lower_boundrs rcauchy_lower_boundzDMP.cauchy_lower_boundrrctr~rrs rrzDMP._cauchy_lower_boundrrcP|jr td|jS)BComputes the squared Mignotte bound on root separations of ``f``. r)rr_mignotte_sep_bound_squaredrs rmignotte_sep_bound_squaredzDMP.mignotte_sep_bound_squareds$ 55=> >,,..rctr~rrs rrzDMP._mignotte_sep_bound_squaredrrcP|jr td|jS)4Computes greatest factorial factorization of ``f``. r)rr _gff_listrs rgff_listz DMP.gff_lists! 55=> >{{}rctr~rrs rrz DMP._gff_listrrctzComputes ``Norm(f)``.rrs rnormzDMP.normrrctz$Computes square-free norm of ``f``. rrs rsqf_normz DMP.sqf_normrrctz$Computes square-free part of ``f``. rrs rsqf_partz DMP.sqf_partrrct0Returns a list of square-free factors of ``f``. rrrs rsqf_listz DMP.sqf_listrrctrrrs rsqf_list_includezDMP.sqf_list_includerrct0Returns a list of irreducible factors of ``f``. rrs r factor_listzDMP.factor_listrrctrrrs rfactor_list_includezDMP.factor_list_includerrc|jr td|r|r|j||||S|r|s|j||||S|s|r|j ||||S|j ||||S)z0Compute isolating intervals for roots of ``f``. z1Cannot isolate roots of a multivariate polynomialepsinfsupfast)rr{_isolate_all_roots_sqf_isolate_all_roots_isolate_real_roots_sqf_isolate_real_roots)rrrrrrsqfs r intervalsz DMP.intervalss 55!"UV V 3++#D+Q Q ''CSc'M M,,#3T,R R((Scs(N Nrctr~rrrrrrs rrzDMP._isolate_all_rootsrrctr~rrs rrzDMP._isolate_all_roots_sqfrrctr~rrs rrzDMP._isolate_real_rootsrrctr~rrs rrzDMP._isolate_real_roots_sqfrrc\|jr td|j|||||S)zu Refine an isolating interval to the given precision. ``eps`` should be a rational number. z1Cannot refine a root of a multivariate polynomialrstepsr)rr{_refine_real_rootrrtrrrs r refine_rootzDMP.refine_roots; 55!CE E""1aSD"IIrctr~rrs rrzDMP._refine_real_rootrrct)Returns ``True`` if ``f`` is an element of the ground domain. rrs r is_groundz DMP.is_ground(rrct7Returns ``True`` if ``f`` is a square-free polynomial. rrs ris_sqfz DMP.is_sqf-rrctz=Returns ``True`` if the leading coefficient of ``f`` is one. rrs ris_monicz DMP.is_monic2rrctzAReturns ``True`` if the GCD of the coefficients of ``f`` is one. rrs r is_primitivezDMP.is_primitive7rrct):Returns ``True`` if ``f`` is linear in all its variables. rrs r is_linearz DMP.is_linear<rrct)=Returns ``True`` if ``f`` is quadratic in all its variables. rrs r is_quadraticzDMP.is_quadraticArrct)8Returns ``True`` if ``f`` is zero or has only one term. rrs r is_monomialzDMP.is_monomialFrrct7Returns ``True`` if ``f`` is a homogeneous polynomial. rrs ris_homogeneouszDMP.is_homogeneousKrrct:Returns ``True`` if ``f`` has no factors over its domain. rrs ris_irreduciblezDMP.is_irreduciblePrrct)6Returns ``True`` if ``f`` is a cyclotomic polynomial. rrs r is_cyclotomiczDMP.is_cyclotomicUrrc"|jSr~)r`rs r__abs__z DMP.__abs__Z uuwrc"|jSr~rdrs r__neg__z DMP.__neg__]rrct|tr|j|S |j|S#t$r t cYSwxYwr~)rrrrir NotImplementedrs r__add__z DMP.__add__`A a 558O &||A&! &%% &4AAc$|j|Sr~rrs r__radd__z DMP.__radd__iyy|rct|tr|j|S |j|S#t$r t cYSwxYwr~)rrrrnr rrs r__sub__z DMP.__sub__lrr c&| j|Sr~r rs r__rsub__z DMP.__rsub__u||Arct|tr|j|S |j|S#t$r t cYSwxYwr~)rrrrrr rrs r__mul__z DMP.__mul__xrr c$|j|Sr~rrs r__rmul__z DMP.__rmul__r rct|tr|j|S |j|S#t$r t cYSwxYwr~)rrrrrr rrs r __truediv__zDMP.__truediv__sB a 771:  &||A&! &%% &r ct|tr|j|S |jj |j|S#t $r t cYSwxYwr~)rrrrrrr rrs r __rtruediv__zDMP.__rtruediv__sV a 771:  &vvx**1-33A66! &%% &s-AA#"A#c$|j|Sr~rrs r__pow__z DMP.__pow__uuQxrc$|j|Sr~rrs r __divmod__zDMP.__divmod__rrc$|j|Sr~rrs r__mod__z DMP.__mod__rrct|tr|j|S |j|S#t$r t cYSwxYwr~)rrrrvrrrs r __floordiv__zDMP.__floordiv__sA a 558O &||A& &%% &r c||uryt|tstS |j|\}}|j |S#t $rYywxYw)NTF)rrrr _strict_eqrzr~s r__eq__z DMP.__eq__sV 6!S!! ! #;;q>DAq<<? "!  sA A Actr~rrs rr)zDMP._strict_eqrrc2|s||k(S|j|Sr~)r)rrstricts reqzDMP.eqs6M<<? "rc*|j|| S)N)r.)r/r-s rnezDMP.nes44&4)))rcl|j|\}}|j|jkSr~rrr~s r__lt__z DMP.__lt__*{{1~1yy{QYY[((rcl|j|\}}|j|jkSr~r3r~s r__le__z DMP.__le__*{{1~1yy{aiik))rcl|j|\}}|j|jkDSr~r3r~s r__gt__z DMP.__gt__r5rcl|j|\}}|j|jk\Sr~r3r~s r__ge__z DMP.__ge__r8rc|j Sr~)r*rs r__bool__z DMP.__bool__s99}rr~Fr)rrT)FNNNFF)NNFNN)r __module__ __qualname____doc__ __slots____annotations__r classmethodrpropertyrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrr"r+r1r7r9r=r<rBrHrMrSrOrYrVr]r`rdrirnrrrvrzrrrrrrrrrrrrrrgrmrqruryr}rrrrrrrrrrrrr3rrrrrrrrrrrrrr rrrrrrrrr%r$r*r)r/r.r4r3r<r:rArErDrJrIrPrOrXrVrUr`r]rdrgrjrnrmrsrrrxr}rwrrrrrrrrrrrrrrrrrrrrrrrrrrrrr*rrrrrrrrrrrrrrr rrrrrrrr"r%r'r*r)r/r1r4r7r:r<r>rrrrrsR3I H K& . .   &&CC@@>>3&",,00"IH2" A 0""+,,)""66)"% C H#""""&"&""""////1            """""""""""""""""""""E& ""?"""""""" "" " """# "#"" " " " ""*"""" ""* " """'"'"/""""""""" O"""" J"""""""""""""""""""""""""""&&&&&& #"# *)*)*rrc,eZdZdZdZedZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdodZdZdZdpdZdpdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-dqd,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7drd6Z8drd7Z9d8Z:d9Z;d:Zd=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWZYdpdXZZdpdYZ[dZZ\d[Z]d\Z^d]Z_d^Z`d_Zad`ZbdsdaZcdsdbZdeedcZfeeddZgeedeZheedfZieedgZjeedhZkeediZleedjZmeedkZneedlZoeedmZpeednZqy)trr)rrrcZtj|}||_||_||_|Sr~)objectrrrr)rrrrobjs rrzDMP_Python._news*nnS! rct|t|k7ry|j|jk(xr4|j|jk(xr|j|jk(Sr)rrrrrs rr)zDMP_Python._strict_eqsJ 7d1g uu~E!%%155.EQVVqvv5EErcP|j||j|jS).Create a DMP out of the given representation. )rrrrrs rperzDMP_Python.persvvc155!%%((rcx|jt||j|j|jSr)rr rrrs rrzDMP_Python.ground_news(vvj.quu==rcN|j|j|jSr~)rrrrs rrzDMP_Python._onesuuQUUAEE""rc(t|trj|jk7rtdd|j|jk(r9jjj j |j fSjjj|jctj j}t|j |j}fd}|||fS)z7Unify representations of two multivariate polynomials. rrc*j|Sr~)r)rrrrs rrRzDMP_Python.unify..persvvc3,,r) rrrrzrrRrrr)rrrRrrRrrs` @@rrzDMP_Python.unifys!S!QUUaee^#A$FG G 55AEE>55!%%6 6uuaeekk!%%0HCAFFC4AAFFC4A -S!Q& &rcltj|j|j|jS)z)Convert ``f`` to a Flint representation. )rrrrrrs rrzDMP_Python.to_DUP_Flints!~~affaeeQUU33rc,t|jSr)rrrs rrzDMP_Python.to_list sAFF|rcBt|j|jSzBConvert ``f`` to a tuple representation with native coefficients. )r1rrrs rrzDMP_Python.to_tuple sAFFAEE**rc|jt|j|j|j|||jS)$Convert the ground domain of ``f``. )rrrrrrs rrzDMP_Python._converts0vvk!&&!%%3vvaC((rct|j|j||}|j|||jt |j z S)rKrd)r*rrrrsymbols)rrrGrRs rrMzDMP_Python.eject3s? affaeeS 6vvaaeec#++&6677rct|j|j|j\}}}||j ||j|fSz&Remove useless generators from ``f``. )r-rrrr)rrQrRus rrOzDMP_Python._exclude9s>affaeeQUU31a!&&AEE1%%%rcx|jt|j||j|jSz6Returns a polynomial in `K[x_{P(1)}, ..., x_{P(n)}]`. )rRr0rrrrWs rrVzDMP_Python._permute?s(uu[AEE1559::rct|j|j|j\}}||j |fSr\)r+rrrrRrPs rr]zDMP_Python.terms_gcdCs2QVVQUUAEE21!%%({rcx|jt|j||j|jSrf)rRr2rrrrhs rrgzDMP_Python._add_groundH(uu^AFFAquuaee<==rcx|jt|j||j|jSrl)rRr3rrrrhs rrmzDMP_Python._sub_groundLrnrcx|jt|j||j|jSrp)rRr4rrrrhs rrqzDMP_Python._mul_groundPrnrcx|jt|j||j|jSrt)rRr5rrrrhs rruzDMP_Python._quo_groundTrnrcx|jt|j||j|jSrx)rRr6rrrrhs rryzDMP_Python._exquo_groundX)uu%affa>??rcv|jt|j|j|jSr_)rRr7rrrrs rr`zDMP_Python.abs\&uuWQVVQUUAEE233rcv|jt|j|j|jSrb)rRr8rrrrs rrdzDMP_Python.neg`rurc|jt|j|j|j|jSr|)rRr9rrrrs rr}zDMP_Python._addd,uuWQVVQVVQUUAEE:;;rc|jt|j|j|j|jSr)rRr:rrrrs rrzDMP_Python._subhrxrc|jt|j|j|j|jSr)rRr;rrrrs rrzDMP_Python._mullrxrcv|jt|j|j|jSr)rRr<rrrrs rrzDMP_Python.sqrprurcx|jt|j||j|jSr)rRr=rrrrs rrzDMP_Python._powts(uuWQVVQquu566rct|j|j|j|j\}}|j ||j |fSr)r>rrrrRrrrrs rrzDMP_Python._pdivxsAquu51uuQxq!!rc|jt|j|j|j|jSr)rRr?rrrrs rrzDMP_Python._prem},uuXaffaffaeeQUU;<>rct|j|j|j|j\}}|j ||j |fSr)rBrrrrRrs rrzDMP_Python._divsAqvvqvvquuaee41uuQxq!!rc|jt|j|j|j|jSr)rRrCrrrrs rrzDMP_Python._remrxrc|jt|j|j|j|jSr)rRrDrrrrs rrzDMP_Python._quorxrc|jt|j|j|j|jSr)rRrErrrrs rrzDMP_Python._exquos,uuYqvvqvvquuaee<==rcDt|j||jS)r)rrrrs rrzDMP_Python._degreesQVVQ..rcBt|j|jSr)rrrrs rrzDMP_Python.degree_listsqvvquu--rcBtd|jDS)rc32K|]}t|ywr~r)rrs rrz*DMP_Python.total_degree..s.a3q6.s)maxrrs rrzDMP_Python.total_degrees.188:...rcXt|j|j|jSr)rrrrrs rrz DMP_Python.LCQVVQUUAEE22rcXt|j|j|jSr)rrrrrs rrz DMP_Python.TCrrcZt|j||j|jSr)rrrrrs rrzDMP_Python._nthsaffa66rcXt|j|j|jSr)rHrrrrs rrzDMP_Python.max_normsAFFAEE15511rcXt|j|j|jSr)rIrrrrs rrzDMP_Python.l1_norms166155!%%00rcXt|j|j|jSr)rJrrrrs rrzDMP_Python.l2_norm_squareds"166155!%%88rct|j|j|j\}}||j |fSr)rKrrrrR)rrrRs rrzDMP_Python.clear_denomss2#AFFAEE1559qaeeAhrc z|jt|j|||j|jS)r)rRrLrrrr s rrzDMP_Python._integrates+uu%affaAEE155ABBrc z|jt|j|||j|jS)r )rRrMrrrr s rrzDMP_Python._diffs*uu[Aquuaee<==rct|j|jj|d|j|jSr)rNrrrrrs rrzDMP_Python._evals.166155==#3QquuEErct|j|jj|||j|j}|j ||j|jdz SNr)rNrrrrr)rrrrs rrzDMP_Python._eval_levsL!&&!%%--"2AquuaeeDuuS!%%++rct|j|j|j\}}|j||j|fS)r)rZrrrRrrrhs rrzDMP_Python._half_gcdexs;affaffaee41uuQxq!!rct|j|j|j\}}}|j||j||j|fS)r")r[rrrR)rrrrrs rr$zDMP_Python._gcdexsGAFFAFFAEE21auuQxq1558++rczt|j|j|j}|j|S)r()r\rrrR)rrrs rr)zDMP_Python._inverts) qvvqvvquu -uuQxrcb|jt|j||jSr-)rRrOrrrs rr.zDMP_Python._reverts"uuZ155122rct|j|j|j|j}t t |j |Sr2)r]rrrrmaprRrrRs rr3zDMP_Python._subresultantss7 affaffaeeQUU ;CqM""rc&t|j|j|j|jd\}}|jr*|j ||j|jdz }|t t |j|fS)r8T)r;r)r^rrrrrrrRrrresrs rr9z DMP_Python._resultant_includePRSsgqvvqvvquuaeeMQ 55%%QUUAEEAI.CDQUUA'''rct|j|j|j|j}|jr*|j ||j|jdz }|Sr)r^rrrr)rrrs rr:zDMP_Python._resultantsLAFFAFFAEE1559 55%%QUUAEEAI.C rct|j|j|j}|jr*|j ||j|jdz }|S)r@r)r_rrrr)rrs rrAzDMP_Python.discriminantsFqvvquuaee4 55%%QUUAEEAI.C rct|j|j|j|j\}}}|j ||j ||j |fSrC)r`rrrrR)rrrcffcfgs rrDzDMP_Python._cofactorssM#AFFAFFAEE155A 3uuQxsQUU3Z//rc|jt|j|j|j|jSrH)rRrarrrrs rrIzDMP_Python._gcdrxrc|jt|j|j|j|jSrM)rRrbrrrrs rrOzDMP_Python._lcmrxrct|j|j|j|jd\}}}}|||j ||j |fS)rTFrWrcrrrrRrrcFcGrRrs rrVzDMP_Python._cancel sK!!&&!&&!%%N B12quuQxq))rct|j|j|j|jd\}}|j ||j |fS)rTTrrr~s rrUzDMP_Python._cancel_includesC!&&!&&!%%E1uuQxq!!rcx|jt|j||j|jSr\)rRrPrrrr^s rr]zDMP_Python._truncrsrcv|jt|j|j|jSrc)rRrSrrrrs rrdzDMP_Python.monics'uu%affaeeQUU;<??rc |tt|jt|j|j Srq)rrrRrUrrrs rrrzDMP_Python._decompose*s'C}QVVQUU;<==rcb|jt|j||jSrv)rRrVrrrs rrwzDMP_Python._shift.s"uuYqvvq!%%011rcx|jt|j||j|jSrz)rRrWrrrrs rr{zDMP_Python._shift_list2s(uuYqvvq!%%788rc|jt|j|j|j|jSr)rRrXrrrs rrzDMP_Python._transform6s,uu]166166166155ABBrc |tt|jt|j|j Sr)rrrRrvrrrs rrzDMP_Python._sturm:s'Cy7899rcBt|j|jSr)rwrrrs rrzDMP_Python._cauchy_upper_bound>%affaee44rcBt|j|jSr)rxrrrs rrzDMP_Python._cauchy_lower_boundBrrcBt|j|jSr)ryrrrs rrz&DMP_Python._mignotte_sep_bound_squaredFs-affaee<w';$!Qq1 ;;;;sAct|j|j|j}|Dcgc]\}}|j ||fc}}Scc}}wr)rnrrrrRrrrrs rrzDMP_Python.factor_list_includeks@)!&&!%%?+2441a!%%(A444sAcLt|j|j||||SNr)rprrrs rrzDMP_Python._isolate_real_rootsps %affaee#3UYZZrcLt|j|j||||Sr)rorrrs rrz"DMP_Python._isolate_real_roots_sqfss )!&&!%%ScsY]^^rcLt|j|j||||Sr)rrrrrs rrzDMP_Python._isolate_all_rootsvs $QVVQUU#TXYYrcLt|j|j||||Sr)rqrrrs rrz!DMP_Python._isolate_all_roots_sqfys (CScX\]]rc Nt|j|||j|||S)Nr)rsrrrs rrzDMP_Python._refine_real_root|s"#AFFAq!%%STXYYrcHt|j|j||Srrr)rtrrrs rrzDMP_Python.count_real_rootss#AFFAEEsDDrcHt|j|j||Srr)rurrrs rrzDMP_Python.count_complex_rootss&qvvquu#3GGrcBt|j|jSr)r"rrrs rr*zDMP_Python.is_zeros!&&!%%((rcXt|j|j|jSr)r#rrrrs rrzDMP_Python.is_one..rcDt|jd|jS)rN)r$rrrs rrzDMP_Python.is_groundsAFFD!%%00rcXt|j|j|jSr)rfrrrrs rrzDMP_Python.is_sqfrrc|jjt|j|j|jSr)rrrrrrs rrzDMP_Python.is_monics,uu||M!&&!%%?@@rc|jjt|j|j|jSr)rrrQrrrs rrzDMP_Python.is_primitives-uu||.qvvquuaeeDEErctdt|j|j|jj DS)rc38K|]}t|dkyw)rNrrrs rrz'DMP_Python.is_linear..Yu3u:?Yrr'rrrkeysrs rrzDMP_Python.is_linear3Y AFFAEE1550Q0V0V0XYYYrctdt|j|j|jj DS)rc38K|]}t|dkyw)Nrrs rrz*DMP_Python.is_quadratic..rrrrs rrzDMP_Python.is_quadraticrrc:t|jdkS)rr)rrrs rrzDMP_Python.is_monomials199;1$$rc&|jduS)rN)rrs rrzDMP_Python.is_homogeneouss""$D00rcXt|j|j|jSr)rlrrrrs rrzDMP_Python.is_irreducibles!66rc\|js t|j|jSyrF)rrkrrrs rrzDMP_Python.is_cyclotomics#uu#AFFAEE2 2rr~r?r)r@rB)rrrCrDrErFrHrr)rRrrrrrrrrrr+r<rBrHrMrOrVr]rgrmrqruryr`rdr}rrrrrrrrrrrrrrrrrrrrrrrrrrrr$r)r.r3r9r:rArDrIrOrVrUr]rdrgrjrmrrrwr{rrrrrrrrrrrrrrrrrrrrrIr*rrrrrrrrrrrrrrrrs3&IF )>#'(4+J) ) A+  ) 8 & ; >>>>@44<<<47" ==?" <<>/./337219 C>F," ,  3# ( 0 <<* " @=8 @>29C:55=I* 7 9< 5 < 5 [_Z^ZEH))//11//AAFFZZZZ%%1177rrc`eZdZdZdZdZdZedZdZ edZ edZ ed Z d Z d Zd Zd ZdZdZdZdZdZdsdZdZdZdtdZdtdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1dud0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;dvd:Zd=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWZYdXZZdYZ[dZZ\dtd[Z]dtd\Z^d]Z_d^Z`d_Zad`ZbdaZcdbZddcZeddZfdwdeZgdwdfZheidgZjeidhZkeidiZleidjZmeidkZneidlZoeidmZpeidnZqeidoZreidpZseidqZteidrZuy)xrrr)rr_clsch|j|j|j|jffSr~)rrrrrs r __reduce__zDUP_Flint.__reduce__s&~~ $((CCCrcX|j|ddd||}|j||SN) _flint_polyfrom_reprs rrzDUP_Flint._news-ooc$B$ic2||C%%rcB|jjdddS)rNr)rrrs rrzDUP_Flint.to_listsvv}}tt$$rc\t|sJ|dk(sJ|j|}||Sr)r_get_flint_poly_cls)rrrr flint_clss rrzDUP_Flint._flint_polys5&s+++axx++C0 ~rc|jrtjS|jrtjS|j r |j Std|z)N%Domain %s is not supported with flint)rr| fmpz_polyr fmpq_polyr _poly_ctxr)rrs rrzDUP_Flint._get_flint_poly_clssF 99?? " YY?? " YY== FLM Mrc|jr-t|tjsJtj}n|jr-t|tj sJtj }nh|j rNt|tjtjfsJ|jt|fd}ntd|ztj|}||_||_||_|S)z,Create a DMP from the given representation. c|Sr~r)e_DUP_Flint__clsrs rz$DUP_Flint.from_rep..s U1a[rr )rrr|r rr r nmod_poly fmpz_mod_polycharacteristicrrrLrrrr)rrrrrMrrs @@rrzDUP_Flint.from_reps 99c5??3 33??D YYc5??3 33??D YYcEOOU5H5H#IJ JJ""$AIE(DFLM MnnS! rct|t|k7ry|j|jk(xr|j|jk(Sr)rrrrs rr)zDUP_Flint._strict_eqs9 7d1g uu~2!&&AFF"22rcZ|j|j|g|jSrrrrrs rrzDUP_Flint.ground_new s!zz!&&%/15511rcL|j|jjSr~)rrrrs rrzDUP_Flint._ones||AEEII&&rct)z*Unify representations of two polynomials. )rrs rrzDUP_Flint.unifysrcttj|j|j|jS)z1Convert ``f`` to a Python native representation. )rrrrrrs rrzDUP_Flint.to_DMP_Pythons#qyy{AEE15599rc4t|jSrZ)rrrs rrzDUP_Flint.to_tuplesQYY[!!rch|tk(rB|jtk(r/|jt j |j |St|rBt|jr-|jj|jStd|jd|)r\zDUP_Flint: Cannot convert z to ) r rr rr|r rrrrrrrs rrzDUP_Flint._converts "9"::eooaff5s; ; $S ).Eaee.L??$--c2??A A!;AEE7$seLM Mrc|jj||}|j|j||jSr)rrrrr)rrrrs rrzDUP_Flint._slice's51%zz!&&.!%%00rctrrrs rrzDUP_Flint._slice_lev,rrNc||jdk(rCt|jjDcgc] \}}|s |f|f}}}|dddS|j j |Scc}}w)r(Nlexrr)aliasr4rrrr+)rr rrr"s rr+zDUP_Flint._terms1sq =EKK50,5affmmo,FMDAq!tQiMEM2; ??$++%+8 8Ns A5A5ctr;rrs rr<zDUP_Flint._lift?rrc|jrd|fS|jj\}}|f|j||jfS)rA)r)r*r deflationrr)rrrs rrBzDUP_Flint.deflateDsF 997Nvv!1tQZZ155)))rctrDrrFs rrHzDUP_Flint.injectQrrctrJrrLs rrMzDUP_Flint.ejectVrrctrhrrs rrOzDUP_Flint._exclude[rrctrkrrWs rrVzDUP_Flint._permute`rrch|jj\}}||jfSr\)rr]rrPs rr]zDUP_Flint.terms_gcdes/ **,1!.."""rcT|j|j|z|jSrfrrrrhs rrgzDUP_Flint._add_groundkzz!&&1*aee,,rcT|j|j|z |jSrlr-rhs rrmzDUP_Flint._sub_groundor.rcT|j|j|z|jSrpr-rhs rrqzDUP_Flint._mul_groundsr.rcT|j|j|z|jSrtr-rhs rruzDUP_Flint._quo_groundwzz!&&A+quu--rct|j|\}}|r t|||j||jS)zs rrzDUP_Flint._pexquosi HHJ #a 'addfai!&&(!&&11 %a+ +zz!QUU##rc|jjr[t|j|j\}}|j ||j|j ||jfS|j j |j \}}|j|jfSr)rr#r4rrrrrrs rrzDUP_Flint._divs 55>>!&&!&&)DAq::a'Aquu)== =??$))!//*;>#Q^^%55 5rch|j|j|jz|jSrr-rs rrzDUP_Flint._remr8rch|j|j|jz|jSrr-rs rrzDUP_Flint._quos$zz!&&AFF*AEE22rcJ|j|\}}|r t|||Sr)rrrs rrzDUP_Flint._exquos(vvay1 %a+ +rcP|jj}|dk(rt}|S)rr)rr3r)rrrs rrzDUP_Flint._degrees" FFMMO 7Arc$|jfSrrrs rrzDUP_Flint.degree_listsrc"|jSrrIrs rrzDUP_Flint.total_degreesyy{rcP|j|jjSrrr3rs rrz DUP_Flint.LCsvvaffmmo&&rc |jdS)rrrrs rrz DUP_Flint.TCsvvayrc(|\}|j|SrrN)rrrs rrzDUP_Flint._nthsvvayrc>|jjSr)rrrs rrzDUP_Flint.max_norms ))++rc>|jjSr)rrrs rrzDUP_Flint.l1_norms ((**rc>|jjSr)rrrs rrzDUP_Flint.l2_norm_squareds 0022rcL|j}|jra|jj}|j |j |jj |j}||fS|js |jr|j|fStr) rrrdenomrrnumerris_FiniteFieldrr)rrrTrUs rrzDUP_Flint.clear_denomsst EE 77FFLLNEJJqvvafflln5quu=E%<  WW((55!8O% %rc*|dk(sJ|jjrH|j}t|D]}|j }|j ||jS|j j||jS)rr)rr) rr#rrangeintegralrrrrrrrrr6s rrzDUP_Flint._integrateszAv v 55>>&&C1X %lln %::c155) )??$//!q/9FFH Hrc|dk(sJ|j}t|D]}|j}|j||jS)z1Computes the ``m``-th order derivative of ``f``. r)rrX derivativerrrZs rrzDUP_Flint._diffsJAv vffq #A.."C #zz#quu%%rc@|jj|Sr~)rrrs rrzDUP_Flint._evals  &&q))rctr~rrs rrzDUP_Flint._eval_levrrc|jj|j\}}|j|jfS)z#Half extended Euclidean algorithm. )rrrrs rrzDUP_Flint._half_gcdex#s= ,,Q__->?1~~!111rc|jj|j\}}}|j||j|j||j|j||jfS)zExtended Euclidean algorithm. )rxgcdrr)rrrrrs rr$zDUP_Flint._gcdex(sX&&++aff%1azz!QUU#QZZ155%91::a;OOOrcJ|j}|jrQ|jj|j\}}}|d|zdzk7r t d|j ||S|j j|j jS)r(rr zero divisor) rr#rrarrrr)r)rrrrJF_invr#s rr)zDUP_Flint._invert-s EE ::FFKK/MCaeai#N33::eQ' '??$,,Q__->?LLN Nrc\|jj|jSr)rr.rrs rr.zDUP_Flint._revert<s% ((+88::rc|jj|j}|Dcgc]}|jc}Scc}wr2)rr3rrs rr3zDUP_Flint._subresultantsBs= OO  , ,Q__-> ?+,.a!...sA c|jj|j\}}||Dcgc]}|jc}fScc}wr7)rr9rrs rr9zDUP_Flint._resultant_includePRSHsF"889JKQ31ann&3333sAc\|jj|jS)z'Computes resultant of ``f`` and ``g``. )rr:rs rr:zDUP_Flint._resultantNs# ++AOO,=>>rc>|jjSr?)rrArs rrAzDUP_Flint.discriminantSs --//rcj|j|}||j||j|fSrC)rJr)rrrs rrDzDUP_Flint._cofactorsXs, EE!H!''!*aggaj((rc|j|jj|j|jSrH)rrrJrrs rrIzDUP_Flint._gcd]s(zz!&&**QVV,aee44rcL|r|s%|j|jjS|j|j |j |}|jj r|j}|S|jdkr|j}|S)rNr) rrrrrrIr#rdrrd)rrrs rrOzDUP_Flint._lcmas|a<< + + FF1I  QVVAY ' 55>> ATTVaZArc|j|jk(sJ|j}|js|js|jsJ|jrM|j |}|j ||j |}}|j |j ||fS|jr'|j\}}|j\}}n|j |}}|j |}}|j|}||z||z}}|j |} |j | |j | }}|jdk} |jdk} | r#| r!|j|j}}n+| r| |j}}n| r| |j}}||||fS)rTr) rrrrVrIrrrrJrrd) rrrrrRrrrcHHf_negg_negs rrVzDUP_Flint._cancelpsuuu~~ EEww!''Q%5%555  q A771:qwwqzqA55!%%A% % 77NN$EBNN$EBEE1BEE1B VVBZr28B FF1Iwwqz1771:1   U557AEEGqA CB CB2q!|rcr|j|\}}}}|j||j|fSrS)rVrqrs rrUzDUP_Flint._cancel_includes4yy| B1}}R !--"333rc\|jj|jSr\)rr]rr^s rr]zDUP_Flint._truncs# ''*7799rc@|j|jSrc)ryrrs rrdzDUP_Flint.monicsqttv&&rc>|jjSrf)rrgrs rrgzDUP_Flint.contents ((**rc|j}|jr|jj|fS|j |}||fSri)rgr*rrry)rrprims rrjzDUP_Flint.primitives>yy{ 9955::q= t$Tzrcl|j|j|j|jSrlr-rs rrmzDUP_Flint._composes#zz!&&.!%%00rc|jjDcgc]}|jc}Scc}wr)rrrrrs rrrzDUP_Flint._decomposes-+,??+<+G+G+IKa!KKK;c|j||jjg}|j|j ||jSr)rrrrr)rrx_plus_as rrwzDUP_Flint._shifts:661aeeii.)zz!&&*AEE22rc|j|j|j}}}|j||jSr)rrr)rr_rrRrXrs rrzDUP_Flint._transforms>//#Q__%68Ia1{{1a --//rc|jjDcgc]}|jc}Scc}wr)rrrrs rrzDUP_Flint._sturms-+,??+<+C+C+EGa!GGGrzc>|jjSr)rrrs rrzDUP_Flint._cauchy_upper_bound 4466rc>|jjSr)rrrs rrzDUP_Flint._cauchy_lower_boundrrc>|jjSr)rrrs rrz%DUP_Flint._mignotte_sep_bound_squareds <<>>rc|j}|jDcgc]\}}|j|fc}}Scc}}wr)rrr)rrRrrs rrzDUP_Flint._gff_lists8 OO 34::<A41a!.."A&AAAActrrrs rrzDUP_Flint.normrrctrrrs rrzDUP_Flint.sqf_normrrc^|j|j|jSr)rrIrrs rrzDUP_Flint.sqf_parts xxqwwy)**rc|jj|\}}||Dcgc]\}}|j|fc}}fScc}}wr)r)rrrrs rrzDUP_Flint.sqf_listsK*333<w'C$!Q)1-CCCCsA c|jj|}|Dcgc]\}}|j|fc}}Scc}}wr)rrrrs rrzDUP_Flint.sqf_list_includes@//#444=3:<41a!.."A&<<EGdaAquu-q1GGG UU[[VV]]_NE7DKMDAqqzz!QUU3Q7MMMG% '1~~'1A 1v& 'FNO O//'*g~-H Ns (E3(E c|jj}|Dcgc]\}}|j|fc}}Scc}}wr)rrrrs rrzDUP_Flint.factor_list_include s=//#7793:<41a!.."A&<<. s&AFF1TrT7OQUU!Cr)rr )rrrr to_dup_flints` rr zDUP_Flint._sort_factors s`29:AQYY[!$::$7C 29;$!Q,q/1%;;;.Z s)LA"Q%)Ls)rr3anyrX)rrs @rrzDUP_Flint.is_monomialV s<VVyy{QLc)Lryy{9K)L&L"LLrcP|j|jjk(Sr)rrrrs rrzDUP_Flint.is_monic\ sttv""rc6|jjSr)rrrs rrzDUP_Flint.is_primitivea s ---rc6|jjSr)rrrs rrzDUP_Flint.is_homogeneousf s ///rc|jj|jj}|jdkS)rr)rrJr\r3rs rrzDUP_Flint.is_sqfk s3 FFJJqvv((* +xxzQrc|jj\}}t|dk(ryt|dk(r |dddk(Sy)rrTrF)rrr)rr#rs rrzDUP_Flint.is_irreducibleq sHVV]]_ 7 w<1  \Q 1:a=A% %rc|jjr |jt}|jj r#t |jjSy#t$rYywxYwr) rrrr r rboolrrrs rrzDUP_Flint.is_cyclotomic| s_ 55;; IIbM 55;;,,./ / "  sA'' A32A3r~r?r)r@rB)vrrCrDrErrFrrHrrrrrr)rrrrrrrrr+r<rBrHrMrOrVr]rgrmrqruryr`rdr}rrrrrrrrrrrrrrrrrrrrrrrrrrrr$r)r.r3r9r:rArDrIrOrVrUr]rdrgrjrmrrrwrrrrrrrrrrrrrr rrrrrrrrIr*rrrrrrrrrrrrrrrrs:3 C'ID&&% NN03 2':"N1 " 9" *" " " " # ---.$6*222..: $ $ $623 ' ,+3 & I&*"2 P O; / 4 ? 0 ) 5 %N4 :' + 1L3 0 H77?B " " +D = < =<JNI MKDG##$$$$$$MM ##..00   rrcJtt|||t|||||Sr~)DMFrnumdenrrs rinit_normal_DMFr s* z#sC(#sC(#s 44rc\eZdZdZdZd.dZed.dZdZed.dZ dZ d Z d Z d Z d/d Zd0d ZedZedZdZdZdZdZdZdZdZdZdZdZeZd1dZedZedZ dZ!dZ"dZ#d Z$d!Z%d"Z&d#Z'd$Z(d%Z)d&Z*d'Z+d(Z,d)Z-d*Z.d+Z/d,Z0d-Z1y)2rz'Dense Multivariate Fractions over `K`. rNc|j|||\}}}t||||\}}||_||_||_||_yr~)_parsercrrrr)rrrrrrs r__init__z DMF.__init__ sJ Cc2 S#c3S1Src|j|||\}}}tj|}||_||_||_||_|Sr~)rrLrrrrr)rrrrrrrMs rrzDMF.new sI 3S1 S#nnS! rcP|j||j|jSr~)rrr)rrs rrzDMF.ground_new sxxTXXtxx00rct|tr|\}}|;t|tr t|||}t|tr=t|||}n/t |\}}t |\}}||k(r|}n t dt ||r tdt ||r t||}nt|||rt|||}t|||}nh|}|Jt|trt|||}n:t|ts*t|j||}nt |\}}t||}|||fS)Nzinconsistent number of levelszfraction denominator)rrrr&rrr"ZeroDivisionErrorrrr8rr r)rrrrrrnum_levden_levs rrz DMF._parse s: c5 !HCc4('S#6Cc4('S#6C+C0 W+C0 Wg%!C$%DEE#s#'(>??#s#c3'!#sC0!#sC0C!#sC0CCc4('S#6C#C.$S[[%5s;C',S#s#CC}rc|jjd|jd|jd|jdS)Nz((rz), r)rrrrrrs rrz DMF.__repr__ s'%&[[%9%9155!%%OOrct|jjt|j|j t|j |j |j |jfSr~)rrrr1rrrrrs rrz DMF.__hash__ sOQ[[))<quu+E  &quu67 7rct|trj|jk7rtdd|j|jk(rEjjj j jf|jfSjjj|jc}tj |jtj|jf}t|j||j}dd|ffd }||||fS)z0Unify a multivariate fraction and a polynomial. rrTFc|r |s||z S|dz }|rt|||\}}jj||f|SrrcrrrrrXkillrrrs rrRzDMF.poly_unify..per M"3w!Ag)#sC=HC{{Sz3<EE155!%%!%%@ @uuaeekk!%%0HCQUUC4QUUC46AAFFC4A%)3 =S!Q& &rct|trj|jk7rtdd|j|jk(rQjjj j jf|j |jffSjjj|jc}tj |jtj|jf}t|j ||jt|j||jf}dd|ffd }||||fS)z5Unify representations of two multivariate fractions. rrTFc|r |s||z S|dz }|rt|||\}}jj||f|Srrrs rrRzDMF.frac_unify..per rr) rrrrzrrRrrrrrs` @r frac_unifyzDMF.frac_unify s!S!QUUaee^#A$FG G 55AEE>EE155!%%!%%*+%%9 9uuaeekk!%%0HCQUUC4QUUC46AQUUC4QUUC46A&*3 =S!Q& &rc|j|j}}|r |s||z S|dz}|rt||||\}}|jj ||f||S)z.Create a DMF out of the given representation. r)rrrcrr)rrrrXrrrs rrRzDMF.per s]55!%%S 3wq !#sC5HC{{Sz344rc^|j}|r |s|S|dz}t||j|S)rPr)rrr)rrrrs rhalf_perz DMF.half_per, s2ee  q3s##rc(|jd||Srrrs rrzDMF.zero8 wwq#s##rc(|jd||Srrrs rrzDMF.one< rrc8|j|jS)z Returns the numerator of ``f``. )rrrs rrUz DMF.numer@ zz!%%  rc8|j|jS)z"Returns the denominator of ``f``. )rrrs rrTz DMF.denomD rrcN|j|j|jS)z4Remove common factors from ``f.num`` and ``f.den``. )rRrrrs rrXz DMF.cancelH suuQUUAEE""rc|jt|j|j|j|j dS)rcFrX)rRr8rrrrrs rrdzDMF.negL s0uuWQUUAEE1551155uGGrc*||j|zSrf)rrhs rrizDMF.add_groundP s1<<?""rc 8t|tr,|j|\}}}\}}}t||||||} }nV|j |\}}}} }| |c\}}\} } t t || ||t || ||||}t || ||} ||| S)z0Add two multivariate fractions ``f`` and ``g``. )rrrrFrr9r; rrrrrRF_numF_denrrrrRG_numG_dens rrzDMF.addT a /0||A ,Cc>E51"5%C=uC"#,,q/ Cc1a-. *NUENUE'%S9!%S93EC%S1C3}rc 8t|tr,|j|\}}}\}}}t||||||} }nV|j |\}}}} }| |c\}}\} } t t || ||t || ||||}t || ||} ||| S)z5Subtract two multivariate fractions ``f`` and ``g``. )rrrrGrr:r;rs rrzDMF.subc rrct|tr+|j|\}}}\}}}t|||||} }n>|j |\}}}} }| |c\}}\} } t|| ||}t|| ||} ||| S)z5Multiply two multivariate fractions ``f`` and ``g``. rrrr;rrs rrzDMF.mulr s a /0||A ,Cc>E51uac2EC"#,,q/ Cc1a-. *NUENUE%S1C%S1C3}rc @t|trx|j|j}}|dkr||| }}}|j t |||j |jt |||j |jdStdt|z)rrFrr) rrrrrRr=rrrr)rrrrs rrzDMF.pow s a uuaeeC1u!3!S55a6 a6uF F6a@A Arct|tr+|j|\}}}\}}}|t||||} }n>|j |\}}}} }| |c\}}\} } t|| ||}t|| ||} ||| S)z0Computes quotient of fractions ``f`` and ``g``. rrs rrzDMF.quo s a /0||A ,Cc>E51geQS9C"#,,q/ Cc1a-. *NUENUE%S1C%S1C3}rcR|j|j|jdS)z&Computes inverse of a fraction ``f``. Fr)rRrr)rchecks rr*z DMF.invert suuQUUAEE%u00rcBt|j|jS)z.Returns ``True`` if ``f`` is a zero fraction. r"rrrs rr*z DMF.is_zero s!%%''rct|j|j|jxr+t|j|j|jS)z.Returns ``True`` if ``f`` is a unit fraction. )r#rrrrrs rrz DMF.is_one s>quu-+ aeeQUUAEE * +rc"|jSr~rrs rrz DMF.__neg__ rrcBt|ttfr|j|S||jvr*|j |jj |S |j|j|S#tttf$r tcYSwxYwr~) rrrrrrirrrr rrrs rrz DMF.__add__ s} a#s $558O !%%Z<< a 01 1 "55A' '>+>? "! ! "s!BBBc$|j|Sr~r rs rr z DMF.__radd__ r rct|ttfr|j|S |j|j |S#t t tf$r tcYSwxYwr~) rrrrrrr rrrs rrz DMF.__sub__ V a#s $558O "55A' '>+>? "! ! "A A&%A&c&| j|Sr~r rs rrz DMF.__rsub__ rrct|ttfr|j|S |j|j |S#t t tf$r tcYSwxYwr~) rrrrrrr rrrs rrz DMF.__mul__ rrc$|j|Sr~rrs rrz DMF.__rmul__ r rc$|j|Sr~rrs rrz DMF.__pow__ rrct|ttfr|j|S |j|j |S#t t tf$r tcYSwxYwr~) rrrrrrr rrrs rrzDMF.__truediv__ rrc,|jd|zS)NF)r)r*)rrs rrzDMF.__rtruediv__ s{{{'))rcd t|tr[|j|\}}}\}}}|j|jk(r]t ||j|j xr||k(S|j |\}}}}}|j|jk(r||k(Sy#t$rYywxYwrrrrrr#rrrzrrr#rrrrRs rr*z DMF.__eq__ s !S!-.\\!_*1a%55AEE>$UAEE1559HeqjH ! Q 1aA55AEE>6M!   sA*B#-4B## B/.B/cf t|tr\|j|\}}}\}}}|j|jk(r^t ||j|j xr||k( S|j |\}}}}}|j|jk(r||k7Sy#t$rYywxYw)NTrrs r__ne__z DMF.__ne__ s !S!-.\\!_*1a%55AEE> )% > M5A:NN ! Q 1aA55AEE>6M!   sA+B$.4B$$ B0/B0c:|j|\}}}}}||kSr~rrrr#rRrs rr4z DMF.__lt__ " Q 1aA1u rc:|j|\}}}}}||kSr~rrs rr7z DMF.__le__ " Q 1aAAv rc:|j|\}}}}}||kDSr~rrs rr:z DMF.__gt__ rrc:|j|\}}}}}||k\Sr~rrs rr<z DMF.__ge__ rrcDt|j|j Sr~rrs rr>z DMF.__bool__ saeeQUU+++rr~)TFr?rA)2rrCrDrErFrrHrrrrrrrrRrrrrUrTrXrdrirrrrrrr*rIr*rrrr rrrrrrrr*rr4r7r:r<r>rrrrr sA1,I  1))VP7':'> 5 $$$$$!!#H#    B  E1((++  """"*"",rrcDtt||t|||Sr~)ANPr)rmodrs rinit_normal_ANPr s$ z#s##s#S **rceZdZdZdZdZefdZdZe dZ e dZ dZ d Z d Zd Zd Zd ZdZdZedZedZdZdZdZdZdZdZedZdZdZdZdZ dZ!dZ"dZ#d Z$d!Z%d"Z&d#Z'd$Z(d%Z)d&Z*d'Z+e d(Z,e d)Z-e d*Z.d+Z/d,Z0d-Z1d.Z2d/Z3d0Z4d1Z5d2Z6d3Z7d4Z8d5Z9d6Z:d7Z;d8Zd;Z?d<Z@d=ZAxZBS)>rz1Dense Algebraic Number Polynomials over a field. )r_modrct|trnt|turtt |||d}nWt|t r|Dcgc]}|j |}}n|j |g}tt||d}t|trn>t|trtt |||d}ntt||d}|j|||Scc}wr) rrrrr%rrrr)rrrrrs rrz ANP.__new__" s c3   #Y$ mC-sA6C#t$/23!s{{1~33{{3'(inc1-C c3   T "mC-sA6Cinc1-CwwsC%%4sC4c|j|jcxk(r|k(stdtdt| |}||_||_||_|S)NzInconsistent domain)rrsuperrrr)rrrrrMrs rrzANP.new7 s]377)c)45 5*45 5goc" rcTt|j|j|jffSr~)rrrrrs rrzANP.__reduce__D s TXXtxx222rc6|jjSr~rrrs rrzANP.repG syy  ""rc"|jSr~) mod_to_listrs rrzANP.modK s!!rc|jSr~rNrs rto_DMPz ANP.to_DMPO yyrc|jSr~)rrs r mod_to_DMPzANP.mod_to_DMPR rrcP|j||j|jSr~)rrrrQs rrRzANP.perU suuS!&&!%%((rc|jjd|jjd|jjd|j dSr)rrrrrrrs rrz ANP.__repr__X s8#$;;#7#79I166>>K[]^]b]bccrct|jj|j|jj|j fSr~)rrrrrrrs rrz ANP.__hash__[ s5Q[[))1::<9JAEERSSrc|j|k(r|S|j|jj||jj||S)z.Convert ``f`` to a ``ANP`` over a new domain. )rrrrrrs rrz ANP.convert^ s? 55C<H55,affnnS.A3G Grct|tr|j|jk7rtd|d||j|jk(r9|j|j |j |j |jfS|jj|jt|j |j}t|j |j}|jk7r1|jk7r"t|j|jn(|jk(r |jn |jfd}|||fS)z0Unify representations of two algebraic numbers. rrct|Sr~r)rrrs rrzANP.unify..~ sc#sC0r) rrrrzrrRrrr)rrrRrrRrrs @@rrz ANP.unifye s !S!QUUaee^#A$FG G 55AEE>55!%%quu4 4%%++aee$CAEE155#.AAEE155#.Aaee|quu !!%%4!%%<%%C%%C0CCAs""rct|tr|j|jk7rtd|d||j|jk7rG|jj |j}|j |}|j |}|j|j|j|jfSr)rrrrzrrrrrs r unify_ANPz ANP.unify_ANP s!S!QVVqvv%5#A$FG G 55AEE>%%++aee$C #A #Avvqvvqvvquu,,rctd||Srrrrrs rrzANP.zero 1c3rctd||Srrrs rrzANP.one rrc6|jjS)r)rrrs rrz ANP.to_dict vv~~rct|jd|j}|jD]#\}}|jj |||<%|S)rr)r'rrrr)rrrrs rrzANP.to_sympy_dict sN!%%AEE*IIK 'DAqUU^^A&CF ' rc6|jjSrr rs rrz ANP.to_list r"rc6|jjS)z5Return ``f.mod`` as a list with native coefficients. )rrrs rrzANP.mod_to_list r"rcz|jDcgc]}|jj|c}Scc}w)r)rrrrhs rrzANP.to_sympy_list s),-IIK9q"999s"8c6|jjSr)rrrs rrz ANP.to_tuple s vv  rc htttt|j|||Sr~)rrrrr)rrrrs rrz ANP.from_list s&9T#ckk3"7893DDrcV|j|jj|Srf)rRrrirhs rrizANP.add_ground uuQVV&&q)**rcV|j|jj|Srl)rRrrnrhs rrnzANP.sub_ground r*rcV|j|jj|S)z3Multiply ``f`` by an element of the ground domain. )rRrrrrhs rrrzANP.mul_ground r*rcV|j|jj|S)z6Quotient of ``f`` by an element of the ground domain. )rRrrvrhs rrvzANP.quo_ground r*rcT|j|jjSr~)rRrrdrs rrdzANP.neg suuQVVZZ\""rcr|j|\}}}}|j|j|||Sr~)rrrrrrRrrrs rrzANP.add 2Q1c3uuQUU1XsC((rcr|j|\}}}}|j|j|||Sr~)rrrr0s rrzANP.sub r1rc|j|\}}}}|j|j|j|||Sr~)rrrrr0s rrzANP.mul s;Q1c3uuQUU1X\\#&S11rc<t|tstdt|z|j}|j }|dkr|j || }}|j|j|j|j||jS)rrr) rrrrrrr*rrrr)rrrrRs rrzANP.pow s{!S!6a@A Aff FF q588C=1"qAuuQUU1X\\!&&)366rc|j|\}}}}|j|j|j|j |||Sr~)rrrr*rr0s rrz ANP.exquo sFQ1c3uuQUU188C=)--c2C==rcp|j||j|j|jfSr~)rrrrrs rrzANP.div s(wwqz166!&&!%%000rc$|j|Sr~)rrs rrzANP.quo swwqzrc|j|\}}}}|j|\}}|jr|j||St d)Nrc)rrrrr)rrrRrrrrrs rrzANP.rem sKQ1c3||A1 8866#s# #/ /rc6|jjSr)rrrs rrzANP.LC vvyy{rc6|jjSr)rrrs rrzANP.TC r:rc.|jjS)z6Returns ``True`` if ``f`` is a zero algebraic number. )rr*rs rr*z ANP.is_zero svv~~rc.|jjS)z6Returns ``True`` if ``f`` is a unit algebraic number. )rrrs rrz ANP.is_one svv}}rc.|jjSr)rrrs rrz ANP.is_ground svvrc|Sr~rrs r__pos__z ANP.__pos__ src"|jSr~rrs rrz ANP.__neg__ rrct|tr|j|S |jj |}|j |S#t $r tcYSwxYwr~)rrrrrrir rrs rrz ANP.__add__ W a 558O # a A<<? " "! ! "AA! A!c$|j|Sr~r rs rr z ANP.__radd__# r rct|tr|j|S |jj |}|j |S#t $r tcYSwxYwr~)rrrrrrnr rrs rrz ANP.__sub__& rCrDc&| j|Sr~r rs rrz ANP.__rsub__0 rrct|tr|j|S |jj |}|j |S#t $r tcYSwxYwr~)rrrrrrrr rrs rrz ANP.__mul__3 rCrDc$|j|Sr~rrs rrz ANP.__rmul__= r rc$|j|Sr~rrs rrz ANP.__pow__@ rrc$|j|Sr~r!rs rr"zANP.__divmod__C rrc$|j|Sr~r$rs rr%z ANP.__mod__F rrct|tr|j|S |jj |}|j |S#t $r tcYSwxYwr~)rrrrrrvr rrs rrzANP.__truediv__I rCrDcd |j|\}}}}||k(S#t$r tcYSwxYwr~rrzrrrrRrr#s rr*z ANP.__eq__S > "QJAq!QAv ! "! ! " //cd |j|\}}}}||k7S#t$r tcYSwxYwr~rOrPs rrz ANP.__ne__Z rQrRc8|j|\}}}}||kSr~rrPs rr4z ANP.__lt__a [[^ 1a1u rc8|j|\}}}}||kSr~rUrPs rr7z ANP.__le__e [[^ 1aAv rc8|j|\}}}}||kDSr~rUrPs rr:z ANP.__gt__i rVrc8|j|\}}}}||k\Sr~rUrPs rr<z ANP.__ge__m rXrc,t|jSr~)rrrs rr>z ANP.__bool__q sAFF|r)CrrCrDrErFrrHrrrIrrrrrRrrrrrrrrrrrrrrrirnrrrvrdrrrrrrrrrrr*rrr@rrr rrrrrr"r%rr*rr4r7r:r<r> __classcell__)rs@rrr s;'I&*3##"")dTH#: -       :!EE++++#))2 7>10  ####rr)rE __future__rsympy.external.gmpyrsympy.utilities.exceptionsrsympy.core.numbersrsympy.core.sympifyrsympy.polys.polyutilsrr sympy.polys.domainsr r r sympy.polys.polyerrorsr rrrsympy.polys.densebasicrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1sympy.polys.densearithr2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJsympy.polys.densetoolsrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYsympy.polys.euclidtoolsrZr[r\r]r^r_r`rarbrcsympy.polys.sqfreetoolsrdrerfrgrhrirjsympy.polys.factortoolsrkrlrmrnsympy.polys.rootisolationrorprqrrrsrtrurvrwrxryrzr{r|rrrrrrrrrrrrlsI7",@!*C..04"(((.. $ $ $ $ 7= EG+GT"ppfA A H4 E, kE,P * U+Ur