ó
    Š*£hUû  ã                   ó6  • S r SSKJrJrJrJr  SSKJrJrJ	r	J
r
JrJrJr  SSKJrJrJrJrJrJrJrJrJrJr  SSKJr  SSKJr  SSKJrJrJ r   SSK!J"r"J#r#  S	 r$S
 r%S r&S r'S r(S r)S r*S r+SbS jr,ScS jr-SdS jr.SdS jr/SeS jr0S r1ScS jr2ScS jr3SfS jr4ScS jr5ScS jr6SgS jr7SbS jr8SgS jr9ShS  jr:S!r;S"r<S#r=S$r>S%r?S&r@S'rAS(rBS)rC0 \<\<4S_\=\=4S_\>\>4S_\?\?4S_\@\<4S*_\A\=4S*_\B\>4S*_\C\?4S*_\@\?4S+_\A\<4S+_\B\=4S+_\C\>4S+_\<\A4S,_\=\B4S,_\>\C4S,_\?\@4S,_\<\@4S-_\=\A4S-\>\B4S-\?\C4S-\<\=4S.\=\>4S.\>\?4S.\?\<4S.\<\?4S/\=\<4S/\>\=4S/\?\>4S/0ErD0 \@\;\<4S0_\A\;\=4S0_\B\;\>4S0_\C\;\?4S0_\@\;\?4S1_\A\;\<4S1_\B\;\=4S1_\C\;\>4S1_\<\;\A4S2_\=\;\B4S2_\>\;\C4S2_\?\;\@4S2_\<\;\@4S3_\=\;\A4S3_\>\;\B4S3_\?\;\C4S3_\@\B4S4_0 \A\C4S4_\B\@4S4_\C\A4S4_\@\;\B4S4_\A\;\C4S4_\B\;\@4S4_\C\;\A4S4_\<\>4S5_\=\?4S5_\>\<4S5_\?\=4S5_\<\;\>4S5_\=\;\?4S5_\>\;\<4S5_\?\;\=4S5_\@\A4S6_\A\B4S6_E0 \B\C4S6_\C\@4S6_\@\;\A4S6_\A\;\B4S6_\B\;\C4S6_\C\;\@4S6_\@\C4S7_\A\@4S7_\B\A4S7_\C\B4S7_\@\;\C4S7_\A\;\@4S7_\B\;\A4S7_\C\;\B4S7_\<\B4S8_\=\C4S8_\>\@4S8_E0 \?\A4S8_\<\;\B4S8_\=\;\C4S8_\>\;\@4S8_\?\;\A4S8_\<\C4S9_\=\@4S9_\>\A4S9_\?\B4S9_\<\;\C4S9_\=\;\@4S9_\>\;\A4S9_\?\;\B4S9_\@\>4S:_\A\?4S:_\B\<4S:_\C\=4S:_E0 \@\;\>4S:_\A\;\?4S:_\B\;\<4S:_\C\;\=4S:_\@\=4S;_\A\>4S;_\B\?4S;_\C\<4S;_\@\;\=4S;_\A\;\>4S;_\B\;\?4S;_\C\;\<4S;_\<\;\=4S<_\=\;\>4S<_\>\;\?4S<_\?\;\<4S<_\<\;\?4S=_E\=\;\<4S=\>\;\=4S=\?\;\>4S=\@\;\@4S>\A\;\A4S>\B\;\B4S>\C\;\C4S>\<\;\<4S?\=\;\=4S?\>\;\>4S?\?\;\?4S?0ErE0 SS@/_S*SA/_S+SB/_S,SA/_S-SB/_S0SCSA/_S1SDSB/_S2SCSA/_S3SDSB/_S.SE/_S/SF/_S4SGSH/_S5SGSH/_S6SESI/_S7SJSF/_S8SKSL/_S9SMSN/_SMSN/SKSL/SESI/SJSF/SOS@/SOS@/SP.ErFSQ rGSR rHSiSS jrIST rJSU rKSjSV jrLSW rMSX rNSY rOSZ rPSdS[ jrQScS\ jrRSdS] jrS " S^ S_5      rT " S` Sa5      rUg)kz;Real and complex root isolation and refinement algorithms. é    )Údup_negÚ
dup_rshiftÚdup_remÚdup_l2_norm_squared)Údup_LCÚdup_TCÚ
dup_degreeÚ	dup_stripÚdup_reverseÚdup_convertÚdup_terms_gcd)
Údup_clear_denomsÚ
dup_mirrorÚ	dup_scaleÚ	dup_shiftÚdup_transformÚdup_diffÚdup_evalÚdmp_eval_inÚdup_sign_variationsÚdup_real_imag)Údup_discriminant)Údup_factor_list)ÚRefinementFailedÚDomainErrorÚPolynomialError)Údup_sqf_partÚdup_sqf_listc                 ó  • UR                   (       d  [        SU-  5      e[        X5      n U [        U SU5      /nUS   (       a9  [	        US   US   U5      nUR                  [        X15      5        US   (       a  M9  USS $ )aä  
Computes the Sturm sequence of ``f`` in ``F[x]``.

Given a univariate, square-free polynomial ``f(x)`` returns the
associated Sturm sequence ``f_0(x), ..., f_n(x)`` defined by::

   f_0(x), f_1(x) = f(x), f'(x)
   f_n = -rem(f_{n-2}(x), f_{n-1}(x))

Examples
========

>>> from sympy.polys import ring, QQ
>>> R, x = ring("x", QQ)

>>> R.dup_sturm(x**3 - 2*x**2 + x - 3)
[x**3 - 2*x**2 + x - 3, 3*x**2 - 4*x + 1, 2/9*x + 25/9, -2079/4]

References
==========

.. [1] [Davenport88]_

z%Cannot compute Sturm sequence over %sé   éÿÿÿÿéþÿÿÿN)Úis_Fieldr   r   r   r   Úappendr   )ÚfÚKÚsturmÚss       ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/polys/rootisolation.pyÚ	dup_sturmr*       s   € ð2 �:�:ÜÐAÀAÑEÓFÐFä�QÓ€Aà”˜˜A˜qÓ!Ð"€Eà
��)Ü�E˜"‘I˜u R™y¨!Ó,ˆØ�‰”W˜Q“]Ô#ð ��)‰)ð ��"ˆ:Ðó    c                 ój  • [        U 5      / p2X!R                  /-  n[        X5      S:  a  [        X5      n [	        [        U 5      5      n [        SU5       H®  nX   S:¼  a  M  UR                  X   * S5      / pv[        US-   U5       HA  nX   S::  a  M  XH   U-   UR                  X   S5      -
  n	UR                  X˜U-
  -  U/5        MC     U(       d  M€  [        U5      n	XIS      S-   XIS   '   UR                  U	S   5        M°     U(       d  gUR                  5       " S5      [        U5      S-   -  $ )ae  Compute the LMQ upper bound for the positive roots of `f`;
   LMQ (Local Max Quadratic) was developed by Akritas-Strzebonski-Vigklas.

References
==========
.. [1] Alkiviadis G. Akritas: "Linear and Quadratic Complexity Bounds on the
    Values of the Positive Roots of Polynomials"
    Journal of Universal Computer Science, Vol. 15, No. 3, 523-537, 2009.
r   é   r    N)ÚlenÚoner   r   ÚlistÚreversedÚrangeÚlogr$   ÚminÚ	get_fieldÚmax)
r%   r&   ÚnÚPÚtÚiÚaÚQLÚjÚqs
             r)   Údup_root_upper_boundr?   F   s  € ô ˆq‹6�2€qØ	�U‰UˆG‰€AÜˆaƒ|�aÓÜ�A‹MˆÜŒX�a‹[Ó€Aä�1�aŽ[ˆØ‰4�1‹9Ùà—‘�q‘t�e˜Q“ ˆ2ä�q˜1‘u˜a–ˆAà‰t�q‹yÙà‘�q‘˜1Ÿ5™5 ¡ q›>Ñ)ˆAØ�I‰I�q ™U‘| QÐ'Ö(ñ !ö Ùä�‹Gˆà�a‘D‘'˜A‘+ˆˆA‰$‰à	�‰��1‘Žñ+ ö. Øà�{‰{Œ}˜QÓ¤# a£&¨1¡*Ñ-Ð-r+   c                 ó>   • [        [        U 5      U5      nUb  SU-  $ g)ah  Compute the LMQ lower bound for the positive roots of `f`;
LMQ (Local Max Quadratic) was developed by Akritas-Strzebonski-Vigklas.

References
==========
.. [1] Alkiviadis G. Akritas: "Linear and Quadratic Complexity Bounds on the
       Values of the Positive Roots of Polynomials"
       Journal of Universal Computer Science, Vol. 15, No. 3, 523-537, 2009.
Nr    )r?   r   )r%   r&   Úbounds      r)   Údup_root_lower_boundrB   r   s&   € ô !¤¨Q£°Ó3€EàÑØ�‰wˆàr+   c                 ó8  ^• [        U 5      nUS:  a  [        S5      eUR                  (       a  UR                  5       n[	        XU5      UpOFUR
                  (       a"  UR                  (       d  UR                  (       a  [        SU-  5      eU SS n UR                  U S   5      (       a+  U R                  5         UR                  U S   5      (       a  M+  [        U 5      S:X  a  UR                  $ U S   mUR                  [        U4S jU SS  5       5      -   $ )zà
Compute the Cauchy upper bound on the absolute value of all roots of f,
real or complex.

References
==========
.. [1] https://en.wikipedia.org/wiki/Geometrical_properties_of_polynomial_roots#Lagrange's_and_Cauchy's_bounds
r    zPolynomial has no roots.z"Cauchy bound not supported over %sNr!   r   c              3   ó@   >#   • U  H  n[        UT-  5      v •  M     g 7f©N)Úabs)Ú.0r7   Úlcs     €r)   Ú	<genexpr>Ú)dup_cauchy_upper_bound.<locals>.<genexpr>¡   s   øé € Ð2ªE q”s˜1˜r™6—{�{ªEùó   ƒ)r	   r   Úis_ZZr5   r   Úis_QQÚis_RRÚis_CCr   Úis_zeroÚpopr.   Úzeror/   r6   )r%   r&   r7   ÚLrH   s       @r)   Údup_cauchy_upper_boundrT   ƒ   sÞ   ø€ ô 	�1‹€AØˆ1ƒuÜÐ8Ó9Ð9à‡w‡wØ�K‰K‹MˆÜ˜1 Ó# Q‰1Ø�W�W˜ŸŸ 1§7§7ô Ð>ÀÑBÓCÐCà‰aˆDˆà
�)‰)�A�b‘E×
Ñ
Ø	�‰Œð �)‰)�A�b‘E×
Ó
ä
ˆ1ƒv�ƒ{à�v‰vˆà	
ˆ1‰€BØ�5‰5”3Ô2¨A¨a¨b©EÓ2Ó2Ñ2Ð2r+   c                 óÂ   • [        U 5      n[        U5      S:  a  [        S5      eUR                  (       a  UR	                  5       n[        X!5      nUR                  U-  $ )zaCompute the Cauchy lower bound on the absolute value of all non-zero
roots of f, real or complex.r-   z!Polynomial has no non-zero roots.)r   r.   r   rL   r5   rT   r/   )r%   r&   ÚgÚbs       r)   Údup_cauchy_lower_boundrX   £   sN   € ô 	�A‹€AÜ
ˆ1ƒv�ƒzÜÐAÓBÐBØ‡w‡wØ�K‰K‹MˆÜ˜qÓ$€AØ�5‰5�1‰9Ðr+   c                 ó¨  • [        U 5      nUS:  a  [        S5      eUR                  (       a  UR                  5       n[	        XU5      UpOAUR
                  (       a"  UR                  (       d  UR                  (       a  [        SU-  5      e[        X5      n[        X5      nU" S5      UR                  U5      -  U" U5      US-   -  XRS-
  -  -  -  $ )a]  
Return the square of the Mignotte lower bound on separation between
distinct roots of f. The square is returned so that the bound lies in
K or its quotient field.

References
==========

.. [1] Mignotte, Maurice. "Some useful bounds." Computer algebra.
    Springer, Vienna, 1982. 259-263.
    https://people.dm.unipi.it/gianni/AC-EAG/Mignotte.pdf
r-   z1Polynomials of degree < 2 have no distinct roots.z$Mignotte bound not supported over %sé   r    )r	   r   rL   r5   r   rM   rN   rO   r   r   r   rF   )r%   r&   r7   rS   ÚDÚl2sqs         r)   Údup_mignotte_sep_bound_squaredr]   ®   s¬   € ô 	�1‹€AØˆ1ƒuÜÐQÓRÐRà‡w‡wØ�K‰K‹MˆÜ˜1 Ó# Q‰1Ø�W�W˜ŸŸ 1§7§7ô Ð@À1ÑDÓEÐEä˜Ó€AÜ˜qÓ$€DÙˆQ‹4�—‘�a“‰=™Q˜q›T A a¡C™[¨4°A±#©;Ñ6Ñ8Ð8r+   c                 ó–   • U u  p#UR                  U5      UR                  U5      pTUR                  U5      UR                  U5      pvXFXW4$ )z0Convert an open interval to a Mobius transform. )ÚnumerÚdenom)ÚIÚfieldr(   r9   r;   ÚcrW   Úds           r)   Ú_mobius_from_intervalre   Ë   sA   € à�D€Aà�;‰;�q‹>˜5Ÿ;™; q›>€qØ�;‰;�q‹>˜5Ÿ;™; q›>€qà�ˆ:Ðr+   c                 ó@   • U u  p#pEU" X$5      U" X55      pvXg::  a  Xg4$ Xv4$ )z0Convert a Mobius transform to an open interval. © )ÚMrb   r;   rW   rc   rd   r(   r9   s           r)   Ú_mobius_to_intervalri   Ô   s-   € à�J€Aˆ!á�‹;™˜a›€qàƒvØˆvˆàˆvˆr+   c                 óà  • Uu  pEpgXE:X  a  Xg:X  a  XXVU44$ [        X5      nUb  U" [        U5      5      nOUR                  nU(       a%  US:”  a  [        XU5      n X„-  X†-  UR                  p†nX‚R                  :¼  a:  [        XU5      n X„-  U-   X†-  U-   pu[        XR                  U5      (       d  XXWU44$ [        XR                  U5      U p�XDU-   XfU-   4u  p«pÍ[        XR                  U5      (       d  XX½U44$ [        X5      nUS:X  a  X«XÍ4u  pEpgOU[        [        U	5      UR                  U5      n [        XR                  U5      (       d  [        U SU5      n XTU-   XvU-   4u  pEpgXXVU44$ )z5One step of positive real root refinement algorithm. é   r    )
rB   ÚintrR   r   r/   r   r   r   r   r   )r%   rh   r&   Úfastr;   rW   rc   rd   ÚArV   Úa1Úb1Úc1Úd1Úks                  r)   Údup_step_refine_real_rootrt   ß   sx  € à�J€Aˆ!àƒv�!“&Ø�a˜A�,ˆÐä˜QÓ"€Aà�}ÙŒc�!‹f‹I‰à�F‰Fˆæ��B“Ü�a˜AÓˆØ‘#�q‘s˜AŸE™Eˆaˆà�E‰EƒzÜ�a˜AÓˆØ‰s�Q‰w˜™˜a™ˆ1ä˜Ÿ6™6 1×%Ñ%Ø˜! �l�?Ð"ä�QŸ™˜qÓ! 1€qà˜A™˜q a¡%Ð'�N€BˆBä�A—v‘v˜q×!Ñ!Ø�r˜rÐ"Ð"Ð"ä˜AÓ!€AàˆAƒvØ˜R�^‰
ˆˆa�ä”k !“n a§e¡e¨QÓ/ˆä˜Ÿ6™6 1×%Ñ%Ü˜1˜a Ó#ˆAà˜A™˜q a¡%Ð'‰
ˆˆaà�!˜ˆlˆ?Ðr+   Nc                 óà  • UR                  5       n[        U5      S:X  a  [        X5      u  pšp¼OUu  pšp¼U(       d  [        X	X«U4X&S9u  n u  pšp¼U(       d  M  UbJ  UbG  [	        SU5       H6  n[        U" X›5      U" X¬5      -
  5      U:¼  a  [        X	X«U4X&S9u  n u  pšp¼M6    O€   O}UbQ  [        U" X›5      U" X¬5      -
  5      U:¼  a3  [        X	X«U4X&S9u  n u  pšp¼[        U" X›5      U" X¬5      -
  5      U:¼  a  M3  Ub&  [	        SU5       H  n[        X	X«U4X&S9u  n u  pšp¼M     Ub1   [        XšX¼4U5      u  pïXõ::  d  X^::  a  O[        X	X«U4X&S9u  n u  pšp¼M0  U(       d  [        XšX¼4U5      $ X	X«U44$ )zGRefine a positive root of `f` given a Mobius transform or an interval. r-   ©rm   r   )r5   r.   re   rt   r2   rF   ri   )r%   rh   r&   ÚepsÚstepsÚdisjointrm   ÚmobiusÚFr;   rW   rc   rd   r:   ÚuÚvs                   r)   Údup_inner_refine_real_rootr~     s¨  € à	�‰‹€Aä
ˆ1ƒv�ƒ{Ü*¨1Ó0‰
ˆˆa�à‰
ˆˆaæÜ3°A¸1Øð8Øñ‰ˆ‰<ˆA�!÷ ˆað �˜5Ñ,Ü�q˜%–ˆAÜ‘1�Q“7™Q˜q›WÑ$Ó%¨Ó,Ü";¸AÀ1È¸|ÈQÑ"Z‘�‘<�A˜!™Qáò	 !ð ‰?Ü‘a˜“g¡ !£Ñ'Ó(¨CÓ/Ü";¸AÀ1È¸|ÈQÑ"Z‘�‘<�A˜!ô ‘a˜“g¡ !£Ñ'Ó(¨CÕ/ð ÑÜ˜1˜e–_�Ü";¸AÀ1È¸|ÈQÑ"Z‘�‘<�A˜!™Qñ %ð ÑØÜ&¨¨a |°QÓ7‰DˆAà‹} £Øä";¸AÀ1È¸|ÈQÑ"Z‘�‘<�A˜!ñ ö Ü" A¨! <°Ó3Ð3à�a˜A�,ˆÐr+   c           
      óæ   • [        X4UR                  5       5      u  p‰p«[        U [        X‰/5      [        X«/5      U5      n [	        X5      S:w  a  [        SU< SU< S35      e[        XXšU4X4XVUS9$ )z:Refine a positive root of `f` given an interval `(s, t)`. r    z%there should be exactly one root in (ú, z
) interval©rw   rx   ry   rm   )re   r5   r   r
   r   r   r~   )r%   r(   r9   r&   rw   rx   ry   rm   r;   rW   rc   rd   s               r)   Údup_outer_refine_real_rootr‚   7  st   € ä&¨ v¨q¯{©{«}Ó=�J€Aˆ!ä�aœ A 6Ó*Ü" A 6Ó*¨Aó	/€Aô ˜1Ó  AÓ%ÝÓZ[Ó]^Ð_Ó`Ð`ä% a¨Q°1¨°qÈÐhlÑmÐmr+   c                 ó’  • UR                   (       a  [        XSS9UR                  5       su  p€nOUR                  (       d  [	        SU-  5      eX:X  a  X4$ X:”  a  X!p!Sn	US:  a/  US::  a  [        X5      U* U* S4u  pp)O[        SU< SU< S35      eU	(       a  Ub  US:  a  U* nOS	n[        XX#XEXgS
9u  pU	(       a  U* U* 4$ X4$ )zBRefine real root's approximating interval to the given precision. T©Úconvertz*real root refinement not supported over %sFr   úCannot refine a real root in (r€   Ú)Nr�   )rM   r   Úget_ringrL   r   r   Ú
ValueErrorr‚   )
r%   r(   r9   r&   rw   rx   ry   rm   Ú_Únegatives
             r)   Údup_refine_real_rootrŒ   C  sÜ   € à‡w‡wÜ$ Q°4Ñ8¸!¿*¹*»,ˆ	‰ˆ‘Ø�W�WÜÐFÈÑJÓKÐKàƒvØˆvˆàƒuØˆ1à€Hàˆ1ƒuØ�‹6Ü *¨1Ó 0°1°"°q°b¸$Ð >ÑˆA�!�XåËË1ÐMÓNÐNæ�HÑ(Ø�a‹<Ø �y‰HàˆHä%Ø	ˆa˜°8ñH�D€Aö Ø��Q�Bˆxˆàˆwˆr+   c                 óú  • UR                   UR                  UR                  UR                   4u  pEpg[        X5      nUS:X  a  / $ US:X  a  [        XXVU4XUSS9/n	U	$ / XEXgX4/p©U
(       Ga  U
R	                  5       u  pEpgp[        X5      nUb  U" [        U5      5      nOUR                  nU(       a%  US:”  a  [        XU5      n X´-  X¶-  UR                   p¶nX±R                   :¼  a…  [        XU5      n X´-  U-   X¶-  U-   pu[        X5      (       d"  U	R                  XXWU445        [        U SU5      n [        X5      nUS:X  a  Má  US:X  a!  U	R                  [        XXVU4XUSS95        GM  [        XR                   U5      nXDU-   XfU-   S4u  pÞnnn[        XÁ5      (       d%  U	R                  XÎUUU445        [        USU5      Snn[        XÁ5      nUU-
  U-
  nXTU-   XvU-   4u  nnnnUS:”  aK  [        [        U 5      UR                   U5      n[        UU5      (       d  [        USU5      n[        UU5      nOSnUU:  a!  UUUU4u  nnnnUUUU4u  nnnnUUUU4u  nnnnU(       d  GM	  Uc=  [        [        U 5      UR                   U5      n[        XÁ5      (       d  [        USU5      nUS:X  a  U	R                  [        XÍXïU4XUSS95        OU
R                  XÞUUUU45        U(       d  GMŽ  Uc>  [        [        U 5      UR                   U5      n[        UU5      (       d  [        USU5      nUS:X  a!  U	R                  [        UUUUU4XUSS95        OU
R                  UUUUUU45        U
(       a  GM  U	$ )a  Internal function for isolation positive roots up to given precision.

References
==========
    1. Alkiviadis G. Akritas and Adam W. Strzebonski: A Comparative Study of Two Real Root
    Isolation Methods . Nonlinear Analysis: Modelling and Control, Vol. 10, No. 4, 297-304, 2005.
    2. Alkiviadis G. Akritas, Adam W. Strzebonski and Panagiotis S. Vigklas: Improving the
    Performance of the Continued Fractions Method Using new Bounds of Positive Roots. Nonlinear
    Analysis: Modelling and Control, Vol. 13, No. 3, 265-279, 2008.
r   r    T)rw   rm   rz   Nrk   )r/   rR   r   r~   rQ   rB   rl   r   r   r   r$   r   r   )r%   r&   rw   rm   r;   rW   rc   rd   rs   ÚrootsÚstackrn   Úf1ro   rp   rq   rr   ÚrÚk1Úk2Úa2Úb2Úc2Úd2Úf2s                            r)   Údup_inner_isolate_real_rootsr™   f  sª  € ð —‘˜Ÿ™ §¡¨¯©Ð-�J€Aˆ!ä˜AÓ!€AàˆAƒvØˆ	ØˆAƒvÜ+Ø�1˜ˆ|˜Q¨d¸4ñAð Bˆð| €Lðw ˜Q 1¨Ð.Ð/ˆuçØ$Ÿy™y›{ÑˆA�!˜ä$ QÓ*ˆAà‰}Ù”c˜!“f“I‘à—F‘F�æ˜˜B›Ü˜a AÓ&�Ø™#˜q™s A§E¡E�a�à—E‘E‹zÜ˜a AÓ&�Ø‘s˜Q‘w ¡ a¡�1ä˜a—|‘|Ø—L‘L !¨¨q \Ð!2Ô3Ü" 1 a¨Ó+�Aä'¨Ó-�à˜“6ÙØ˜“6Ø—L‘LÔ!;Ø˜q Q˜<¨¸$Àtñ"Mô Nâä˜1Ÿe™e QÓ'ˆBà ! q¡5¨!°©U°AÐ 5ÑˆB�B˜˜Aä˜"—=‘=Ø—‘˜b r¨2¨rÐ"2Ð3Ô4Ü" 2 q¨!Ó,¨a�A�ä$ RÓ+ˆBØ�R‘˜!‘ˆBà A¡ q¨a©%Ð/‰NˆB��B˜à�A‹vÜœ{¨1›~¨q¯u©u°aÓ8�ä˜b !—}‘}Ü# B¨¨1Ó-�Bä(¨¨QÓ/‘à�à�B‹wØ!# R¨¨R ‘��B˜˜BØ!# R¨¨R ‘��B˜˜BØ!# R¨¨R ‘��B˜˜BæÚà‰zÜœ{¨1›~¨q¯u©u°aÓ8�ä˜b—}‘}Ü# B¨¨1Ó-�Bà�Q‹wØ—‘Ô7Ø˜R RÐ(¨!¸4ÈñNõ Oð —‘˜b b¨"¨b°"Ð5Ô6æÚà‰zÜœ{¨1›~¨q¯u©u°aÓ8�ä˜b !—}‘}Ü# B¨¨1Ó-�Bà�Q‹wØ—‘Ô7Ø˜˜R  RÐ(¨!¸4ÈñNõ Oð —‘˜b " b¨"¨b°"Ð5Ô6÷o ‰eðr €Lr+   c                 óÎ   • UR                  5       n [        X5      u  pšU(       a  U
* U	* p©Ub  X’:¼  a  Ub  X£::  a  U(       d  Xš4$ X4$ Ub  X“:”  d  Ub  X¢:  a  g[        XXFS9u  pMU  )z9Discard an isolating interval if outside ``(inf, sup)``. Nrv   )r5   ri   rt   )r%   rh   ÚinfÚsupr&   r‹   rm   rz   r{   r|   r}   s              r)   Ú_discard_if_outside_intervalr�   Ø  ss   € à	�‰‹€Aà
Ü" 1Ó(‰ˆæØ�2˜�rˆqà‰K˜1›8¨#©+¸»ÞØ�t�à�t�Ø‰o !£'¨s©À1Ã7Øä,¨Q°1Ñ@‰DˆAñ r+   c                 ó  ^• Ub  US:  a  / $ [        XX%S9nUR                  5       / smnUc  Ub2  U H*  u  p	[        X	X4USXV5      n
U
c  M  UR                  U
5        M,     U$ U(       d  UR	                  U4S jU 5       5        U$ UnU$ )z@Iteratively compute disjoint positive root isolation intervals. r   ©rw   rm   Fc              3   ó@   >#   • U  H  u  p[        UT5      v •  M     g 7frE   )ri   )rG   rŠ   rh   r{   s      €r)   rI   Ú3dup_inner_isolate_positive_roots.<locals>.<genexpr>ü  s   øé € ÐCºU±T°QÔ*¨1¨a×0Ð0ºUùrK   )r™   r5   r�   r$   Úextend)r%   r&   rw   r›   rœ   rm   rz   rŽ   Úresultsrh   Úresultr{   s              @r)   Ú dup_inner_isolate_positive_rootsr¥   ì  sš   ø€ à
�˜3 ›7Øˆ	ä(¨°3ÑB€Eà—‘“ €J€A€wà
�˜#™/Û‰DˆAÜ1°!¸À!ÀUÈDÓYˆFàÓ!Ø—‘˜vÖ&ñ	 ð €Nö Ø�‰ÔC¹UÓCÔCð €Nð ˆà€Nr+   c                 óF  • Ub  US:¼  a  / $ [        [        X5      XUS9nUR                  5       / p˜Uc  Ub2  U H*  u  p
[        X
X#USXV5      nUc  M  U	R	                  U5        M,     U	$ U(       d/  U H'  u  p
[        X¨5      u  pÍU	R	                  U* U* 45        M)     U	$ Un	U	$ )z@Iteratively compute disjoint negative root isolation intervals. r   rŸ   T)r™   r   r5   r�   r$   ri   )r%   r&   r›   rœ   rw   rm   rz   rŽ   r{   r£   rh   r¤   r|   r}   s                 r)   Ú dup_inner_isolate_negative_rootsr§     s¶   € à
�˜3 !›8Øˆ	ä(¬°AÓ)9¸1ÈDÑQ€Eà—‘“ €wà
�˜#™/Û‰DˆAÜ1°!¸À!ÀTÈ4ÓXˆFàÓ!Ø—‘˜vÖ&ñ	 ð €Nö Û‰DˆAÜ& qÓ,‰DˆAØ�N‰N˜Q˜B  ˜8Ö$ñ ð €Nð ˆà€Nr+   c                 óf  • [        X5      u  p`US:”  a›  UR                  5       nUb  US::  a‚  Ub  SU::  ay  U(       dW  U(       d  UR                  UR                  4U4/U 4$ UR                  UR                  4XaR                  UR                  /4/U 4$ UR                  UR                  4/U 4$ / U 4$ )z?Handle special case of CF algorithm when ``f`` is homogeneous. r   )r   r5   rR   r/   )r%   r&   r›   rœ   ÚbasisÚsqfr=   r{   s           r)   Ú_isolate_zeror«     s«   € ä˜Ó�D€Aàˆ1ƒuØ�K‰K‹Mˆà‰K˜3 !›8¨#©+¸¸c»ÞÞØŸf™f a§f¡fÐ-¨qÐ1Ð2°AÐ5Ð5àŸf™f a§f¡fÐ-¨q·5±5¸!¿&¹&°/ÐBÐCÀQÐFÐFàŸ™ §¡Ð(Ð)¨1Ð,Ð,àˆqˆ5€Lr+   c           	      óŠ  • UR                   (       a  [        XSS9UR                  5       su  ppnOUR                  (       d  [	        SU-  5      e[        U 5      S::  a  / $ [        XX4SSS9u  p€[        XX#XES9n	[        XX#XES9n
[        X˜-   U
-   5      nU(       d  U$ U VVs/ s H  u  pÍ[        XÍ4X5      PM     snn$ s  snnf )aR  Isolate real roots of a square-free polynomial using the Vincent-Akritas-Strzebonski (VAS) CF approach.

References
==========
.. [1] Alkiviadis G. Akritas and Adam W. Strzebonski: A Comparative
       Study of Two Real Root Isolation Methods. Nonlinear Analysis:
       Modelling and Control, Vol. 10, No. 4, 297-304, 2005.
.. [2] Alkiviadis G. Akritas, Adam W. Strzebonski and Panagiotis S.
       Vigklas: Improving the Performance of the Continued Fractions
       Method Using New Bounds of Positive Roots. Nonlinear Analysis:
       Modelling and Control, Vol. 13, No. 3, 265-279, 2008.

Tr„   ú-isolation of real roots not supported over %sr   F©r©   rª   ©rw   r›   rœ   rm   )rM   r   rˆ   rL   r   r	   r«   r§   r¥   ÚsortedÚRealInterval)r%   r&   rw   r›   rœ   rm   ÚblackboxrŠ   ÚI_zeroÚI_negÚI_posrŽ   r;   rW   s                 r)   Údup_isolate_real_roots_sqfr¶   ,  s¸   € ð 	‡w‡wÜ$ Q°4Ñ8¸!¿*¹*»,ˆ	‰ˆ‘Ø�W�WÜÐIÈAÑMÓNÐNä�!ƒ}˜ÓØˆ	ä˜a C°E¸tÑD�I€Fä,¨Q°sÈÑX€EÜ,¨Q°sÈÑX€Eä�5‘> EÑ)Ó*€EæØˆá:?ÔAº%±°”˜q˜f aÖ+¹%ÒAÐAùÓAs   Â"B?c           
      ó  • UR                   (       a  [        XSS9UR                  5       su  ppnOUR                  (       d  [	        SU-  5      e[        U 5      S::  a  / $ [        XX4USS9u  p€[        X5      u  py[        U	5      S:X  aO  U	u  u  p
[        XX#XFS9n[        XX#XFS9nU VVs/ s H
  u  pÞXÞ4U
4PM     nnnU VVs/ s H
  u  pÞXÞ4U
4PM     nnnO[        X‘X#XEUS	9u  p¼[        X¸-   U-   5      $ s  snnf s  snnf )
aD  Isolate real roots using Vincent-Akritas-Strzebonski (VAS) continued fractions approach.

References
==========

.. [1] Alkiviadis G. Akritas and Adam W. Strzebonski: A Comparative
       Study of Two Real Root Isolation Methods. Nonlinear Analysis:
       Modelling and Control, Vol. 10, No. 4, 297-304, 2005.
.. [2] Alkiviadis G. Akritas, Adam W. Strzebonski and Panagiotis S.
       Vigklas: Improving the Performance of the Continued Fractions
       Method Using New Bounds of Positive Roots.
       Nonlinear Analysis: Modelling and Control, Vol. 13, No. 3, 265-279, 2008.

Tr„   r­   r   Fr®   r    r¯   )rw   r›   rœ   r©   rm   )rM   r   rˆ   rL   r   r	   r«   r   r.   r§   r¥   Ú_real_isolate_and_disjoinr°   )r%   r&   rw   r›   rœ   r©   rm   rŠ   r³   Úfactorsrs   r´   rµ   r|   r}   s                  r)   Údup_isolate_real_rootsrº   N  s  € ð 	‡w‡wÜ$ Q°4Ñ8¸!¿*¹*»,ˆ	‰ˆ‘Ø�W�WÜÐIÈAÑMÓNÐNä�!ƒ}˜ÓØˆ	ä˜a C°E¸uÑE�I€Fä˜aÓ#�J€Aä
ˆ7ƒ|�qÓØ‰	‰ˆ!ä0°¸3ÈSÑ\ˆÜ0°¸3ÈSÑ\ˆá*/Ô1ª%¡$ !�A�6˜1“+©%ˆÑ1Ù*/Ô1ª%¡$ !�A�6˜1“+©%ˆÑ1ˆä0°Ø #¸ñ?‰ˆô �%‘. 5Ñ(Ó)Ð)ùó 2ùÛ1s   Â+C7ÃC=c                 ór  • UR                   (       a:  UR                  5       XSS pn[        U 5       H  u  pš[        X¨USS9S   X	'   M     OUR                  (       d  [        SU-  5      eS0 pËUb  US::  a  Ub  SU::  a  S0 pÛ[        U 5       H[  u  pš[        X¡5      u  pêU(       a  US:”  a  UWU	'   [        X¡5      S    H%  u  nn[        U5      nXü;  a  U	U0XÏ'   M  UXÏ   U	'   M'     M]     UR                  5        VVs/ s H  u  nn[        U5      U4PM     nnn[        UXX4XVUS9u  nnUR                  5       nU(       a  W(       d  / nOTU(       d  UR                  UR                  4U4/nO1UR                  UR                  4XÑR                  UR                  /4/n[        UU-   U-   5      $ s  snnf )	aK  Isolate real roots of a list of polynomial using Vincent-Akritas-Strzebonski (VAS) CF approach.

References
==========

.. [1] Alkiviadis G. Akritas and Adam W. Strzebonski: A Comparative
       Study of Two Real Root Isolation Methods. Nonlinear Analysis:
       Modelling and Control, Vol. 10, No. 4, 297-304, 2005.
.. [2] Alkiviadis G. Akritas, Adam W. Strzebonski and Panagiotis S.
       Vigklas: Improving the Performance of the Continued Fractions
       Method Using New Bounds of Positive Roots.
       Nonlinear Analysis: Modelling and Control, Vol. 13, No. 3, 265-279, 2008.

NTr„   r    r­   Fr   )rw   r›   rœ   Ústrictr©   rm   )rM   rˆ   Ú	enumerater   rL   r   r   r   ÚtupleÚitemsr0   r¸   r5   rR   r/   r°   )Úpolysr&   rw   r›   rœ   r¼   r©   rm   r{   r:   ÚpÚzerosÚfactors_dictÚzero_indicesr=   r%   rs   ÚindicesÚfactors_listr´   rµ   r³   s                         r)   Údup_isolate_real_roots_listrÇ   w  s©  € ð 	‡w‡wØ—j‘j“l A©Q xˆeˆä˜eÖ$‰DˆAÜ'¨¨a¸Ñ>¸qÑAˆE‹Hò %à�W�WÜÐIÈAÑMÓNÐNà ˆ<à‰�s˜a“x c¡k°Q¸#³XØ" Bˆ|ä˜%Ö ‰ˆÜ˜QÓ"‰ˆæ�Q˜“UØˆL˜‰Oä# AÓ)¨!Ô,‰DˆAˆqÜ�a“ˆAàÓ$Ø#$ a &�“à%&�‘ Ó"ó -ñ !ð :F×9KÑ9KÔ9MÔNÒ9M©:¨1¨g”T˜!“W˜gÓ&Ñ9M€LÑNÜ,¨\¸1Ø ¸4ñA�L€Eˆ5ð 	
�‰‹€AæžØ‰æØŸ™ §¡Ð'¨Ð6Ð7‰FàŸ™ §¡Ð'¨¿¹¸q¿v¹v°ÐGÐHˆFä�%˜&‘. 5Ñ(Ó)Ð)ùó Os   Ä F3c                 óê   • U u  p4pVUu  pxpšX6-  XE-  pËXz-  X‰-  píX¼:X  a  XÞ:X  a  gX¼:”  a  XFX54u  p5pFXÞ:”  a  XŠXy4u  pypŠU(       d  Xv-  X”-  :¬  =(       d	    X…-  X£-  :*  $ Xv-  X”-  :„  =(       d	    X…-  X£-  :  $ )z6Check if Mobius transforms define disjoint intervals. Trg   )rh   ÚNr¼   ro   rp   rq   rr   r”   r•   r–   r—   Úa1d1Úb1c1Úa2d2Úb2c2s                  r)   Ú_disjoint_prÎ   ±  s“   € à�N€BˆBØ�N€BˆBà‘˜™ˆ$Ø‘˜™ˆ$àƒ|˜›Øàƒ{Ø ˜‰ˆ�àƒ{Ø ˜‰ˆ�æØ‰u˜™‰~×/ ¡¨"©%¡Ð/à‰u�r‘u‰}×- ¡¨©¡Ð-r+   c                 ó^  • / / p˜[        U 5       HZ  u  n
u  p¼[        X±X#XGSS9 H  u  pÞUR                  XÞXË45        M     [        X±X#XGSS9 H  u  nnU	R                  UUXË45        M     M\     [        U5       H~  u  n
u  p¾pÍ[        XŠS-   S 5       H[  u  nu  nnnn[	        UUUS9(       d2  [        X¾USUSS9u  p¾[        UUUSUSS9u  nn[	        UUUS9(       d  M2  UUUU4XŠU-   S-   '   M]     X¾XÍ4XŠ'   M€     [        U	5       H~  u  n
u  p¾pÍ[        XšS-   S 5       H[  u  nu  nnnn[	        UUUS9(       d2  [        X¾USUSS9u  p¾[        UUUSUSS9u  nn[	        UUUS9(       d  M2  UUUU4XšU-   S-   '   M]     X¾XÍ4Xš'   M€     U(       a¥  [        U	5       H@  u  n
u  p¾pÍUS   (       a  M  US   (       d  [        X¾USUSS9u  p¾US   (       d  M  X¾XÍ4Xš'     O   [        U5       HG  u  nu  nnnnUS   (       a  M  US   (       d  [        UUUSUSS9u  nnUS   (       d  M  UUUU4UU'     O   UR                  5       nU	 VVVVs/ s H  u  npìn[        UU5      XË4PM     n	nnnnU VVVVs/ s H  u  npìn[        UU5      XË4PM     nnnnnU	 VVVVs/ s H  u  u  nnpËU* U* 4XË4PM     n	nnnnU(       dF  U	 VVVVs/ s H  u  u  nnnnUU4U4PM     n	nnnnU VVVVs/ s H  u  u  nnnnUU4U4PM     nnnnnX˜4$ s  snnnnf s  snnnnf s  snnnnf s  snnnnf s  snnnnf )zCIsolate real roots of a list of polynomials and disjoin intervals. T)rw   r›   rœ   rm   rz   r    N)r¼   )rx   rm   rz   r   )r½   r¥   r$   r§   rÎ   r~   r5   ri   )r¹   r&   rw   r›   rœ   r¼   r©   rm   rµ   r´   r:   r%   rs   r{   rh   ÚGrÉ   r=   rV   Úmrb   rŠ   r|   r}   s                           r)   r¸   r¸   Ç  s†  € à�rˆ5ä˜wÖ'‰	ˆ‰6ˆAÜ4°Q¸sÐQTÐhlÔm‰DˆAØ�L‰L˜! ˜Ö&ñ nô 5°Q¸sÐQTÐhlÔm‰DˆAˆqØ�L‰L˜!˜Q ˜Ö&ó nñ	 (ô % UÖ+‰ˆ‰<ˆA�!Ü(¨°1©u¨v¨Ö7‰OˆA‰|��1�a˜Ü! ! Q¨v×6Ü1°!¸ÀÈÐVZÑ[‘�Ü1°!°Q¸ÀÈÐVZÑ[‘��1ô " ! Q¨v×6Ñ6ð !" 1 a¨˜|ˆE�a‘%˜!‘)Óñ  8ð ˜!�<ˆ‹ñ ,ô % UÖ+‰ˆ‰<ˆA�!Ü(¨°1©u¨v¨Ö7‰OˆA‰|��1�a˜Ü! ! Q¨v×6Ü1°!¸ÀÈÐVZÑ[‘�Ü1°!°Q¸ÀÈÐVZÑ[‘��1ô " ! Q¨v×6Ñ6ð !" 1 a¨˜|ˆE�a‘%˜!‘)Óñ  8ð ˜!�<ˆ‹ñ ,ö Ü(¨Ö/‰OˆA‰|��aØ�Q—4‘4Ø˜AŸ$Ü5°a¸AÀQÈTÐZ^Ñ_‘D�Að ˜AŸ$™$ð  !˜<�‘Ùñ  0ô  )¨Ö/‰OˆA‰|��1�a˜Ø�Q—4‘4Ø˜AŸ$Ü5°a¸¸AÀQÈTÐZ^Ñ_‘D�A�qð ˜AŸ$™$ð ˜q ! Q˜<��a‘Ùñ  0ð �K‰K‹M€EáHMÖOÊ¹¸¸AÀ!Ô" 1 eÓ,¨aÓ3É€EÓOÙHMÖOÊ¹¸¸AÀ!Ô" 1 eÓ,¨aÓ3É€EÓOá49Ö:²E¡.¡6 A q¨1�ˆr�A�2ˆh˜Ó±E€EÓ:æÙ38Ö9²5¡¡& 1 a¨!¨Q�1�a�&˜!“±5ˆÓ9Ù38Ö9²5¡¡& 1 a¨!¨Q�1�a�&˜!“±5ˆÓ9àˆ<Ðùõ PùÝOùå:ùõ :ùÝ9s   É
L
É2L
ÊL
ËL
Ë(L'
c           
      ól  • [        U 5      S::  a  gUR                  (       d  XR                  5       p[        XU5      n [	        X5      nUc6  [        U Vs/ s H  n[        Xa5      S[        U5      -  -  PM     snU5      nO'[        U Vs/ s H  n[        XbU5      PM     snU5      nUc'  [        U Vs/ s H  n[        Xa5      PM     snU5      nO'[        U Vs/ s H  n[        XcU5      PM     snU5      n[        Xx-
  5      n	Ub  [        XU5      (       d  U	S-  n	U	$ s  snf s  snf s  snf s  snf )zFReturns the number of distinct real roots of ``f`` in ``[inf, sup]``. r   r!   r    )	r	   r#   r5   r   r*   r   r   r   rF   )
r%   r&   r›   rœ   ÚRr'   r(   Ú	signs_infÚ	signs_supÚcounts
             r)   Údup_count_real_rootsr×     s  € ä�!ƒ}˜ÓØà�:�:Ø—+‘+“-ˆ1Ü˜˜aÓ ˆä�a‹O€Eà
�{Ü'ÑTYÓ([ÒTYÈq¬&°«,¸¼ZÈ»]Ñ7JÔ*JÑTYÑ([Ð]^Ó_‰	ä'ÁuÓ(NÂuÀ!¬(°1¸1Ö*=ÁuÑ(NÐPQÓRˆ	à
�{Ü'ÁÓ(GÂ¸1¬&°®,ÁÑ(GÈÓK‰	ä'ÁuÓ(NÂuÀ!¬(°1¸1Ö*=ÁuÑ(NÐPQÓRˆ	ä�	Ñ%Ó&€Eà
�œx¨°×2Ñ2Ø�‰
ˆà€Lùò )\ùâ(Nùò )Hùâ(Ns   Á$D"ÂD'Â5D,ÃD1ÚOOÚQ1ÚQ2ÚQ3ÚQ4ÚA1ÚA2ÚA3ÚA4r    r-   rZ   é   é   éûÿÿÿr!   r"   éýÿÿÿéüÿÿÿé   é   é	   é
   é   é   é   é   é   rk   é   é   ©r   r    )r    rá   )r!   rá   )rè   rá   )ræ   rá   ©r    r-   )r!   r-   ©r    r    ©r!   r    )rä   r-   )rZ   r-   )rZ   rá   )rã   rá   )râ   rá   )rä   rá   )r-   r    )rì   rí   rî   rk   rï   rð   c                 ó�   • U (       d  U(       d  [         $ U (       d  US:”  a  [        $ [        $ U(       d  U S:”  a  [        $ [        $ g)zEReturn the half-axis (or origin) on which (re, im) point is located. r   N)rØ   rÞ   rà   rÝ   rß   )ÚreÚims     r)   Ú_classify_pointrø   ü  s9   € æ–bÜˆ	æØ�‹6ÜˆIäˆIÞØ�‹6ÜˆIäˆIð	 r+   c                 ó¤  • U (       d  / $ / nU(       Gd`  U S   u  u  px  n	Xxs=:X  a  U:X  a�  O  Oš[        U 5      S:X  a(  [        X$U5      S:”  a  [        [        /$ [        [        /$ U S   u  u  n    n	[        X#U-   S-  U5      S:”  a  UR                  [        [        /5        Sn
OUR                  [        [        /5        Sn
U SS n O?[        X#U5      S:”  a  UR                  [        5        Sn
OUR                  [        5        Sn
U  He  u  u  pyp¹UR                  [        5        US   S-  S:X  a  U
* n
Xt:w  d  M3  U
S:”  a  UR                  [        5        MP  UR                  [        5        Mg     U$ U(       Gd`  U S   u  u  px  n	Xxs=:X  a  U:X  a�  O  Oš[        U 5      S:X  a(  [        XU5      S:”  a  [        [        /$ [        [        /$ U S   u  u  n    n	[        XU-   S-  U5      S:”  a  UR                  [        [        /5        SnOUR                  [        [        /5        SnU SS n O?[        XU5      S:”  a  UR                  [        5        SnOUR                  [        5        SnU  He  u  u  pyp¹UR                  [        5        US   S-  S:X  a  U* nXt:w  d  M3  US:”  a  UR                  [        5        MP  UR                  [        5        Mg     U$ [        XU5      n[        X#U5      nU(       a  U(       dw  UR                  [        XÞ5      5        [        U 5      S:X  a  [        XU5      n[        X$U5      nO0U S   u  u  n    n	[        XU-   S-  U5      n[        X#U-   S-  U5      nU SS n US:”  a  SnOSnUS:”  a  Sn
OSn
[        [        [        [        S.nUR                  XüU
4   5        U  H�  u  u  pxp¹Xx:X  a7  [        XU5      n[        X'U5      n[        XÞ5      nUb  UR                  U5        SU;   a  US   S-  S:X  a  U* nSU;   a  US   S-  S:X  a  U
* n
Xx:X  a  X„:X  a  Mz  UR                  XüU
4   5        M‘     U$ )zJGenerate a sequence of extended quadrants from a list of critical points. r   r    r-   r!   N)ró   rô   )r!   r!   )r    r!   )r.   r   rØ   rÞ   rà   r¢   r$   rÝ   rß   rø   rÙ   rÚ   rÛ   rÜ   )Ú	intervalsr�   r˜   r(   r9   r{   ÚQr;   rW   rŠ   Úf2_sgnrÅ   Úf1_sgnrö   r÷   ÚsgnÚclss                    r)   Ú_intervals_to_quadrantsr     s  € æØˆ	à
€AçØ  ‘|‰‰ˆ��1à�;�QŽ;Ü�9‹~ Ó"Ü˜B 1Ó%¨Ó)Ü¤˜8�Oä¤˜8�Oà(¨™|‘‘��A˜˜1ä˜B Q¡¨¡	¨1Ó-°Ó1Ø—H‘Hœb¤"˜XÔ&Ø‘Fà—H‘Hœb¤"˜XÔ&Ø�Fà% a b˜M‘	ä˜˜qÓ! AÓ%Ø—‘œ”Ø‘à—‘œ”Ø�ã"+Ñ‰FˆQ�GØ�H‰H”RŒLà�q‰z˜A‰~ Ó"Ø ˜�à�vØ˜A“:Ø—H‘HœR–Là—H‘HœR–Lñ #,ð ˆçØ  ‘|‰‰ˆ��1à�;�QŽ;Ü�9‹~ Ó"Ü˜B 1Ó%¨Ó)Ü¤˜8�Oä¤˜8�Oà(¨™|‘‘��A˜˜1ä˜B Q¡¨¡	¨1Ó-°Ó1Ø—H‘Hœb¤"˜XÔ&Ø‘Fà—H‘Hœb¤"˜XÔ&Ø�Fà% a b˜M‘	ä˜˜qÓ! AÓ%Ø—‘œ”Ø‘à—‘œ”Ø�ã"+Ñ‰FˆQ�GØ�H‰H”RŒLà�q‰z˜A‰~ Ó"Ø ˜�à�vØ˜A“:Ø—H‘HœR–Là—H‘HœR–Lñ #,ð ˆä	�"˜Ó	€BÜ	�"˜Ó	€Bæ–RØ	�‰” Ó(Ô)äˆy‹>˜QÓÜ˜" Ó#ˆBÜ˜" Ó#‰Bà$ Q™<‰L‰FˆQ��A�qä˜" 1™u a™i¨Ó+ˆBÜ˜" 1™u a™i¨Ó+ˆBà˜a˜b�Mˆ	à	ˆAƒvØ‰àˆà	ˆAƒvØ‰àˆô ÜÜÜñ	€Cð ‡H�HˆS˜&Ð!Ñ"Ô#ã'Ñ‰ˆ�Ø‹6Ü˜" Ó#ˆBÜ˜" Ó#ˆBä! "Ó)ˆCà‰Ø—‘˜”à�‹<Ø�q‰z˜A‰~ Ó"Ø ˜�à�‹<Ø�q‰z˜A‰~ Ó"Ø ˜�à“˜1�6Ø�H‰H�S &Ð)Ñ*Ö+ñ' (ð* €Hr+   c                 ó   • USL a  / SQnSSSSS.nO/ SQnSSSSS.nUbZ  USLaU  [        U5      n[        / SQ5       H  u  pxX„;   d  M  SXW'   M     [        / S	Q5       H  u  pyX”;   d  M  SXgS-
  S
-  U4'   M     XX#// pº[        U
5       GH  u  p|U(       d  M  US   [        :X  a  USS nUS   [        :X  a]  US-
  S
-  USS pÍX­   S   [        US   4nU[        ;   a  UR	                  [        U   XmU4   45        O[        S[        U5      -   5      eUS   SnnU[        U5      :  d  M£  UU   US-   nnU[        :w  ag  UU4nU[        ;   a  UR	                  [        U   S45        O‰U[        ;   a  UR	                  [        U   XW   45        Ob[        S[        U5      -   5      eUUUU   4US-   nnU[        ;   a  UR	                  [        U   XW   45        O[        S[        U5      -   5      eUS   nU[        U5      :  a  MÜ  GM‚     U$ )z9Transform sequences of quadrants to a sequence of rules. T)r    r    r   r   r    r   )rñ   rò   )r-   rZ   )rZ   r   )r   r   r   r   N)ÚSÚErÉ   ÚW)ÚSWÚSEÚNEÚNWrá   r!   r"   z3 element rule (corner): z2 element rule (inside): z3 element rule (edge): )	Úsetr½   rØ   Ú_rules_ambiguousr$   ÚNotImplementedErrorÚstrr.   Ú_rules_simple)ÚQ_L1ÚQ_L2ÚQ_L3ÚQ_L4ÚexcludeÚedgesÚcornersr:   ÚedgeÚcornerÚQQÚrulesrû   r=   ÚqqÚq1rs   Úq2s                     r)   Ú_traverse_quadrantsr  ¢  sL  € à�$‚Úˆð ØØØñ	
‰ò ˆð ØØØñ	
ˆð Ñ˜w¨dÒ2Ü�g“,ˆä Ò!5Ö6‰GˆAØ�Ø�“ñ 7ô #Ò#;Ö<‰IˆAØÕ Ø,-�˜a™% 1™ aÐ(Ó)ñ =ð ˜TÐ(¨"ˆä˜"—‰ˆÞÙàˆR‰5”B‹;Ø�#�2�ˆAàˆQ‰4”2‹:Ø˜‘E˜Q‘;  ! " ˆqØ‘%˜‘)œR  1¡Ð&ˆBàÔ%Ó%Ø—‘Ô.¨rÑ2°GÀ¸F±OÐDÕEä)Ð*EÌÈBËÑ*OÓPÐPà�!‘�aˆAˆà”#�a“&�jØ�a‘D˜!˜a™%�ˆBà”R‹xØ˜"�X�àœÓ&Ø—L‘L¤-°Ñ"3°QÐ!7Õ8ØÔ+Ó+Ø—L‘LÔ"2°2Ñ"6¸¹Ð!AÕBä-Ð.IÌCÐPRËGÑ.SÓTÐTà˜R  1¡˜¨¨A©�A�àÔ)Ó)Ø—L‘LÔ"2°2Ñ"6¸¹Ð!AÕBä-Ð.GÌ#ÈbË'Ñ.QÓRÐRà�B‘ˆBð) ”#�a“&�jˆjñ% ðP €Lr+   c           
      óf   • [        U 5       VVVVs/ s H  u  u  pp4X!4X44PM     snnnn$ s  snnnnf )zKReverse intervals for traversal from right to left and from top to bottom. )r1   )rú   r;   rW   rÅ   r%   s        r)   Ú_reverse_intervalsr  î  s/   € ä<DÀYÔ<OÖQÒ<OÑ&8¡f q¨gˆqˆf�gÓ!Ñ<OÔQÐQùÕQs   ‘+
c                 óR   ^• [        [        U4S jU  5       5      T" S5      -  5      $ )zNCompute the winding number of the input polynomial, i.e. the number of roots. c              3   óF   >#   • U  H  u  pT" [         U   U   6 v •  M     g 7frE   )Ú_values)rG   r9   r:   rb   s      €r)   rI   Ú"_winding_number.<locals>.<genexpr>ô  s    øé € Ð7²Q©T¨Q‘5œ' !™* Q™-Õ(²Qùs   ƒ!r-   )rl   Úsum)ÚTrb   s    `r)   Ú_winding_numberr%  ò  s"   ø€ äŒsÔ7±QÓ7Ó7¹%À»(ÑBÓCÐCr+   c           
      óð  ^+^,• UR                   (       d  UR                  (       d  [        SU-  5      eUR                   (       a  XR                  5       snm+OUR	                  5       Usnm+[        XT+5      n Ub  Uc:  [        U 5      [        [        U T+5      5      snm,S[        U+U,4S jU  5       5      -  nUc  W* U* p˜OUu  p‰Uc  W7U7pºOUu  p«[        U T+5      u  pÍ[        XÉSST+5      n[        XÙSST+5      n[        UT+USS9u  nn[        UT+USS9u  nn[        XÊSST+5      n[        XÚSST+5      n[        UT+USS9u  nn[        UT+USS9u  nn[        XËSST+5      n[        XÛSST+5      n[        UT+USS9u  nn[        UT+USS9u  nn[        XÈSST+5      n[        XØSST+5      n[        UT+USS9u  nn[        UT+USS9u  nnUU/nUU/nUU/n UU/n![        UXXU
SSSS9n"[        UXYUSSSS9n#[        U XXU
SSSS9n$[        U!XYUSSSS9n%[        U$5      n$[        U%5      n%[        U"XïXŠT+5      n&[        U#UUX›T+5      n'[        U$UUX¨T+5      n([        U%UUX¹T+5      n)[!        U&U'U(U)US	9n*[#        U*T+5      $ )
zRCount all roots in [u + v*I, s + t*I] rectangle using Collins-Krandick algorithm. z.complex root counting is not supported over %sr-   c              3   óZ   >#   • U  H   nTR                  [        U5      T5      v •  M"     g 7frE   ©ÚquorF   ©rG   rc   r{   rH   s     €€r)   rI   Ú*dup_count_complex_roots.<locals>.<genexpr>  s#   øé € Ð/ªQ¨�!—%‘%œ˜A› ×#Ð#ªQùó   ƒ(+r    Tr„   r   )r›   rœ   rm   r©   r¼   ©r  )rL   rM   r   r5   rˆ   r   r	   rF   r   r6   r   r   r   rÇ   r  r   r  r%  )-r%   r&   r›   rœ   r  rÓ   rŠ   ÚBr|   r}   r(   r9   r�   r˜   Úf1L1FÚf2L1FÚf1L1RÚf2L1RÚf1L2FÚf2L2FÚf1L2RÚf2L2RÚf1L3FÚf2L3FÚf1L3RÚf2L3RÚf1L4FÚf2L4FÚf1L4RÚf2L4RÚS_L1ÚS_L2ÚS_L3ÚS_L4ÚI_L1ÚI_L2ÚI_L3ÚI_L4r  r  r  r  r$  r{   rH   s-                                              @@r)   Údup_count_complex_rootsrG  ö  sÙ  ù€ à�7�7˜1Ÿ7Ÿ7ÜÐJÈQÑNÓOÐOà‡w‡wØ—+‘+“-ˆˆ‰1à�z‰z‹|˜Qˆˆˆ1ä�A˜!Ó€Aà
�{�c‘kÜ˜1“œs¤6¨!¨Q£<Ó0ˆˆˆ2ØŒcÕ/©QÓ/Ó/Ñ/ˆà
�{Ø�"�q�b‰Aà‰ˆà
�{Ø�"�q�b‰Aà‰ˆä˜1˜aÓ �F€Bä˜˜q ! QÓ'€EÜ˜˜q ! QÓ'€Eä  q¨!°TÑ:�H€A€uÜ  q¨!°TÑ:�H€A€uä˜˜q ! QÓ'€EÜ˜˜q ! QÓ'€Eä  q¨!°TÑ:�H€A€uÜ  q¨!°TÑ:�H€A€uä˜˜q ! QÓ'€EÜ˜˜q ! QÓ'€Eä  q¨!°TÑ:�H€A€uÜ  q¨!°TÑ:�H€A€uä˜˜q ! QÓ'€EÜ˜˜q ! QÓ'€Eä  q¨!°TÑ:�H€A€uÜ  q¨!°TÑ:�H€A€uà�5ˆ>€DØ�5ˆ>€DØ�5ˆ>€DØ�5ˆ>€Dä& t¨Q¸1À4ÈtÐ\`Ña€DÜ& t¨Q¸1À4ÈtÐ\`Ña€DÜ& t¨Q¸1À4ÈtÐ\`Ña€DÜ& t¨Q¸1À4ÈtÐ\`Ña€Dä˜dÓ#€DÜ˜dÓ#€Dä" 4¨°q¸QÓ?€DÜ" 4¨°°q¸QÓ?€DÜ" 4¨°°q¸QÓ?€DÜ" 4¨°°q¸QÓ?€Dä˜D $¨¨d¸GÑD€Aä˜1˜aÓ Ð r+   c
           
      óx  • Xsu  p«u  pÍUu  pïnnUu  nnnnUu  nnnnUu  nnnnX¬-   S-  n[        UUSSU	5      n[        UUSSU	5      n [        UU /X›USSSS9n!/ / n#n"U!Un%n$/ / n'n&U[        U!5      n)n(U Hí  nUu  u  pn*n+X:X  aV  UU:X  a$  U"R                  U5        U#R                  U5        M:  UU:  a  U"R                  U5        MS  U#R                  U5        Mf  UU::  a  U"R                  U5        M  UU:¼  a  U#R                  U5        M˜  [	        U+XU	R                  5       USS9u  pUU::  a  U"R                  X4U*U+45        UU:¼  d  MØ  U#R                  X4U*U+45        Mï     U Hí  nUu  u  p!n*n+X:X  aV  UU:X  a$  U&R                  U5        U'R                  U5        M:  UU:  a  U&R                  U5        MS  U'R                  U5        Mf  UU::  a  U&R                  U5        M  UU:¼  a  U'R                  U5        M˜  [	        U+XU	R                  5       USS9u  pUU::  a  U&R                  X!4U*U+45        UU:¼  d  MØ  U'R                  X!4U*U+45        Mï     [        U"UUU
UU	5      n,[        U$UU X½U	5      n-[        U&UUUX©5      n.Un/[        U#UUUXÉ5      n0Un1[        U'UUUUU	5      n2[        U)UU XÛU	5      n3[        U,U-U.U/SS9n4[        U0U1U2U3SS9n5[        U4U	5      n6[        U5U	5      n7U"U$U&U(4n8U,U-U.U/4n9U#U%U'U)4n:U0U1U2U34n;UUUU4n<UU UU4n=UUUU4n>UUUU 4n?X«4UU4p!UU4XÍ4nAn@U6XU8U9U<U=4nBU7U@UAU:U;U>U?4nCUBUC4$ )zFVertical bisection step in Collins-Krandick root isolation algorithm. r-   r   r    T©r›   rœ   rm   r¼   r©   ©ry   rm   r-  ©	r   rÇ   r  r$   rŒ   rˆ   r   r  r%  )DrÉ   r;   rW   ra   rû   ÚF1ÚF2r�   r˜   r{   r|   r}   r(   r9   rC  rD  rE  rF  r  r  r  r  r/  r3  r7  r;  r0  r4  r8  r<  ÚxÚf1VÚf2VÚI_VÚI_L1_LÚI_L1_RÚI_L2_LÚI_L2_RÚI_L3_LÚI_L3_RÚI_L4_LÚI_L4_RrÅ   ÚhÚQ_L1_LÚQ_L2_LÚQ_L3_LÚQ_L4_LÚQ_L1_RÚQ_L2_RÚQ_L3_RÚQ_L4_RÚT_LÚT_RÚN_LÚN_RÚI_LÚQ_LÚI_RÚQ_RÚF1_LÚF2_LÚF1_RÚF2_Rrc   rd   ÚD_LÚD_RsD                                                                       r)   Ú_vertical_bisectionrq  @  sÕ  € à€N�F€Q‰FˆQàÑ€D��dØÑ€Dˆ$��dà!#Ñ€Eˆ5�%˜Ø!#Ñ€Eˆ5�%˜à	
‰�!‰€Aä
�b˜!˜Q  1Ó
%€CÜ
�b˜!˜Q  1Ó
%€Cä
% s¨C j°!ÀÈÐUYÐaeÑ
f€Cà˜ˆF€FØ˜$ˆF€FØ˜ˆF€FØÔ-¨cÓ2ˆF€FãˆØÑ‰ˆ�˜à‹6Ø�A‹vØ—‘˜aÔ Ø—‘˜aÖ Ø�Q“Ø—‘˜aÖ à—‘˜aÖ à�A‹vØ—‘˜aÖ Ø�a“Ø—‘˜aÖ ä+¨A¨q°Q·Z±Z³\ÈAÐTXÑY‘�à˜“6Ø—M‘M A 6¨7°AÐ"6Ô7Ø˜•6Ø—M‘M A 6¨7°AÐ"6Ö7ñ- ó0 ˆØÑ‰ˆ�˜à‹6Ø�A‹vØ—‘˜aÔ Ø—‘˜aÖ Ø�Q“Ø—‘˜aÖ à—‘˜aÖ à�A‹vØ—‘˜aÖ Ø�a“Ø—‘˜aÖ ä+¨A¨q°Q·Z±Z³\ÈAÐTXÑY‘�à˜“6Ø—M‘M A 6¨7°AÐ"6Ô7Ø˜•6Ø—M‘M A 6¨7°AÐ"6Ö7ñ- ô0 % V¨U°E¸1¸aÀÓC€FÜ$ V¨S°#°q¸QÓ?€FÜ$ V¨U°E¸1¸aÓC€FØ€Fä$ V¨U°E¸1¸aÓC€FØ€FÜ$ V¨U°E¸1¸aÀÓC€FÜ$ V¨S°#°q¸QÓ?€Fä
˜f f¨f°fÀdÑ
K€CÜ
˜f f¨f°fÀdÑ
K€Cä
˜#˜qÓ
!€CÜ
˜#˜qÓ
!€Cà�6˜6 6Ð
*€CØ�6˜6 6Ð
*€Cà�6˜6 6Ð
*€CØ�6˜6 6Ð
*€Cà�3˜˜uÐ%€DØ�3˜˜uÐ%€Dà�5˜% Ð%€DØ�5˜% Ð%€Dàˆ6�A�q�6€qØˆqˆ6�A�6€q€Aà��c˜3  dÐ
+€CØ��1�c˜3  dÐ
+€Cà�ˆ8€Or+   c
           
      óx  • Xsu  p«u  pÍUu  pïnnUu  nnnnUu  nnnnUu  nnnnX½-   S-  n[        UUSSU	5      n[        UUSSU	5      n [        UU /XšUSSSS9n!UU!n#n"/ / n%n$[        U!5      Un'n&/ / n)n(U Hí  nUu  u  pn*n+X:X  aV  UU:X  a$  U$R                  U5        U%R                  U5        M:  UU:  a  U$R                  U5        MS  U%R                  U5        Mf  UU::  a  U$R                  U5        M  UU:¼  a  U%R                  U5        M˜  [	        U+XU	R                  5       USS9u  pUU::  a  U$R                  X4U*U+45        UU:¼  d  MØ  U%R                  X4U*U+45        Mï     U Hí  nUu  u  p!n*n+X:X  aV  UU:X  a$  U(R                  U5        U)R                  U5        M:  UU:  a  U(R                  U5        MS  U)R                  U5        Mf  UU::  a  U(R                  U5        M  UU:¼  a  U)R                  U5        M˜  [	        U+XU	R                  5       USS9u  pUU::  a  U(R                  X!4U*U+45        UU:¼  d  MØ  U)R                  X!4U*U+45        Mï     Un,[        U$UUUUU	5      n-[        U&UU XÊU	5      n.[        U(UUUX¹5      n/[        U#UU X¬U	5      n0[        U%UUUXÙ5      n1Un2[        U)UUUUU	5      n3[        U,U-U.U/SS9n4[        U0U1U2U3SS9n5[        U4U	5      n6[        U5U	5      n7U"U$U&U(4n8U,U-U.U/4n9U#U%U'U)4n:U0U1U2U34n;UUUU4n<UUU U4n=UUUU4n>U UUU4n?X«4UU4p!U
U4XÍ4nAn@U6XU8U9U<U=4nBU7U@UAU:U;U>U?4nCUBUC4$ )zHHorizontal bisection step in Collins-Krandick root isolation algorithm. r-   r    TrI  rJ  r-  rK  )DrÉ   r;   rW   ra   rû   rL  rM  r�   r˜   r{   r|   r}   r(   r9   rC  rD  rE  rF  r  r  r  r  r/  r3  r7  r;  r0  r4  r8  r<  ÚyÚf1HÚf2HÚI_HÚI_L1_BÚI_L1_UÚI_L2_BÚI_L2_UÚI_L3_BÚI_L3_UÚI_L4_BÚI_L4_UrÅ   rZ  ÚQ_L1_BÚQ_L2_BÚQ_L3_BÚQ_L4_BÚQ_L1_UÚQ_L2_UÚQ_L3_UÚQ_L4_UÚT_BÚT_UÚN_BÚN_UÚI_BÚQ_BÚI_UÚQ_UÚF1_BÚF2_BÚF1_UÚF2_Urc   rd   ÚD_BÚD_UsD                                                                       r)   Ú_horizontal_bisectionr•  ª  sÔ  € à€N�F€Q‰FˆQàÑ€D��dØÑ€Dˆ$��dà!#Ñ€Eˆ5�%˜Ø!#Ñ€Eˆ5�%˜à	
‰�!‰€Aä
�b˜!˜Q  1Ó
%€CÜ
�b˜!˜Q  1Ó
%€Cä
% s¨C j°!ÀÈÐUYÐaeÑ
f€Cà˜3ˆF€FØ˜ˆF€FÜ'¨Ó,¨dˆF€FØ˜ˆF€FãˆØÑ‰ˆ�˜à‹6Ø�A‹vØ—‘˜aÔ Ø—‘˜aÖ Ø�Q“Ø—‘˜aÖ à—‘˜aÖ à�A‹vØ—‘˜aÖ Ø�a“Ø—‘˜aÖ ä+¨A¨q°Q·Z±Z³\ÈAÐTXÑY‘�à˜“6Ø—M‘M A 6¨7°AÐ"6Ô7Ø˜•6Ø—M‘M A 6¨7°AÐ"6Ö7ñ- ó0 ˆØÑ‰ˆ�˜à‹6Ø�A‹vØ—‘˜aÔ Ø—‘˜aÖ Ø�Q“Ø—‘˜aÖ à—‘˜aÖ à�A‹vØ—‘˜aÖ Ø�a“Ø—‘˜aÖ ä+¨A¨q°Q·Z±Z³\ÈAÐTXÑY‘�à˜“6Ø—M‘M A 6¨7°AÐ"6Ô7Ø˜•6Ø—M‘M A 6¨7°AÐ"6Ö7ñ- ð0 €FÜ$ V¨U°E¸1¸aÀÓC€FÜ$ V¨S°#°q¸QÓ?€FÜ$ V¨U°E¸1¸aÓC€Fä$ V¨S°#°q¸QÓ?€FÜ$ V¨U°E¸1¸aÓC€FØ€FÜ$ V¨U°E¸1¸aÀÓC€Fä
˜f f¨f°fÀdÑ
K€CÜ
˜f f¨f°fÀdÑ
K€Cä
˜#˜qÓ
!€CÜ
˜#˜qÓ
!€Cà�6˜6 6Ð
*€CØ�6˜6 6Ð
*€Cà�6˜6 6Ð
*€CØ�6˜6 6Ð
*€Cà�5˜#˜uÐ%€DØ�5˜#˜uÐ%€Dà�˜˜uÐ%€DØ�˜˜uÐ%€Dàˆ6�A�q�6€qØˆqˆ6�A�6€q€Aà��c˜3  dÐ
+€CØ��1�c˜3  dÐ
+€Cà�ˆ8€Or+   c                 ó˜   • Su  p[        U 5       H'  u  nu  nu  pVu  px      nXu-
  X†-
  -  n	Ub  X‘:  d  M%  X“p!M)     U R                  U5      $ )z0Find a rectangle of minimum area for bisection. ©NN)r½   rQ   )
Ú
rectanglesÚmin_arear=   r:   rŠ   r|   r}   r(   r9   Úareas
             r)   Ú_depth_first_selectr›    s^   € à�K€Hä.7¸
Ö.CÑ*ˆÑ*ˆA‰v�‘v˜˜q ! Q¨Ø‘˜™‰ˆàÑ˜t�Ø’añ	 /Dð �>‰>˜!ÓÐr+   c                 óD   • Xsu  p4u  pVUb  XS-
  U:  =(       a    Xd-
  U:  $ g)z8Return ``True`` if the given rectangle is small enough. Trg   )r;   rW   rw   r|   r}   r(   r9   s          r)   Ú_rectangle_small_pr�     s.   € à€N�F€Q‰FˆQà
�Ø‰u�s‰{×*˜q™u s™{Ð*àr+   c                 óä  ^H^I• UR                   (       d  UR                  (       d  [        SU-  5      e[        U 5      S::  a  / $ UR                   (       a  UR	                  5       mHOUmH[        XTH5      n [        [        U TH5      5      mIS[        UHUI4S jU  5       5      -  nU* THR                  4Xf4su  pxu  pšUb  UnUb  Un	US:  d
  X¨::  d  X—::  a  [        S5      e[        U TH5      u  p¼[        X¸SSTH5      n[        XÈSSTH5      n[        X¹SSTH5      n[        XÉSSTH5      n[        XºSSTH5      n[        XÊSSTH5      n[        X·SSTH5      n[        XÇSSTH5      nXÞ/nUU/nUU/nUU/n[        UTHXySSSS9n[        UTHXŠSSSS9n[        UTHXySSSS9n[        UTHXŠSSSS9n[        U5      n[        U5      n[        UXÞXyTH5      n[        UUUXŠTH5      n[        UUUX—TH5      n[        UUUX¨TH5      n [!        UUUU 5      n![#        U!TH5      n"U"(       d  / $ UUUU4n#UUUU 4n$XßUU4n%UUUU4n&U"Xx4Xš4U#U$U%U&4// n(n'U'(       GaÈ  [%        U'5      u  n"u  pxu  pšn#n$n%n&X—-
  X¨-
  :”  aÏ  ['        U"Xx4Xš4U#U$U%U&X¼TH5
      u  n)n*U)u  n+n,n-n.n/n0n1U*u  n2n3n4n5n6n7n8U+S:¼  aK  U+S:X  a4  [)        U,U-U5      (       a"  U(R+                  [-        U,U-U.U/U0U1X¼TH5	      5        OU'R+                  U)5        U2S:¼  aK  U2S:X  a4  [)        U3U4U5      (       a"  U(R+                  [-        U3U4U5U6U7U8X¼TH5	      5        OàU'R+                  U*5        OÎ[/        U"Xx4Xš4U#U$U%U&X¼TH5
      u  n9n:U9u  n;n,n-n<n=n>n?U:u  n@n3n4nAnBnCnDU;S:¼  aK  U;S:X  a4  [)        U,U-U5      (       a"  U(R+                  [-        U,U-U<U=U>U?X¼TH5	      5        OU'R+                  U95        W@S:¼  aK  W@S:X  a4  [)        U3U4U5      (       a"  U(R+                  [-        U3U4WAWBWCWDX¼TH5	      5        OU'R+                  U:5        U'(       a  GMÈ  [1        U(S	 S
9/ n(nEUE H$  nFU(R3                  UFR5                  5       UF/5        M&     U(       a  U($ U( VGs/ s H  nGUGR7                  5       PM     snG$ s  snGf )zTIsolate complex roots of a square-free polynomial using Collins-Krandick algorithm. z3isolation of complex roots is not supported over %sr   r-   c              3   óZ   >#   • U  H   nTR                  [        U5      T5      v •  M"     g 7frE   r(  r*  s     €€r)   rI   Ú0dup_isolate_complex_roots_sqf.<locals>.<genexpr>9  s#   øé € Ð+ª Aˆa�e‰e”C˜“F˜B×Ðªùr,  z'not a valid complex isolation rectangler    TrI  c                 ó2   • U R                   U R                  4$ rE   )ÚaxÚay)r‘   s    r)   Ú<lambda>Ú/dup_isolate_complex_roots_sqf.<locals>.<lambda>œ  s   € °·±°q·t±t±r+   )Úkey)rL   rM   r   r	   r5   r   rF   r   r6   rR   r‰   r   r   rÇ   r  r   r  r%  r›  rq  r�  r$   ÚComplexIntervalr•  r°   r¢   Ú	conjugateÚas_tuple)Jr%   r&   rw   r›   rœ   r²   r.  r|   r}   r(   r9   r�   r˜   Úf1L1Úf2L1Úf1L2Úf2L2Úf1L3Úf2L3Úf1L4Úf2L4r?  r@  rA  rB  rC  rD  rE  rF  r  r  r  r  r$  rÉ   ra   rû   rL  rM  r˜  rŽ   ro  rp  re  r;   rW   rg  rh  rk  rl  rf  rc   rd   ri  rj  rm  rn  r“  r”  r‰  r‹  rŒ  r�  r�  rŠ  r�  rŽ  r‘  r’  Ú_rootsÚrootr‘   r{   rH   sJ                                                                           @@r)   Údup_isolate_complex_roots_sqfr´  )  s  ù€ à�7�7˜1Ÿ7Ÿ7ÜÐOÐRSÑSÓTÐTä�!ƒ}˜ÓØˆ	à‡w‡wØ�K‰K‹M‰àˆä�A˜!Ó€Aä	ŒV�A�q‹\Ó	€BØ	Œ#Õ+©Ó+Ó
+Ñ+€Aà�b˜!Ÿ&™&�\ A 6€N�F€Q‰FˆQà
�Øˆà
�Øˆàˆ1ƒu�“˜!›&ÜÐBÓCÐCä˜1˜aÓ �F€Bä�r˜a  AÓ&€DÜ�r˜a  AÓ&€Dä�r˜a  AÓ&€DÜ�r˜a  AÓ&€Dä�r˜a  AÓ&€DÜ�r˜a  AÓ&€Dä�r˜a  AÓ&€DÜ�r˜a  AÓ&€Dàˆ<€DØ�$ˆ<€DØ�$ˆ<€DØ�$ˆ<€Dä& t¨Q°AÀ4ÐPTÐ\`Ña€DÜ& t¨Q°AÀ4ÐPTÐ\`Ña€DÜ& t¨Q°AÀ4ÐPTÐ\`Ña€DÜ& t¨Q°AÀ4ÐPTÐ\`Ña€Dä˜dÓ#€DÜ˜dÓ#€Dä" 4¨°Q¸1Ó=€DÜ" 4¨¨t°Q¸1Ó=€DÜ" 4¨¨t°Q¸1Ó=€DÜ" 4¨¨t°Q¸1Ó=€Dä˜D $¨¨dÓ3€AÜ˜˜1Ó€AæØˆ	à	ˆt�T˜4Ð €AØ	ˆt�T˜4Ð €Aà
�d˜DÐ	!€BØ
��d˜DÐ	!€Bà˜a˜V a V¨Q°°2°rÐ:Ð;¸R�€Jç
Ü*=¸jÓ*IÑ'ˆ‰6ˆA‘6�A˜1˜a  Rà‰5�1‘5‹=Ü*¨1¨q¨f°q°f¸aÀÀBÈÈBÐTUÓV‰HˆC�à.1Ñ+ˆC��A�s˜C  tØ.1Ñ+ˆC��A�s˜C  tà�a‹xØ˜!“8Ô 2°1°a¸× =Ñ =Ø—L‘L¤°°A°s¸CÀÀtÈRÐUVÓ!WÕXà×%Ñ% cÔ*à�a‹xØ˜!“8Ô 2°1°a¸× =Ñ =Ø—L‘L¤°°A°s¸CÀÀtÈRÐUVÓ!WÕXà×%Ñ% cÔ*øä,¨Q°°¸¸ÀÀ1ÀbÈ"ÈbÐVWÓX‰HˆC�à.1Ñ+ˆC��A�s˜C  tØ.1Ñ+ˆC��A�s˜C  tà�a‹xØ˜!“8Ô 2°1°a¸× =Ñ =Ø—L‘L¤Ø˜1˜c 3¨¨d°B¸Aó"?õ @ð ×%Ñ% cÔ*à�a‹xØ˜!“8Ô 2°1°a¸× =Ñ =Ø—L‘L¤Ø˜1˜c 3¨¨d°B¸Aó"?õ @ð ×%Ñ% cÔ*÷M ‰*ôP ˜5Ñ&<Ñ=¸rˆE€FãˆØ�‰�d—n‘nÓ&¨Ð-Ö.ñ ö Øˆá',Ó.¢u !�—‘–¡uÑ.Ð.ùÒ.s   ÑQ-c           
      ó0   • [        XX#XEUS9[        XX#XFS94$ )zBIsolate real and complex roots of a square-free polynomial ``f``. )rw   r›   rœ   rm   r²   )rw   r›   rœ   r²   )r¶   r´  )r%   r&   rw   r›   rœ   rm   r²   s          r)   Údup_isolate_all_roots_sqfr¶  ¦  s+   € ô 	# A¨cÀÐYaÑbÜ% a°À#ÑYð[ð [r+   c           	      óX  • UR                   (       d  UR                  (       d  [        SU-  5      e[        X5      u  pg[	        U5      S:X  aH  Uu  u  p[        XX#XES9u  pšU	 VVs/ s H
  u  p¼X¼4U4PM     n	nnU
 VVs/ s H
  u  p¼X¼4U4PM     n
nnXš4$ [        S5      es  snnf s  snnf )zFIsolate real and complex roots of a non-square-free polynomial ``f``. z<isolation of real and complex roots is not supported over %sr    r¯   z2only trivial square-free polynomials are supported)rL   rM   r   r   r.   r¶  r  )r%   r&   rw   r›   rœ   rm   rŠ   r¹   rs   Ú	real_partÚcomplex_partr;   rW   s                r)   Údup_isolate_all_rootsrº  ¬  s­   € à�7�7˜1Ÿ7Ÿ7ÜÐXÐ[\Ñ\Ó]Ð]ä˜aÓ#�J€Aä
ˆ7ƒ|�qÓØ‰	‰ˆ!ä";Ø�c¨ñ#8Ñˆ	ñ 1:Ô;²	¡f q˜�v˜q“k±	ˆ	Ñ;Ù3?ÔA²<©¨!˜1˜& !›±<ˆÑAàÐ&Ð&ä!Ð#WÓXÐXùó <ùÛAs   Á%B Á>B&c                   óÎ   • \ rS rSrSrS r\S 5       r\S 5       rS r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       rS rS rS rS rS rS rS rSS jrS rSrg)r±   iÀ  z?A fully qualified representation of a real isolation interval. c                 ó„  • [        U5      S:X  a�  Uu  pESU l        US:  a4  US::  a  [        X#5      U* U* S4u  p$oPl        O[        SU< SU< S35      e[	        XE4UR                  5       5      u  pgp‰[        U[        Xg/5      [        X‰/5      U5      nXgX‰4U l        OUSS	 U l        US	   U l        X#sU l	        U l
        g)
z8Initialize new real interval with complete information. r-   Fr   Tr†   r€   r‡   Nr!   )r.   Únegr   r‰   re   r5   r   r
   rz   r%   Údom)
ÚselfÚdatar%   r¾  r(   r9   r;   rW   rc   rd   s
             r)   Ú__init__ÚRealInterval.__init__Ã  sÅ   € äˆt‹9˜‹>Ø‰DˆAàˆDŒHà�1‹uØ˜“6Ü(2°1Ó(:¸Q¸BÀÀÀDÐ(HÑ%�A˜!�Xå$ÓPQÓSTÐ%UÓVÐVä.°¨v°s·}±}³ÓG‰JˆA�!ä˜a¤¨A¨6Ó!2Ü!*¨A¨6Ó!2°Có9ˆAð  ˜*ˆD�Kà˜s ˜)ˆDŒKØ˜B‘xˆDŒHàÐˆŒ�•r+   c                 ó   • [         $ rE   )r±   ©r¿  s    r)   ÚfuncÚRealInterval.funcÜ  s   € äÐr+   c                 óh   • U nUR                   UR                  4-   UR                  UR                  4$ rE   )rz   r½  r%   r¾  ©r¿  r:   s     r)   ÚargsÚRealInterval.argsà  s+   € àˆØ—‘˜AŸE™E˜8Ñ# Q§S¡S¨!¯%©%Ð0Ð0r+   c                 ód   • [        U5      [        U 5      La  gU R                  UR                  :H  $ ©NF©ÚtyperÉ  ©r¿  Úothers     r)   Ú__eq__ÚRealInterval.__eq__å  ó(   € Ü�‹;œd 4›jÒ(ØØ�y‰y˜EŸJ™JÑ&Ð&r+   c                 óâ   • U R                   R                  5       nU R                  u  p#pEU R                  (       d  X%-  X4-  :  a  U" X$5      $ U" X55      $ X%-  X4-  :”  a	  U" X$5      * $ U" X55      * $ )z%Return the position of the left end. )r¾  r5   rz   r½  )r¿  rb   r;   rW   rc   rd   s         r)   r;   ÚRealInterval.aê  sl   € ð —‘×"Ñ"Ó$ˆØ—[‘[‰
ˆˆaà�x�xØ‰s�Q‘S‹yÙ˜Q“{Ð"Ù˜“;Ðà‰s�Q‘S‹yÙ˜a›�|Ð#Ù˜!“K�<Ðr+   c                 ó\   • U R                   nU(       + U l         U R                  * nXl         U$ )z&Return the position of the right end. )r½  r;   )r¿  ÚwasÚrvs      r)   rW   ÚRealInterval.bù  s+   € ð �h‰hˆØ”7ˆŒØ�f‰fˆWˆØŒØˆ	r+   c                 ó4   • U R                   U R                  -
  $ )z-Return width of the real isolating interval. ©rW   r;   rÄ  s    r)   ÚdxÚRealInterval.dx  s   € ð �v‰v˜Ÿ™‰Ðr+   c                 ó:   • U R                   U R                  -   S-  $ )z2Return the center of the real isolating interval. r-   ©r;   rW   rÄ  s    r)   ÚcenterÚRealInterval.center  s   € ð —‘˜Ÿ™‘ Ñ"Ð"r+   c                 ój   • [        U R                  R                  U R                  R                  5      $ ©z=Return the largest denominator occurring in either endpoint. )r6   r;   ÚdenominatorrW   rÄ  s    r)   Ú	max_denomÚRealInterval.max_denom  s%   € ô �4—6‘6×%Ñ% t§v¡v×'9Ñ'9Ó:Ð:r+   c                 ó2   • U R                   U R                  4$ )z8Return tuple representation of real isolating interval. rß  rÄ  s    r)   r©  ÚRealInterval.as_tuple  s   € à—‘˜Ÿ™ÐÐr+   c                 ó@   • SU R                   < SU R                  < S3$ )NÚ(r€   r‡   rß  rÄ  s    r)   Ú__repr__ÚRealInterval.__repr__  s   � Ø!ŸVœV T§V¤VÐ,Ð,r+   c                 ó¦   • [        U[        5      (       a  Uu  p#OUSp2US:H  =(       a)    U R                  Us=:*  =(       a    U R                  :*  $ s  $ )zØ
Say whether a complex number belongs to this real interval.

Parameters
==========

item : pair (re, im) or number re
    Either a pair giving the real and imaginary parts of the number,
    or else a real number.

r   )Ú
isinstancer¾   r;   rW   ©r¿  Úitemrö   r÷   s       r)   Ú__contains__ÚRealInterval.__contains__  sK   € ô �dœE×"Ñ"Ø‰FˆB�à˜1�Ø�Q‰w×1˜4Ÿ6™6 R×1Ó1¨4¯6©6Ñ1Ð1Ñ1Ð1r+   c                 ó„  • [        U[        5      (       a9  U R                  UR                  :  =(       d    UR                  U R                  :  $ [        U[        5      (       d   eU R                  UR
                  :  =(       d<    UR                  U R                  :  =(       d    UR                  UR                  -  S:„  $ )ú9Return ``True`` if two isolation intervals are disjoint. r   )	rî  r±   rW   r;   r§  r¢  Úbxr£  ÚbyrÏ  s     r)   Úis_disjointÚRealInterval.is_disjoint*  sŠ   € ä�eœ\×*Ñ*Ø—F‘F˜UŸW™WÑ$×8¨¯©°$·&±&Ñ(8Ð9Ü˜%¤×1Ñ1Ð1Ð1Ø—‘˜Ÿ™Ñ!÷ % U§X¡X°·±Ñ%6÷ %Ø�x‰x˜Ÿ™Ñ  1Ñ$ð	&r+   c                 óÀ   • U R                   c  U $ [        U R                  U R                   U R                  SSS9u  p[	        X R
                  4-   XR                  5      $ )z2Internal one step real root refinement procedure. r    T)rx   rz   )rz   r~   r%   r¾  r±   r½  )r¿  r%   rz   s      r)   Ú_inner_refineÚRealInterval._inner_refine2  sQ   € à�;‰;ÑØˆKä.Ø�F‰F�D—K‘K §¡°¸4ñA‰	ˆô ˜F§h¡h [Ñ0°!·X±XÓ>Ð>r+   c                 ó¦   • U nUR                  U5      (       d7  UR                  5       UR                  5       pUR                  U5      (       d  M7  X!4$ ©zDRefine an isolating interval until it is disjoint with another one. ©r÷  rú  ©r¿  rÐ  Úexprs      r)   Úrefine_disjointÚRealInterval.refine_disjoint<  óN   € àˆØ×"Ñ" 5×)Ñ)Ø×,Ñ,Ó.°×0CÑ0CÓ0E�%ð ×"Ñ" 5×)Ó)ð ˆ{Ðr+   c                 ón   • U nUR                   U:  d"  UR                  5       nUR                   U:  d  M"  U$ ©zERefine an isolating interval until it is of sufficiently small size. )rÜ  rú  )r¿  rÜ  r   s      r)   Úrefine_sizeÚRealInterval.refine_sizeD  s4   € àˆØ—7‘7˜R“<Ø×%Ñ%Ó'ˆDð —7‘7˜R•<ð ˆr+   c                 óN   • U n[        U5       H  nUR                  5       nM     U$ )z9Perform several steps of real root refinement algorithm. ©r2   rú  ©r¿  rx   r   rŠ   s       r)   Úrefine_stepÚRealInterval.refine_stepL  ó*   € àˆÜ�u–ˆAØ×%Ñ%Ó'ŠDñ ð ˆr+   c                 ó"   • U R                  5       $ )z4Perform one step of real root refinement algorithm. ©rú  rÄ  s    r)   ÚrefineÚRealInterval.refineT  ó   € à×!Ñ!Ó#Ð#r+   )r¾  r%   rz   r½  N©r    )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rÁ  ÚpropertyrÅ  rÉ  rÑ  r;   rW   rÜ  rà  rå  r©  rë  rñ  r÷  rú  r  r  r  r  Ú__static_attributes__rg   r+   r)   r±   r±   À  sÈ   † ÙIò"ð2 ñó ðð ñ1ó ð1ò'ð
 ñ ó ð ð ñó ðð ñó ðð ñ#ó ð#ð ñ;ó ð;ò ò-ò2ò$&ò?òòôõ$r+   r±   c                   ó  • \ rS rSrSrSS jr\S 5       r\S 5       rS r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       rS rS rS rS rS rS rS rSS jrSS jrS rSrg)r§  iY  aE  A fully qualified representation of a complex isolation interval.
The printed form is shown as (ax, bx) x (ay, by) where (ax, ay)
and (bx, by) are the coordinates of the southwest and northeast
corners of the interval's rectangle, respectively.

Examples
========

>>> from sympy import CRootOf, S
>>> from sympy.abc import x
>>> CRootOf.clear_cache()  # for doctest reproducibility
>>> root = CRootOf(x**10 - 2*x + 3, 9)
>>> i = root._get_interval(); i
(3/64, 3/32) x (9/8, 75/64)

The real part of the root lies within the range [0, 3/4] while
the imaginary part lies within the range [9/8, 3/2]:

>>> root.n(3)
0.0766 + 1.14*I

The width of the ranges in the x and y directions on the complex
plane are:

>>> i.dx, i.dy
(3/64, 3/64)

The center of the range is

>>> i.center
(9/128, 147/128)

The northeast coordinate of the rectangle bounding the root in the
complex plane is given by attribute b and the x and y components
are accessed by bx and by:

>>> i.b, i.bx, i.by
((3/32, 75/64), 3/32, 75/64)

The southwest coordinate is similarly given by i.a

>>> i.a, i.ax, i.ay
((3/64, 9/8), 3/64, 9/8)

Although the interval prints to show only the real and imaginary
range of the root, all the information of the underlying root
is contained as properties of the interval.

For example, an interval with a nonpositive imaginary range is
considered to be the conjugate. Since the y values of y are in the
range [0, 1/4] it is not the conjugate:

>>> i.conj
False

The conjugate's interval is

>>> ic = i.conjugate(); ic
(3/64, 3/32) x (-75/64, -9/8)

    NOTE: the values printed still represent the x and y range
    in which the root -- conjugate, in this case -- is located,
    but the underlying a and b values of a root and its conjugate
    are the same:

    >>> assert i.a == ic.a and i.b == ic.b

    What changes are the reported coordinates of the bounding rectangle:

    >>> (i.ax, i.ay), (i.bx, i.by)
    ((3/64, 9/8), (3/32, 75/64))
    >>> (ic.ax, ic.ay), (ic.bx, ic.by)
    ((3/64, -75/64), (3/32, -9/8))

The interval can be refined once:

>>> i  # for reference, this is the current interval
(3/64, 3/32) x (9/8, 75/64)

>>> i.refine()
(3/64, 3/32) x (9/8, 147/128)

Several refinement steps can be taken:

>>> i.refine_step(2)  # 2 steps
(9/128, 3/32) x (9/8, 147/128)

It is also possible to refine to a given tolerance:

>>> tol = min(i.dx, i.dy)/2
>>> i.refine_size(tol)
(9/128, 21/256) x (9/8, 291/256)

A disjoint interval is one whose bounding rectangle does not
overlap with another. An interval, necessarily, is not disjoint with
itself, but any interval is disjoint with a conjugate since the
conjugate rectangle will always be in the lower half of the complex
plane and the non-conjugate in the upper half:

>>> i.is_disjoint(i), i.is_disjoint(i.conjugate())
(False, True)

The following interval j is not disjoint from i:

>>> close = CRootOf(x**10 - 2*x + 300/S(101), 9)
>>> j = close._get_interval(); j
(75/1616, 75/808) x (225/202, 1875/1616)
>>> i.is_disjoint(j)
False

The two can be made disjoint, however:

>>> newi, newj = i.refine_disjoint(j)
>>> newi
(39/512, 159/2048) x (2325/2048, 4653/4096)
>>> newj
(3975/51712, 2025/25856) x (29325/25856, 117375/103424)

Even though the real ranges overlap, the imaginary do not, so
the roots have been resolved as distinct. Intervals are disjoint
when either the real or imaginary component of the intervals is
distinct. In the case above, the real components have not been
resolved (so we do not know, yet, which root has the smaller real
part) but the imaginary part of ``close`` is larger than ``root``:

>>> close.n(3)
0.0771 + 1.13*I
>>> root.n(3)
0.0766 + 1.14*I
c                 óŒ   • XsU l         U l        X4sU l        U l        XusU l        U l        X†sU l        U l        X�l        X l	        g)z;Initialize new complex interval with complete information. N)
r;   rW   ra   rû   r�   rL  r˜   rM  r¾  Úconj)r¿  r;   rW   ra   rû   rL  rM  r�   r˜   r¾  r  s              r)   rÁ  ÚComplexInterval.__init__Ý  sD   € ð ˆˆŒ�”ØˆˆŒ�”àÐˆŒ�”ØÐˆŒ�”àŒØ�	r+   c                 ó   • [         $ rE   )r§  rÄ  s    r)   rÅ  ÚComplexInterval.funcí  s   € äÐr+   c           
      óæ   • U nUR                   UR                  UR                  UR                  UR                  UR
                  UR                  UR                  UR                  UR                  4
$ rE   )
r;   rW   ra   rû   rL  rM  r�   r˜   r¾  r  rÈ  s     r)   rÉ  ÚComplexInterval.argsñ  sJ   € àˆØ—‘�Q—S‘S˜!Ÿ#™#˜qŸs™s A§D¡D¨!¯$©$°·±°a·d±d¸A¿E¹EÀ1Ç6Á6ÐJÐJr+   c                 ód   • [        U5      [        U 5      La  gU R                  UR                  :H  $ rÌ  rÍ  rÏ  s     r)   rÑ  ÚComplexInterval.__eq__ö  rÓ  r+   c                 ó    • U R                   S   $ )z1Return ``x`` coordinate of south-western corner. r   )r;   rÄ  s    r)   r¢  ÚComplexInterval.axû  ó   € ð �v‰v�a‰yÐr+   c                 ób   • U R                   (       d  U R                  S   $ U R                  S   * $ )z1Return ``y`` coordinate of south-western corner. r    )r  r;   rW   rÄ  s    r)   r£  ÚComplexInterval.ay   ó)   € ð �y�yØ—6‘6˜!‘9Ðà—F‘F˜1‘I�:Ðr+   c                 ó    • U R                   S   $ )z1Return ``x`` coordinate of north-eastern corner. r   )rW   rÄ  s    r)   rõ  ÚComplexInterval.bx  r'  r+   c                 ób   • U R                   (       d  U R                  S   $ U R                  S   * $ )z1Return ``y`` coordinate of north-eastern corner. r    )r  rW   r;   rÄ  s    r)   rö  ÚComplexInterval.by  r*  r+   c                 ó@   • U R                   S   U R                  S   -
  $ )z0Return width of the complex isolating interval. r   rÛ  rÄ  s    r)   rÜ  ÚComplexInterval.dx  ó   € ð �v‰v�a‰y˜4Ÿ6™6 !™9Ñ$Ð$r+   c                 ó@   • U R                   S   U R                  S   -
  $ )z1Return height of the complex isolating interval. r    rÛ  rÄ  s    r)   ÚdyÚComplexInterval.dy  r1  r+   c                 ór   • U R                   U R                  -   S-  U R                  U R                  -   S-  4$ )z5Return the center of the complex isolating interval. r-   ©r¢  rõ  r£  rö  rÄ  s    r)   rà  ÚComplexInterval.center  s3   € ð —‘˜4Ÿ7™7Ñ" AÑ%¨¯©°$·'±'Ñ(9¸1Ñ'<Ð=Ð=r+   c                 ó¾   • [        U R                  R                  U R                  R                  U R                  R                  U R
                  R                  5      $ rã  )r6   r¢  rä  rõ  r£  rö  rÄ  s    r)   rå  ÚComplexInterval.max_denom$  sB   € ô �4—7‘7×&Ñ&¨¯©×(;Ñ(;Ø—7‘7×&Ñ&¨¯©×(;Ñ(;ó=ð 	=r+   c                 ób   • U R                   U R                  4U R                  U R                  44$ )zaReturn tuple representation of the complex isolating
interval's SW and NE corners, respectively. )r¢  r£  rõ  rö  rÄ  s    r)   r©  ÚComplexInterval.as_tuple*  s)   € ð —‘˜$Ÿ'™'Ð" T§W¡W¨d¯g©gÐ$6Ð7Ð7r+   c           	      óx   • SU R                   < SU R                  < SU R                  < SU R                  < S3	$ )Nrê  r€   z) x (r‡   r6  rÄ  s    r)   rë  ÚComplexInterval.__repr__/  s!   � Ø(,¯¬°·´¸$¿'¼'À4Ç7Ä7ÐKÐKr+   c                 óÚ   • [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  SS9
$ )z=This complex interval really is located in lower half-plane. T)r  )
r§  r;   rW   ra   rû   rL  rM  r�   r˜   r¾  rÄ  s    r)   r¨  ÚComplexInterval.conjugate2  sJ   € ä˜tŸv™v t§v¡v¨t¯v©v°t·v±vØ�G‰G�T—W‘W˜dŸg™g t§w¡w°·±¸tñEð 	Er+   c                 óî   • [        U[        5      (       a  Uu  p#OUSp2U R                  Us=:*  =(       a    U R                  :*  Os  =(       a)    U R                  Us=:*  =(       a    U R
                  :*  $ s  $ )zå
Say whether a complex number belongs to this complex rectangular
region.

Parameters
==========

item : pair (re, im) or number re
    Either a pair giving the real and imaginary parts of the number,
    or else a real number.

r   )rî  r¾   r¢  rõ  r£  rö  rï  s       r)   rñ  ÚComplexInterval.__contains__7  s\   € ô �dœE×"Ñ"Ø‰FˆB�à˜1�Ø�w‰w˜"×'Ó' §¡Ô'×D¨D¯G©G°r×,DÓ,D¸T¿W¹WÑ,DÐDÑ,DÐDr+   c                 ó|  • [        U[        5      (       a  UR                  U 5      $ U R                  UR                  :w  a  gU R                  UR
                  :  =(       d    UR                  U R
                  :  nU(       a  gU R                  UR                  :  =(       d    UR                  U R                  :  nU$ )rô  T)rî  r±   r÷  r  rõ  r¢  rö  r£  )r¿  rÐ  Úre_distinctÚim_distincts       r)   r÷  ÚComplexInterval.is_disjointJ  s‡   € ä�eœ\×*Ñ*Ø×$Ñ$ TÓ*Ð*Ø�9‰9˜Ÿ
™
Ó"ØØ—w‘w §¡Ñ)×?¨U¯X©X¸¿¹Ñ-?ˆÞØØ—w‘w §¡Ñ)×?¨U¯X©X¸¿¹Ñ-?ˆØÐr+   c                 óÞ  • U R                   U R                  su  pu  p4U R                  U R                  peU R                  U R
                  p‡U R                  U R                  p©U R                  nX1-
  XB-
  :”  a.  [        SX4X44XVXŠXyU5
      u  pÍUS   S:X  a  Uu  pïnpVpŠO6Uu  pïnpVpŠO.[        SX4X44XVXŠXyU5
      u  nnUS   S:X  a  Uu  pïnpVpŠOUu  pïnpVpŠ[        UUXVXŠXyX°R                  5
      $ )z5Internal one step complex root refinement procedure. r    r   )r;   rW   ra   rû   r�   rL  r˜   rM  r¾  rq  r•  r§  r  )r¿  r|   r}   r(   r9   ra   rû   r�   rL  r˜   rM  r¾  ro  rp  rŠ   r;   rW   r“  r”  s                      r)   rú  ÚComplexInterval._inner_refineV  s  € àŸ™ §¡ˆ‰ˆ‘�à�v‰v�t—v‘vˆ1à—‘˜$Ÿ'™'ˆBØ—‘˜$Ÿ'™'ˆBà�h‰hˆà‰5�1‘5‹=Ü*¨1¨q¨f°q°f¸aÀBÈBÐTWÓX‰HˆCà�1‰v˜‹{Ø(+Ñ%��a˜˜r 2à(+Ñ%��a˜˜r 2ä,¨Q°°¸¸ÀÀbÈbÐVYÓZ‰HˆC�à�1‰v˜‹{Ø(+Ñ%��a˜˜r 2à(+Ñ%��a˜˜rä˜q ! Q¨2°2¸3Ç	Á	ÓJÐJr+   c                 ó¦   • U nUR                  U5      (       d7  UR                  5       UR                  5       pUR                  U5      (       d  M7  X!4$ rý  rþ  rÿ  s      r)   r  ÚComplexInterval.refine_disjointr  r  r+   Nc                 ó¼   • Uc  UnU nUR                   U:  a  UR                  U:  d4  UR                  5       nUR                   U:  d  M"  UR                  U:  d  M4  U$ r  )rÜ  r3  rú  )r¿  rÜ  r3  r   s       r)   r  ÚComplexInterval.refine_sizez  sR   € à‰:ØˆBØˆØ—7‘7˜R“< D§G¡G¨b£LØ×%Ñ%Ó'ˆDð —7‘7˜R•< D§G¡G¨b¥Lð ˆr+   c                 óN   • U n[        U5       H  nUR                  5       nM     U$ )z<Perform several steps of complex root refinement algorithm. r	  r
  s       r)   r  ÚComplexInterval.refine_step„  r  r+   c                 ó"   • U R                  5       $ )z7Perform one step of complex root refinement algorithm. r  rÄ  s    r)   r  ÚComplexInterval.refineŒ  r  r+   )
rL  rM  ra   rû   r;   rW   r  r¾  r�   r˜   ©FrE   r  )r  r  r  r  r  rÁ  r  rÅ  rÉ  rÑ  r¢  r£  rõ  rö  rÜ  r3  rà  rå  r©  rë  r¨  rñ  r÷  rú  r  r  r  r  r  rg   r+   r)   r§  r§  Y  s  † ñAôFð  ñó ðð ñKó ðKò'ð
 ñó ðð ñó ðð ñó ðð ñó ðð ñ%ó ð%ð ñ%ó ð%ð ñ>ó ð>ð ñ=ó ð=ò
8ò
LòEò
Eò&
òKò8ôôõ$r+   r§  rP  )NNNFF)NNNFrÌ  )FF)NNNFFFr—  rE   )NNN)Vr  Úsympy.polys.densearithr   r   r   r   Úsympy.polys.densebasicr   r   r	   r
   r   r   r   Úsympy.polys.densetoolsr   r   r   r   r   r   r   r   r   r   Úsympy.polys.euclidtoolsr   Úsympy.polys.factortoolsr   Úsympy.polys.polyerrorsr   r   r   Úsympy.polys.sqfreetoolsr   r   r*   r?   rB   rT   rX   r]   re   ri   rt   r~   r‚   rŒ   r™   r�   r¥   r§   r«   r¶   rº   rÇ   rÎ   r¸   r×   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   r  r
  r!  rø   r   r  r  r%  rG  rq  r•  r›  r�  r´  r¶  rº  r±   r§  rg   r+   r)   Ú<module>rX     sM  ðÙ A÷ó ÷÷ ñ ÷
÷ ÷ õõ÷ñ ÷ ò$òL*.òXò"3ò@	ò9ò:ò	ô,ô\(ôT
nô!ôFpòdAô(ô,ô0ô$ BôD'*ôR8*ôt.ô,;ôzð8 
€à	€Ø	€Ø	€Ø	€à	€Ø	€Ø	€Ø	€ð*àˆ€Hˆað*ð ˆ€Hˆað*ð ˆ€Hˆað	*ð
 ˆ€Hˆað*ð ˆ€Hˆað*ð ˆ€Hˆað*ð ˆ€Hˆað*ð ˆ€Hˆað*ð ˆ€Hˆað*ð ˆ€Hˆað*ð  ˆ€Hˆað!*ð" ˆ€Hˆað#*ð( ˆ€Hˆað)*ð* ˆ€Hˆað+*ð, ˆ€Hˆað-*ð. ˆ€Hˆað/*ð4 ˆ€Hˆað5*ð6 ˆ€HˆaØˆ€HˆaØˆ€Hˆað ˆ€HˆbØˆ€HˆbØˆ€HˆbØˆ€Hˆbð ˆ€HˆbØˆ€HˆbØˆ€HˆbØˆ€HˆbñS*€ðXHàˆˆR€L�"ðHð ˆˆR€L�"ðHð ˆˆR€L�"ð	Hð
 ˆˆR€L�"ðHð ˆˆR€L�"ðHð ˆˆR€L�"ðHð ˆˆR€L�"ðHð ˆˆR€L�"ðHð ˆˆR€L�"ðHð ˆˆR€L�"ðHð  ˆˆR€L�"ð!Hð" ˆˆR€L�"ð#Hð( ˆˆR€L�"ð)Hð* ˆˆR€L�"ð+Hð, ˆˆR€L�"ð-Hð. ˆˆR€L�"ð/Hð4 ˆ€Hˆañ5Hð6 ˆ€Hˆað7Hð8 ˆ€Hˆað9Hð: ˆ€Hˆað;Hð> ˆˆR€L�!ð?Hð@ ˆˆR€L�!ðAHðB ˆˆR€L�!ðCHðD ˆˆR€L�!ðEHðJ ˆ€HˆaðKHðL ˆ€HˆaðMHðN ˆ€HˆaðOHðP ˆ€HˆaðQHðT ˆˆR€L�!ðUHðV ˆˆR€L�!ðWHðX ˆˆR€L�!ðYHðZ ˆˆR€L�!ð[Hð` ˆ€HˆaðaHðb ˆ€HˆaòcHðd ˆ€HˆaðeHðf ˆ€HˆaðgHðj ˆˆR€L�!ðkHðl ˆˆR€L�!ðmHðn ˆˆR€L�!ðoHðp ˆˆR€L�!ðqHðv ˆ€HˆbðwHðx ˆ€HˆbðyHðz ˆ€Hˆbð{Hð| ˆ€Hˆbð}Hð@ ˆˆR€L�"ðAHðB ˆˆR€L�"ðCHðD ˆˆR€L�"ðEHðF ˆˆR€L�"ðGHðL ˆ€HˆbðMHðN ˆ€HˆbðOHðP ˆ€HˆbòQHðR ˆ€HˆbðSHðV ˆˆR€L�"ðWHðX ˆˆR€L�"ðYHðZ ˆˆR€L�"ð[Hð\ ˆˆR€L�"ð]Hðb ˆ€HˆbðcHðd ˆ€HˆbðeHðf ˆ€HˆbðgHðh ˆ€HˆbðiHðl ˆˆR€L�"ðmHðn ˆˆR€L�"ðoHðp ˆˆR€L�"ðqHðr ˆˆR€L�"ðsHðx ˆ€HˆbðyHðz ˆ€Hˆbð{Hð| ˆ€Hˆbð}Hð~ ˆ€HˆbòHðB ˆˆR€L�"ðCHðD ˆˆR€L�"ðEHðF ˆˆR€L�"ðGHðH ˆˆR€L�"ðIHðN ˆ€HˆbðOHðP ˆ€HˆbðQHðR ˆ€HˆbðSHðT ˆ€HˆbðUHðX ˆˆR€L�"ðYHðZ ˆˆR€L�"ð[Hð\ ˆˆR€L�"ð]Hð^ ˆˆR€L�"ð_Hðd ˆˆR€L�"ðeHðf ˆˆR€L�"ðgHðh ˆˆR€L�"ðiHðj ˆˆR€L�"ðkHðp ˆˆR€L�"ñqHðr ˆˆR€L�"ØˆˆR€L�"ØˆˆR€L�"ð ˆˆR€L�"ØˆˆR€L�"ØˆˆR€L�"ØˆˆR€L�"ð ˆˆR€L�"ØˆˆR€L�"ØˆˆR€L�"ØˆˆR€L�"ñOHÐ ðTØˆ€yðàˆ€yðð ˆ€yðð ˆ€yð	ð
 ˆ€yðð ˆ�'Ððð ˆ�'Ððð ˆ�'Ððð ˆ�'Ððð ˆˆ	ðð ˆˆ	ðð ˆ�Ððð ˆ�Ððð ˆ�Ððð ˆ�'Ððð  ˆ�'Ðð!ð" ˆ�'Ðð#ð$ 
�'ÐØ	�'ÐØ	�'ÐØ	�'ÐØ	�'ÐØ	�'Ðò/€ò4ò TôlJòXRòDôH!òThòThòT
òô{/ôz[ôY÷(V$ñ V$÷ru$ò u$r+   