Ë
    7^(hUû  ã                   ó  — d Z ddlmZmZmZmZ ddlmZmZm	Z	m
Z
mZmZmZ ddlmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZm Z  ddl!m"Z"m#Z# d	„ Z$d
„ Z%d„ Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+dbd„Z,dcd„Z-ddd„Z.ddd„Z/ded„Z0d„ Z1dcd„Z2dcd„Z3dfd„Z4dcd„Z5dcd„Z6dgd„Z7dbd„Z8dgd„Z9dhd „Z:d!Z;d"Z<d#Z=d$Z>d%Z?d&Z@d'ZAd(ZBd)ZCi e<e<fd“e=e=fd“e>e>fd“e?e?fd“e@e<fd*“eAe=fd*“eBe>fd*“eCe?fd*“e@e?fd+“eAe<fd+“eBe=fd+“eCe>fd+“e<eAfd,“e=eBfd,“e>eCfd,“e?e@fd,“e<e@fd-“e=eAfd-e>eBfd-e?eCfd-e<e=fd.e=e>fd.e>e?fd.e?e<fd.e<e?fd/e=e<fd/e>e=fd/e?e>fd/i¥ZDi e@e;e<fd0“eAe;e=fd0“eBe;e>fd0“eCe;e?fd0“e@e;e?fd1“eAe;e<fd1“eBe;e=fd1“eCe;e>fd1“e<e;eAfd2“e=e;eBfd2“e>e;eCfd2“e?e;e@fd2“e<e;e@fd3“e=e;eAfd3“e>e;eBfd3“e?e;eCfd3“e@eBfd4“i eAeCfd4“eBe@fd4“eCeAfd4“e@e;eBfd4“eAe;eCfd4“eBe;e@fd4“eCe;eAfd4“e<e>fd5“e=e?fd5“e>e<fd5“e?e=fd5“e<e;e>fd5“e=e;e?fd5“e>e;e<fd5“e?e;e=fd5“e@eAfd6“eAeBfd6“¥i eBeCfd6“eCe@fd6“e@e;eAfd6“eAe;eBfd6“eBe;eCfd6“eCe;e@fd6“e@eCfd7“eAe@fd7“eBeAfd7“eCeBfd7“e@e;eCfd7“eAe;e@fd7“eBe;eAfd7“eCe;eBfd7“e<eBfd8“e=eCfd8“e>e@fd8“¥i e?eAfd8“e<e;eBfd8“e=e;eCfd8“e>e;e@fd8“e?e;eAfd8“e<eCfd9“e=e@fd9“e>eAfd9“e?eBfd9“e<e;eCfd9“e=e;e@fd9“e>e;eAfd9“e?e;eBfd9“e@e>fd:“eAe?fd:“eBe<fd:“eCe=fd:“¥i e@e;e>fd:“eAe;e?fd:“eBe;e<fd:“eCe;e=fd:“e@e=fd;“eAe>fd;“eBe?fd;“eCe<fd;“e@e;e=fd;“eAe;e>fd;“eBe;e?fd;“eCe;e<fd;“e<e;e=fd<“e=e;e>fd<“e>e;e?fd<“e?e;e<fd<“e<e;e?fd=“¥e=e;e<fd=e>e;e=fd=e?e;e>fd=e@e;e@fd>eAe;eAfd>eBe;eBfd>eCe;eCfd>e<e;e<fd?e=e;e=fd?e>e;e>fd?e?e;e?fd?i¥ZEi dd@g“d*dAg“d+dBg“d,dAg“d-dBg“d0dCdAg“d1dDdBg“d2dCdAg“d3dDdBg“d.dEg“d/dFg“d4dGdHg“d5dGdHg“d6dEdIg“d7dJdFg“d8dKdLg“d9dMdNg“dMdNgdKdLgdEdIgdJdFgdOd@gdOd@gdPœ¥ZFdQ„ ZGdR„ ZHdidS„ZIdT„ ZJdU„ ZKdjdV„ZLdW„ ZMdX„ ZNdY„ ZOdZ„ ZPddd[„ZQdcd\„ZRddd]„ZS G d^„ d_«      ZT G d`„ da«      ZUy)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                 óè   — |j                   st        d|z  «      ‚t        | |«      } | t        | d|«      g}|d   r4t	        |d   |d   |«      }|j                  t        ||«      «       |d   rŒ4|dd 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       úW/var/www/skyplay_api_hub/venv/lib/python3.12/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                 ó\  — t        | «      g }}||j                  gz  }t        | |«      dk  rt        | |«      } t	        t        | «      «      } t        d|«      D ]ª  }| |   dk\  rŒ|j                  | |    d«      g }}t        |dz   |«      D ]B  }| |   dk  rŒ||   |z   |j                  | |   d«      z
  }	|j                  |	||z
  z  |g«       ŒD |sŒ{t        |«      }	||	d      dz   ||	d   <   |j                  |	d   «       Œ¬ |sy |j                  «       d«      t        |«      dz   z  S )a�  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   sD  € ô ˆq‹6�2€q€AØ	ˆQ�U‰UˆG‰€AÜˆa�ƒ|�aÒÜ�A�q‹MˆÜŒX�a‹[Ó€Aä�1�a‹[ò ˆØˆQ‰4�1Š9Øà—‘�q˜‘t�e˜Q“ ˆ2ˆä�q˜1‘u˜a“ò 	)ˆAà�‰t�qŠyØà�!‘�q‘˜1Ÿ5™5  1¡ q›>Ñ)ˆAØ�I‰I�q˜Q ™U‘| QÐ'Õ(ð	)ñ Øä�‹Gˆà�A�a‘D‘'˜A‘+ˆˆ!ˆA‰$‰à	�‰��1‘�ð+ñ. Øàˆq�{‰{‹}˜QÓ¤# a£&¨1¡*Ñ-Ð-r+   c                 ó<   — t        t        | «      |«      }|�d|z  S y)a–  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                 óø  ‡— t        | «      }|dk  rt        d«      ‚|j                  r |j                  «       }t	        | ||«      |}} n7|j
                  r|j                  s|j                  rt        d|z  «      ‚| dd } |j                  | d   «      r%| j                  «        |j                  | d   «      rŒ%t        | «      dk(  r|j                  S | d   Š|j                  t        ˆfd„| dd D «       «      z   S )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   ó:   •K  — | ]  }t        |‰z  «      –— Œ y ­w©N)Úabs)Ú.0r7   Úlcs     €r)   ú	<genexpr>z)dup_cauchy_upper_bound.<locals>.<genexpr>¡   s   øè ø€ Ò2 q”s˜1˜r™6—{Ñ2ùs   ƒ)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_boundrR   ƒ   sÜ   ø€ ô 	�1‹€AØˆ1‚uÜÐ8Ó9Ð9à‡w‚wØ�K‰K‹MˆÜ˜1˜a Ó# 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                 ó¸   — t        | «      }t        |«      dk  rt        d«      ‚|j                  r|j	                  «       }t        ||«      }|j                  |z  S )zhCompute 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   rJ   r5   rR   r/   )r%   r&   ÚgÚbs       r)   Údup_cauchy_lower_boundrV   £   sP   € ô 	�A‹€AÜ
ˆ1ƒv�‚zÜÐAÓBÐBØ‡w‚wØ�K‰K‹MˆÜ˜q !Ó$€AØ�5‰5�1‰9Ðr+   c                 óˆ  — t        | «      }|dk  rt        d«      ‚|j                  r |j                  «       }t	        | ||«      |}} n2|j
                  r|j                  s|j                  rt        d|z  «      ‚t        | |«      }t        | |«      } |d«      |j                  |«      z   ||«      |dz   z  ||dz
  z  z  z  S )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   rJ   r5   r   rK   rL   rM   r   r   r   rF   )r%   r&   r7   rQ   ÚDÚl2sqs         r)   Údup_mignotte_sep_bound_squaredr[   ®   s¶   € ô 	�1‹€AØˆ1‚uÜÐQÓRÐRà‡w‚wØ�K‰K‹MˆÜ˜1˜a Ó# Qˆ1‰Ø�WŠW˜Ÿš 1§7¢7ô Ð@À1ÑDÓEÐEä˜˜AÓ€AÜ˜q !Ó$€DÙˆQ‹4�—‘�a“‰=™Q˜q›T A a¡C™[¨4°!°A±#©;Ñ6Ñ8Ð8r+   c                 ó    — | \  }}|j                  |«      |j                  |«      }}|j                  |«      |j                  |«      }}||||fS )z0Convert an open interval to a Mobius transform. )ÚnumerÚdenom)ÚIÚfieldr(   r9   r;   ÚcrU   Úds           r)   Ú_mobius_from_intervalrc   Ë   sK   € à�D€A€qà�;‰;�q‹>˜5Ÿ;™; q›>€q€AØ�;‰;�q‹>˜5Ÿ;™; q›>€q€Aàˆa��Aˆ:Ðr+   c                 óN   — | \  }}}} |||«       |||«      }}||k  r||fS ||fS )z0Convert a Mobius transform to an open interval. © )ÚMr`   r;   rU   ra   rb   r(   r9   s           r)   Ú_mobius_to_intervalrg   Ô   s=   € à�J€A€qˆ!ˆQá��A‹;™˜a ›€q€AàˆA‚vØ�1ˆvˆà�1ˆvˆr+   c                 óü  — |\  }}}}||k(  r||k(  r| ||||ffS t        | |«      }|� |t        |«      «      }n|j                  }|r(|dkD  r#t        | ||«      } ||z  ||z  |j                  }}}||j                  k\  r<t        | ||«      } ||z  |z   ||z  |z   }}t        | |j                  |«      s| ||||ffS t        | |j                  |«      | }	} |||z   |||z   f\  }
}}}t        | |j                  |«      s| ||||ffS t        | |«      }|dk(  r|
|||f\  }}}}nUt        t        |	«      |j                  |«      } t        | |j                  |«      st        | d|«      } |||z   |||z   f\  }}}}| ||||ffS )z5One step of positive real root refinement algorithm. é   r    )
rB   ÚintrP   r   r/   r   r   r   r   r   )r%   rf   r&   Úfastr;   rU   ra   rb   ÚArT   Úa1Úb1Úc1Úd1Úks                  r)   Údup_step_refine_real_rootrr   ß   s½  € à�J€A€qˆ!ˆQàˆA‚v�!�q’&Ø�1�a˜˜A�,ˆÐä˜Q Ó"€Aà€}ÙŒc�!‹f‹I‰à�F‰Fˆá��B’Ü�a˜˜AÓˆØ�A‘#�q˜‘s˜AŸE™Eˆaˆ1ˆàˆA�E‰E‚zÜ�a˜˜AÓˆØ�‰s�Q‰w˜˜!™˜a™ˆ1ˆä˜˜1Ÿ6™6 1Ô%Ø�q˜!˜Q �l�?Ð"ä�Q˜Ÿ™˜qÓ! 1€q€Aà˜˜A™˜q ! a¡%Ð'�N€BˆˆB�ä�A�q—v‘v˜qÔ!Ø�2�r˜2˜rÐ"Ð"Ð"ä˜A˜qÓ!€AàˆA‚vØ˜˜R �^‰
ˆˆ1ˆa‘ä”k !“n a§e¡e¨QÓ/ˆä˜˜1Ÿ6™6 1Ô%Ü˜1˜a Ó#ˆAà˜˜A™˜q ! a¡%Ð'‰
ˆˆ1ˆa�àˆq�!�Q˜ˆlˆ?Ðr+   Nc                 ó  — |j                  «       }t        |«      dk(  rt        ||«      \  }	}
}}n|\  }	}
}}|st        | |	|
||f||¬«      \  } \  }	}
}}|sŒ|�P|�Nt	        d|«      D ]>  }t         ||	|«       ||
|«      z
  «      |k\  rt        | |	|
||f||¬«      \  } \  }	}
}}Œ> nŒ nŠ|�Zt         ||	|«       ||
|«      z
  «      |k\  r;t        | |	|
||f||¬«      \  } \  }	}
}}t         ||	|«       ||
|«      z
  «      |k\  rŒ;|�,t	        d|«      D ]  }t        | |	|
||f||¬«      \  } \  }	}
}}Œ |�;	 t        |	|
||f|«      \  }}||k  s||k  rnt        | |	|
||f||¬«      \  } \  }	}
}}Œ:|st        |	|
||f|«      S | |	|
||ffS )zGRefine a positive root of `f` given a Mobius transform or an interval. r-   ©rk   r   )r5   r.   rc   rr   r2   rF   rg   )r%   rf   r&   ÚepsÚstepsÚdisjointrk   ÚmobiusÚFr;   rU   ra   rb   r:   ÚuÚvs                   r)   Údup_inner_refine_real_rootr|     s
  € à	�‰‹€Aä
ˆ1ƒv�‚{Ü*¨1¨aÓ0‰
ˆˆ1ˆa‘à‰
ˆˆ1ˆa�áÜ3°A¸¸1¸aØð8Ø˜ô‰ˆ‰<ˆAˆq�!�Qò ð €˜5Ð,Ü�q˜%“ò 	ˆAÜ‘1�Q˜“7™Q˜q !›WÑ$Ó%¨Ò,Ü";¸AÀÀ1ÀaÈ¸|ÈQÐUYÔ"Z‘�‘<�A�q˜!™Qáñ		ð ˆ?Ü‘a˜˜1“g¡ ! Q£Ñ'Ó(¨CÒ/Ü";¸AÀÀ1ÀaÈ¸|ÈQÐUYÔ"Z‘�‘<�A�q˜!˜Qô ‘a˜˜1“g¡ ! Q£Ñ'Ó(¨CÓ/ð ÐÜ˜1˜e“_ò [�Ü";¸AÀÀ1ÀaÈ¸|ÈQÐUYÔ"Z‘�‘<�A�q˜!™Qð[ð ÐØÜ&¨¨1¨a° |°QÓ7‰DˆAˆqà�HŠ} ¨A¢Øä";¸AÀÀ1ÀaÈ¸|ÈQÐUYÔ"Z‘�‘<�A�q˜!˜Qð ñ Ü" A q¨!¨Q <°Ó3Ð3à�1�a˜˜A�,ˆÐr+   c           	      óú   — t        ||f|j                  «       «      \  }}	}
}t        | t        ||	g«      t        |
|g«      |«      } t	        | |«      dk7  rt        d|›d|›d�«      ‚t        | ||	|
|f|||||¬«      S )z:Refine a positive root of `f` given an interval `(s, t)`. r    z%there should be exactly one root in (ú, z
) interval©ru   rv   rw   rk   )rc   r5   r   r
   r   r   r|   )r%   r(   r9   r&   ru   rv   rw   rk   r;   rU   ra   rb   s               r)   Údup_outer_refine_real_rootr€   7  s‰   € ä&¨¨1 v¨q¯{©{«}Ó=�J€A€qˆ!ˆQä�aœ A q 6Ó*Ü" A q 6Ó*¨Aó	/€Aô ˜1˜aÓ  AÒ%ÝÒZ[Ò]^Ð_Ó`Ð`ä% a¨!¨Q°°1¨°q¸cÈÐYaÐhlÔmÐmr+   c           
      ó†  — |j                   r#t        | |d¬«      |j                  «       c\  }} }n|j                  st	        d|z  «      ‚||k(  r||fS ||kD  r||}}d}	|dk  r/|dk  rt        | |«      | | df\  } }}}	nt        d|›d|›d�«      ‚|	r|�|dk  r| }nd	}t        | |||||||¬
«      \  }}|	r| | fS ||fS )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   )rK   r   Úget_ringrJ   r   r   Ú
ValueErrorr€   )
r%   r(   r9   r&   ru   rv   rw   rk   Ú_Únegatives
             r)   Údup_refine_real_rootrŠ   C  sú   € à‡w‚wÜ$ Q¨°4Ô8¸!¿*¹*»,ˆ	‰ˆˆA‘Ø�WŠWÜÐFÈÑJÓKÐKàˆA‚vØ�1ˆvˆàˆ1‚uØ�!ˆ1ˆà€Hàˆ1‚uØ�Š6Ü *¨1¨aÓ 0°1°"°q°b¸$Ð >ÑˆAˆq�!‘XåÊÊ1ÐMÓNÐNá�HÐ(Ø�aŠ<Ø �y‰HàˆHä%Ø	ˆ1ˆa�˜ 5°8À$ôH�D€A€qñ Ø��Q�Bˆxˆà�Aˆwˆr+   c           
      óä  — |j                   |j                  |j                  |j                   f\  }}}}t        | |«      }|dk(  rg S |dk(  rt        | ||||f|||d¬«      g}	|	S g ||||| |fg}
}	|
�rþ|
j	                  «       \  }}}}} }t        | |«      }|� |t        |«      «      }n|j                  }|r(|dkD  r#t        | ||«      } ||z  ||z  |j                   }}}||j                   k\  rŠt        | ||«      } ||z  |z   ||z  |z   }}t        | |«      s$|	j                  | ||||ff«       t        | d|«      } t        | |«      }|dk(  rŒÞ|dk(  r&|	j                  t        | ||||f|||d¬«      «       �Œ	t        | |j                   |«      }|||z   |||z   df\  }}}}}t        ||«      s&|	j                  |||||ff«       t        |d|«      d}}t        ||«      }||z
  |z
  }|||z   |||z   f\  }}}}|dkD  rFt        t        | «      |j                   |«      }t        ||«      st        |d|«      }t        ||«      }nd}||k  r!||||f\  }}}}||||f\  }}}}||||f\  }}}}|s�Œ|€9t        t        | «      |j                   |«      }t        ||«      st        |d|«      }|dk(  r%|	j                  t        |||||f|||d¬«      «       n|
j                  ||||||f«       |s�Œ�|€9t        t        | «      |j                   |«      }t        ||«      st        |d|«      }|dk(  r%|	j                  t        |||||f|||d¬«      «       n|
j                  ||||||f«       |
r�Œþ|	S )aN  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)ru   rk   rx   Nri   )r/   rP   r   r|   rO   rB   rj   r   r   r   r$   r   r   )r%   r&   ru   rk   r;   rU   ra   rb   rq   ÚrootsÚstackrl   Úf1rm   rn   ro   rp   ÚrÚk1Úk2Úa2Úb2Úc2Úd2Úf2s                            r)   Údup_inner_isolate_real_rootsr—   f  sø  € ð —‘˜Ÿ™ §¡¨¯©Ð-�J€A€qˆ!ˆQä˜A˜qÓ!€AàˆA‚vØˆ	ØˆA‚vÜ+Ø��1�a˜ˆ|˜Q C¨d¸4ôAð Bˆð| €Lðw ˜Q  1 a¨¨AÐ.Ð/ˆuˆâØ$Ÿy™y›{ÑˆAˆq�!�Q˜˜1ä$ Q¨Ó*ˆAàˆ}Ù”c˜!“f“I‘à—F‘F�á˜˜BšÜ˜a  AÓ&�Ø˜A™#˜q ™s A§E¡E�a�1�à�A—E‘EŠzÜ˜a  AÓ&�Ø˜‘s˜Q‘w  !¡ a¡�1�ä˜a ”|Ø—L‘L ! a¨¨A¨q \Ð!2Ô3Ü" 1 a¨Ó+�Aä'¨¨1Ó-�à˜’6ØØ˜’6Ø—L‘LÔ!;Ø˜A˜q ! Q˜<¨°¸$Àtô"Mô Náä˜1˜aŸe™e QÓ'ˆBà ! 1 q¡5¨!¨Q°©U°AÐ 5ÑˆB��B˜˜Aä˜"˜a”=Ø—‘˜b 2 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 ðr €Lr+   c                 óÆ   — |j                  «       }	 t        ||«      \  }	}
|r|
 |	 }
}	|�|	|k\  r|�|
|k  r
|s|	|
fS | |fS |�|	|kD  s|�|
|k  ryt        | |||¬«      \  } }ŒQ)z9Discard an isolating interval if outside ``(inf, sup)``. Nrt   )r5   rg   rr   )r%   rf   ÚinfÚsupr&   r‰   rk   rx   ry   rz   r{   s              r)   Ú_discard_if_outside_intervalr›   Ø  s‹   € à	�‰‹€Aà
Ü" 1 aÓ(‰ˆˆ1áØ�2˜�rˆqˆAàˆK˜1 š8¨#¨+¸¸cºÙØ˜!�t�à˜!�t�Øˆo ! c¢'¨s¨À1ÀsÂ7Øä,¨Q°°1¸4Ô@‰DˆAˆqð r+   c                 ó
  ‡— |�|dk  rg S t        | |||¬«      }|j                  «       g cŠ}|€|�2|D ]+  \  } }	t        | |	|||d||«      }
|
€Œ|j                  |
«       Œ- |S |s|j	                  ˆfd„|D «       «       |S |}|S )z@Iteratively compute disjoint positive root isolation intervals. r   ©ru   rk   Fc              3   ó<   •K  — | ]  \  }}t        |‰«      –— Œ y ­wrE   )rg   )rG   rˆ   rf   ry   s      €r)   rI   z3dup_inner_isolate_positive_roots.<locals>.<genexpr>ü  s   øè ø€ ÒC±T°Q¸Ô*¨1¨a×0ÑCùs   ƒ)r—   r5   r›   r$   Úextend)r%   r&   ru   r™   rš   rk   rx   rŒ   Úresultsrf   Úresultry   s              @r)   Ú dup_inner_isolate_positive_rootsr¢   ì  s¬   ø€ à
€˜3 š7Øˆ	ä(¨¨A°3¸TÔB€Eà—‘“ €J€A€wà
€˜#˜/Øò 	'‰DˆAˆqÜ1°!°Q¸¸SÀ!ÀUÈDÐRXÓYˆFàÑ!Ø—‘˜vÕ&ð		'ð €Nñ Ø�‰ÓC¸UÔCÔCð €Nð ˆà€Nr+   c                 óB  — |�|dk\  rg S t        t        | |«      |||¬«      }|j                  «       g }	}|€|�2|D ]+  \  } }
t        | |
|||d||«      }|€Œ|	j	                  |«       Œ- |	S |s0|D ])  \  } }
t        |
|«      \  }}|	j	                  | | f«       Œ+ |	S |}	|	S )z@Iteratively compute disjoint negative root isolation intervals. r   r�   T)r—   r   r5   r›   r$   rg   )r%   r&   r™   rš   ru   rk   rx   rŒ   ry   r    rf   r¡   rz   r{   s                 r)   Ú dup_inner_isolate_negative_rootsr¤     sÕ   € à
€˜3 !š8Øˆ	ä(¬°A°qÓ)9¸1À#ÈDÔQ€Eà—‘“ €w€Aà
€˜#˜/Øò 	'‰DˆAˆqÜ1°!°Q¸¸SÀ!ÀTÈ4ÐQWÓXˆFàÑ!Ø—‘˜vÕ&ð		'ð €Nñ Øò 	%‰DˆAˆqÜ& q¨!Ó,‰DˆAˆqØ�N‰N˜Q˜B  ˜8Õ$ð	%ð €Nð ˆà€Nr+   c                 óN  — t        | |«      \  }} |dkD  rŽ|j                  «       }|�|dk  rw|�d|k  rp|sS|s|j                  |j                  f|fg| fS |j                  |j                  f||j                  |j                  gfg| fS |j                  |j                  fg| fS g | fS )z?Handle special case of CF algorithm when ``f`` is homogeneous. r   )r   r5   rP   r/   )r%   r&   r™   rš   ÚbasisÚsqfr=   ry   s           r)   Ú_isolate_zeror¨     s±   € ä˜˜AÓ�D€A€qàˆ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°1·5±5¸!¿&¹&°/ÐBÐCÀQÐFÐFàŸ™ §¡Ð(Ð)¨1Ð,Ð,àˆqˆ5€Lr+   c           	      óš  — |j                   r#t        | |d¬«      |j                  «       c\  }} }n|j                  st	        d|z  «      ‚t        | «      dk  rg S t        | |||dd¬«      \  }} t        | |||||¬«      }	t        | |||||¬«      }
t        |	|z   |
z   «      }|s|S |D ��cg c]  \  }}t        ||f| |«      ‘Œ c}}S c c}}w )a•  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§   ©ru   r™   rš   rk   )rK   r   r†   rJ   r   r	   r¨   r¤   r¢   ÚsortedÚRealInterval)r%   r&   ru   r™   rš   rk   Úblackboxrˆ   ÚI_zeroÚI_negÚI_posrŒ   r;   rU   s                 r)   Údup_isolate_real_roots_sqfr³   ,  sÔ   € ð 	‡w‚wÜ$ Q¨°4Ô8¸!¿*¹*»,ˆ	‰ˆˆA‘Ø�WŠWÜÐIÈAÑMÓNÐNä�!ƒ}˜ÒØˆ	ä˜a  C¨°E¸tÔD�I€FˆAä,¨Q°°sÀÈÐSWÔX€EÜ,¨Q°°sÀÈÐSWÔX€Eä�5˜6‘> EÑ)Ó*€EáØˆà:?×A±°°A”˜q !˜f a¨Õ+ÓAÐAùÓAs   Â*Cc           	      ó.  — |j                   r#t        | |d¬«      |j                  «       c\  }} }n|j                  st	        d|z  «      ‚t        | «      dk  rg S t        | ||||d¬«      \  }} t        | |«      \  }}	t        |	«      dk(  rZ|	\  \  } }
t        | |||||¬«      }t        | |||||¬«      }|D ��cg c]  \  }}||f|
f‘Œ }}}|D ��cg c]  \  }}||f|
f‘Œ }}}nt        |	||||||¬	«      \  }}t        ||z   |z   «      S c c}}w c c}}w )
a‡  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¬   )ru   r™   rš   r¦   rk   )rK   r   r†   rJ   r   r	   r¨   r   r.   r¤   r¢   Ú_real_isolate_and_disjoinr­   )r%   r&   ru   r™   rš   r¦   rk   rˆ   r°   Úfactorsrq   r±   r²   rz   r{   s                  r)   Údup_isolate_real_rootsr·   N  s4  € ð 	‡w‚wÜ$ Q¨°4Ô8¸!¿*¹*»,ˆ	‰ˆˆA‘Ø�WŠWÜÐIÈAÑMÓNÐNä�!ƒ}˜ÒØˆ	ä˜a  C¨°E¸uÔE�I€FˆAä˜a Ó#�J€A€wä
ˆ7ƒ|�qÒØ‰	‰ˆ!ˆQä0°°A¸3ÀCÈSÐW[Ô\ˆÜ0°°A¸3ÀCÈSÐW[Ô\ˆà*/×1¡$ ! Q�A�q�6˜1’+Ð1ˆÑ1Ø*/×1¡$ ! Q�A�q�6˜1’+Ð1ˆÒ1ä0°¸!Ø˜ #¨U¸ô?‰ˆˆuô �%˜&‘. 5Ñ(Ó)Ð)ùó 2ùÛ1s   Â9DÃDc           
      óD  — |j                   r@|j                  «       || dd } }}t        | «      D ]  \  }	}
t        |
||d¬«      d   | |	<   Œ n|j                  st        d|z  «      ‚di }}|�|dk  r|�d|k  rdi }}t        | «      D ]V  \  }	}
t        |
|«      \  }}
|r
|dkD  r||	<   t        |
|«      d   D ]$  \  }}t        |«      }||vr|	|i||<   Œ|||   |	<   Œ& ŒX |j                  «       D ��cg c]  \  }}t        |«      |f‘Œ }}}t        ||||||||¬«      \  }}|j                  «       }|rsg }nP|s|j                  |j                  f|fg}n2|j                  |j                  f||j                  |j                  gfg}t        ||z   |z   «      S c c}}w )	aŽ  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   )ru   r™   rš   Ústrictr¦   rk   )rK   r†   Ú	enumerater   rJ   r   r   r   ÚtupleÚitemsr0   rµ   r5   rP   r/   r­   )Úpolysr&   ru   r™   rš   r¹   r¦   rk   ry   r:   ÚpÚzerosÚfactors_dictÚzero_indicesr=   r%   rq   ÚindicesÚfactors_listr±   r²   r°   s                         r)   Údup_isolate_real_roots_listrÄ   w  sÛ  € ð 	‡w‚wØ—j‘j“l A u©Q xˆeˆ1ˆä˜eÓ$ò 	B‰DˆAˆqÜ'¨¨1¨a¸Ô>¸qÑAˆE�!ŠHñ	Bà�WŠWÜÐIÈAÑMÓNÐNà ˆ<€Eàˆ�s˜a’x c k°Q¸#²XØ" Bˆ|ˆä˜%Ó ò '‰ˆˆ1Ü˜Q Ó"‰ˆˆ1á�Q˜’UØˆL˜‰Oä# A qÓ)¨!Ñ,ò 	'‰DˆAˆqÜ�a“ˆAà˜Ñ$Ø#$ a &�˜Q’à%&�˜Q‘ Ò"ñ	'ð'ð :F×9KÑ9KÓ9M×N©:¨1¨g”T˜!“W˜gÒ&ÐN€LÑNÜ,¨\¸1À#Ø�S ¨u¸4ôA�L€Eˆ5ð 	
�‰‹€Aá™Ø‰áØŸ™ §¡Ð'¨Ð6Ð7‰FàŸ™ §¡Ð'¨¸¿¹¸q¿v¹v°ÐGÐHˆFä�%˜&‘. 5Ñ(Ó)Ð)ùó Os   Ã4Fc                 ó   — | \  }}}}|\  }}}	}
||z  ||z  }}||
z  ||	z  }}||k(  r||k(  ry||kD  r||||f\  }}}}||kD  r||
||	f\  }}	}}
|s||z  |	|z  k\  xs ||z  |
|z  k  S ||z  |	|z  kD  xs ||z  |
|z  k  S )z6Check if Mobius transforms define disjoint intervals. Tre   )rf   ÚNr¹   rm   rn   ro   rp   r’   r“   r”   r•   Úa1d1Úb1c1Úa2d2Úb2c2s                  r)   Ú_disjoint_prË   ±  sÏ   € à�N€BˆˆB�Ø�N€BˆˆB�à�B‘˜˜2™ˆ$€DØ�B‘˜˜2™ˆ$€Dàˆt‚|˜ šØàˆd‚{Ø˜R  R˜‰ˆˆB��Bàˆd‚{Ø˜R  R˜‰ˆˆB��BáØ�"‰u˜˜2™‰~Ò/  B¡¨"¨R©%¡Ð/à�"‰u�r˜"‘u‰}Ò-  2¡¨¨2©¡Ð-r+   c           
      ó<  — g g }	}t        | «      D ]f  \  }
\  }}t        ||||||d¬«      D ]  \  }}|j                  ||||f«       Œ t        ||||||d¬«      D ]  \  }}|	j                  ||||f«       Œ Œh t        |«      D ]…  \  }
\  }}}}t        ||
dz   d «      D ]^  \  }\  }}}}t	        |||¬«      s7t        |||d|d¬«      \  }}t        |||d|d¬«      \  }}t	        |||¬«      sŒ7||||f||
|z   dz   <   Œ` ||||f||
<   Œ‡ t        |	«      D ]…  \  }
\  }}}}t        |	|
dz   d «      D ]^  \  }\  }}}}t	        |||¬«      s7t        |||d|d¬«      \  }}t        |||d|d¬«      \  }}t	        |||¬«      sŒ7||||f|	|
|z   dz   <   Œ` ||||f|	|
<   Œ‡ |rŽt        |	«      D ]9  \  }
\  }}}}|d   rŒ|d   st        |||d|d¬«      \  }}|d   sŒ||||f|	|
<    n t        |«      D ]9  \  }\  }}}}|d   rŒ|d   st        |||d|d¬«      \  }}|d   sŒ||||f||<    n |j                  «       }|	D ����cg c]  \  }}}}t        ||«      ||f‘Œ }	}}}}|D ����cg c]  \  }}}}t        ||«      ||f‘Œ }}}}}|	D ����cg c]  \  \  }}}}| | f||f‘Œ }	}}}}|s@|	D ����cg c]  \  \  }}}}||f|f‘Œ }	}}}}|D ����cg c]  \  \  }}}}||f|f‘Œ }}}}}|	|fS c c}}}}w c c}}}}w c c}}}}w c c}}}}w c c}}}}w )zCIsolate real roots of a list of polynomials and disjoin intervals. T)ru   r™   rš   rk   rx   r    N)r¹   )rv   rk   rx   r   )rº   r¢   r$   r¤   rË   r|   r5   rg   )r¶   r&   ru   r™   rš   r¹   r¦   rk   r²   r±   r:   r%   rq   ry   rf   ÚGrÆ   r=   rT   Úmr`   rˆ   rz   r{   s                           r)   rµ   rµ   Ç  s  € à�rˆ5€Eä˜wÓ'ò '‰	ˆ‰6ˆAˆqÜ4°Q¸¸sÈÐQTÐ[_ÐhlÔmò 	'‰DˆAˆqØ�L‰L˜!˜Q  1˜Õ&ð	'ô 5°Q¸¸sÈÐQTÐ[_ÐhlÔmò 	'‰DˆAˆqØ�L‰L˜!˜Q  1˜Õ&ñ	'ð	'ô % UÓ+ò  ‰ˆ‰<ˆAˆq�!�QÜ(¨¨q°1©u¨v¨Ó7ò 	,‰OˆA‰|��1�a˜Ü! ! Q¨vÕ6Ü1°!°Q¸ÀÈÐVZÔ[‘��1Ü1°!°Q¸ÀÈÐVZÔ[‘��1ô " ! Q¨vÖ6ð !" 1 a¨˜|ˆE�!�a‘%˜!‘)Òð	,ð �q˜!˜Q�<ˆˆaŠð ô % UÓ+ò  ‰ˆ‰<ˆAˆq�!�QÜ(¨¨q°1©u¨v¨Ó7ò 	,‰OˆA‰|��1�a˜Ü! ! Q¨vÕ6Ü1°!°Q¸ÀÈÐVZÔ[‘��1Ü1°!°Q¸ÀÈÐVZÔ[‘��1ô " ! Q¨vÖ6ð !" 1 a¨˜|ˆE�!�a‘%˜!‘)Òð	,ð �q˜!˜Q�<ˆˆaŠð ñ Ü(¨Ó/ò 	‰OˆA‰|��1�a˜Ø�Q“4Ø˜Aš$Ü5°a¸¸AÀQÈTÐZ^Ô_‘D�A�qð ˜A›$ð ˜q ! Q˜<��a‘Ùð	ô  )¨Ó/ò 	‰OˆA‰|��1�a˜Ø�Q“4Ø˜Aš$Ü5°a¸¸AÀQÈTÐZ^Ô_‘D�A�qð ˜A›$ð ˜q ! Q˜<��a‘Ùð	ð �K‰K‹M€EàHM×OÑO¹¸¸A¸qÀ!Ô" 1 eÓ,¨a°Ò3ÐO€EÓOØHM×OÑO¹¸¸A¸qÀ!Ô" 1 eÓ,¨a°Ò3ÐO€EÓOà49×:Ñ:¡.¡6 A q¨1¨a�ˆr�A�2ˆh˜˜1ÒÐ:€EÓ:áØ38×9Ñ9¡¡& 1 a¨!¨Q�1�a�&˜!’Ð9ˆÓ9Ø38×9Ñ9¡¡& 1 a¨!¨Q�1�a�&˜!’Ð9ˆÓ9à�%ˆ<Ðùõ PùÝOùå:ùõ :ùÝ9s   ÉK6
É-K>
ÊL
Ê9L
ËL
c           
      óL  — t        | «      dk  ry|j                  s||j                  «       }}t        | ||«      } t	        | |«      }|€4t        |D �cg c]  }t        ||«      dt        |«      z  z  ‘Œ c}|«      }n%t        |D �cg c]  }t        |||«      ‘Œ c}|«      }|€%t        |D �cg c]  }t        ||«      ‘Œ c}|«      }n%t        |D �cg c]  }t        |||«      ‘Œ c}|«      }t        ||z
  «      }	|�t        | ||«      s|	dz  }	|	S c c}w c c}w c c}w c c}w )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ˆÜ˜˜1˜aÓ ˆä�a˜‹O€Eà
€{Ü'ÐTYÖ([Èq¬&°°A«,¸¼ZÈ»]Ñ7JÓ*JÒ([Ð]^Ó_‰	ä'ÀuÖ(NÀ!¬(°1°c¸1Õ*=Ò(NÐPQÓRˆ	à
€{Ü'ÀÖ(G¸1¬&°°A­,Ò(GÈÓK‰	ä'ÀuÖ(NÀ!¬(°1°c¸1Õ*=Ò(NÐPQÓRˆ	ä�	˜IÑ%Ó&€Eà
€œx¨¨3°Ô2Ø�‰
ˆà€Lùò )\ùâ(Nùò )Hùâ(Ns   Á"DÂDÂ-DÃD!ÚOOÚQ1ÚQ2ÚQ3ÚQ4ÚA1ÚA2ÚA3ÚA4r    r-   rX   é   é   éûÿÿÿr!   r"   éýÿÿÿéüÿÿÿé   é   é	   é
   é   é   é   é   é   ri   é   é   ©r   r    )r    rÞ   )r!   rÞ   )rå   rÞ   )rã   rÞ   ©r    r-   )r!   r-   ©r    r    ©r!   r    )rá   r-   )rX   r-   )rX   rÞ   )rà   rÞ   )rß   rÞ   )rá   rÞ   )r-   r    )ré   rê   rë   ri   rì   rí   c                 ód   — | s|st         S | s|dkD  rt        S t        S |s| dkD  rt        S t        S y)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                 ó`  — | sg S g }|�s[| d   \  \  }}}	}	||cxk(  r|k(  rœn n™t        | «      dk(  r(t        |||«      dkD  rt        t        gS t        t        gS | d   \  \  }}	}	}	t        |||z   dz  |«      dkD  r|j                  t        t        g«       d}
n|j                  t        t        g«       d}
| dd } n?t        |||«      dkD  r|j                  t        «       d}
n|j                  t        «       d}
| D ]b  \  \  }}	}}	|j                  t        «       |d   dz  dk(  r|
 }
||k7  sŒ3|
dkD  r|j                  t        «       ŒN|j                  t        «       Œd |S |�s[| d   \  \  }}}	}	||cxk(  r|k(  rœn n™t        | «      dk(  r(t        |||«      dkD  rt        t        gS t        t        gS | d   \  \  }}	}	}	t        |||z   dz  |«      dkD  r|j                  t        t        g«       d}n|j                  t        t        g«       d}| dd } n?t        |||«      dkD  r|j                  t        «       d}n|j                  t        «       d}| D ]b  \  \  }}	}}	|j                  t        «       |d   dz  dk(  r| }||k7  sŒ3|dkD  r|j                  t        «       ŒN|j                  t        «       Œd |S t        |||«      }t        |||«      }|r|s{|j                  t        ||«      «       t        | «      dk(  rt        |||«      }t        |||«      }n2| d   \  \  }}	}	}	t        |||z   dz  |«      }t        |||z   dz  |«      }| dd } |dkD  rd}nd}|dkD  rd}
nd}
t        t        t        t        dœ}|j                  |||
f   «       | D ]Œ  \  \  }}}}	||k(  r9t        |||«      }t        |||«      }t        ||«      }|�|j                  |«       d|v r|d   dz  dk(  r| }d|v r|d   dz  dk(  r|
 }
||k(  r||k(  rŒw|j                  |||
f   «       ŒŽ |S )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   ry   ÚQr;   rU   rˆ   Úf2_sgnrÂ   Úf1_sgnró   rô   ÚsgnÚclss                    r)   Ú_intervals_to_quadrantsrý     sU  € áØˆ	à
€AâØ  ‘|‰‰ˆˆ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‘	ä˜˜A˜qÓ! AÒ%Ø—‘œ”Ø‘à—‘œ”Ø�à"+ò 
	!Ñ‰FˆQ��G˜QØ�H‰H”RŒLà�q‰z˜A‰~ Ò"Ø ˜�à�A‹vØ˜A’:Ø—H‘HœR•Là—H‘HœR•Lð
	!ð ˆâØ  ‘|‰‰ˆˆ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‘	ä˜˜A˜qÓ! AÒ%Ø—‘œ”Ø‘à—‘œ”Ø�à"+ò 
	!Ñ‰FˆQ��G˜QØ�H‰H”RŒLà�q‰z˜A‰~ Ò"Ø ˜�à�A‹vØ˜A’:Ø—H‘HœR•Là—H‘HœR•Lð
	!ð ˆä	�"�a˜Ó	€BÜ	�"�a˜Ó	€Bá‘RØ	�‰”  RÓ(Ô)äˆy‹>˜QÒÜ˜"˜a Ó#ˆBÜ˜"˜a Ó#‰Bà$ Q™<‰L‰FˆQ��A�qä˜"˜q 1™u a™i¨Ó+ˆBÜ˜"˜q 1™u a™i¨Ó+ˆBà˜a˜b�Mˆ	à	ˆA‚vØ‰àˆà	ˆA‚vØ‰àˆô ÜÜÜñ	€Cð ‡H�HˆS�&˜&Ð!Ñ"Ô#à'ò ,Ñ‰ˆˆA�˜Ø�Š6Ü˜"˜a Ó#ˆBÜ˜"˜a Ó#ˆBä! " bÓ)ˆCàˆØ—‘˜”à�‰<Ø�q‰z˜A‰~ Ò"Ø ˜�à�‰<Ø�q‰z˜A‰~ Ò"Ø ˜�à�Q’˜1 ›6Ø�H‰H�S˜& &Ð)Ñ*Õ+ð',ð* €Hr+   c                 óö  — |du rg d¢}dddddœ}ng d¢}dddddœ}|�U|durQt        |«      }t        g d¢«      D ]  \  }}||v sŒd||<   Œ t        g d	¢«      D ]  \  }}	|	|v sŒd||dz
  d
z  |f<   Œ | |||gg }}
t        |
«      D �]o  \  }}|sŒ
|d   t        k(  r|dd }|d   t        k(  r^|dz
  d
z  |dd }}|
|   d   t        |d   f}|t        v r |j	                  t        |   |||f   f«       nt        dt        |«      z   «      ‚|d   d}}|t        |«      k  sŒ›||   |dz   }}|t        k7  rd||f}|t        v r|j	                  t        |   df«       n‡|t        v r|j	                  t        |   ||   f«       nat        dt        |«      z   «      ‚||||   f|dz   }}|t        v r|j	                  t        |   ||   f«       nt        dt        |«      z   «      ‚|d   }|t        |«      k  rŒÕ�Œr |S )z9Transform sequences of quadrants to a sequence of rules. T)r    r    r   r   r    r   )rî   rï   )r-   rX   )rX   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Úq1rq   Úq2s                     r)   Ú_traverse_quadrantsr  ¢  sw  € à�$�Úˆð ØØØñ	
‰ò ˆð ØØØñ	
ˆð Ð˜w¨dÑ2Ü�g“,ˆä Ò!5Ó6ò 	‰GˆAˆtØ�wŠØ��a’ð	ô #Ò#;Ó<ò 	.‰IˆAˆvØ˜Ò Ø,-�˜!˜a™% 1™ aÐ(Ò)ð	.ð �t˜T 4Ð(¨"ˆ€Bä˜"“ó &‰ˆˆ1ÙØàˆR‰5”BŠ;Ø�#�2�ˆAàˆQ‰4”2Š:Ø˜‘E˜Q‘;  ! " ˆqˆAØ�Q‘%˜‘)œR  1¡Ð&ˆBàÔ%Ñ%Ø—‘Ô.¨rÑ2°G¸QÀ¸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¹Ð!AÕBä-Ð.IÌCÐPRËGÑ.SÓTÐTà˜R  1¡˜¨¨A©�A�àÔ)Ñ)Ø—L‘LÔ"2°2Ñ"6¸¸a¹Ð!AÕBä-Ð.GÌ#ÈbË'Ñ.QÓRÐRà�B‘ˆBð) ”#�a“&�jð%&ðP €Lr+   c           
      óh   — t        | «      D ����cg c]  \  \  }}}}||f||f‘Œ c}}}}S c c}}}}w )zKReverse intervals for traversal from right to left and from top to bottom. )r1   )r÷   r;   rU   rÂ   r%   s        r)   Ú_reverse_intervalsr  î  s4   € ä<DÀYÓ<O×QÑQÑ&8¡f q¨!¨g°qˆq�!ˆf�g˜qÒ!ÕQÐQùÕQs   ‘,
c                 óP   ‡— t        t        ˆfd„| D «       «       ‰d«      z  «      S )zNCompute the winding number of the input polynomial, i.e. the number of roots. c              3   óB   •K  — | ]  \  }} ‰t         |   |   Ž –— Œ y ­wrE   )Ú_values)rG   r9   r:   r`   s      €r)   rI   z"_winding_number.<locals>.<genexpr>ô  s"   øè ø€ Ò7©T¨Q°‘5œ' !™* Q™-Ô(Ñ7ùs   ƒr-   )rj   Úsum)ÚTr`   s    `r)   Ú_winding_numberr!  ò  s"   ø€ äŒsÓ7°QÔ7Ó7¹%À»(ÑBÓCÐCr+   c           	      óF  ‡+‡,— |j                   s|j                  st        d|z  «      ‚|j                   r||j                  «       c}Š+n|j	                  «       |c}Š+t        | |‰+«      } |�|€9t        | «      t        t        | ‰+«      «      c}Š,dt        ˆ+ˆ,fd„| D «       «      z  }|€ | }	}n|\  }}	|€­|­}}
n|\  }
}t        | ‰+«      \  }}t        ||	dd‰+«      }t        ||	dd‰+«      }t        |‰+|d¬«      \  }}t        |‰+|d¬«      \  }}t        ||
dd‰+«      }t        ||
dd‰+«      }t        |‰+|d¬«      \  }}t        |‰+|d¬«      \  }}t        ||dd‰+«      }t        ||dd‰+«      }t        |‰+|d¬«      \  }}t        |‰+|d¬«      \  }}t        ||dd‰+«      }t        ||dd‰+«      }t        |‰+|d¬«      \  }}t        |‰+|d¬«      \  }}||g}||g}||g} ||g}!t        ||||
ddd¬«      }"t        |||	|ddd¬«      }#t        | |||
ddd¬«      }$t        |!||	|ddd¬«      }%t        |$«      }$t        |%«      }%t        |"||||
‰+«      }&t        |#|||	|‰+«      }'t        |$|||
|‰+«      }(t        |%||||	‰+«      })t!        |&|'|(|)|¬	«      }*t#        |*‰+«      S )
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   óT   •K  — | ]  }‰j                  t        |«      ‰«      –— Œ! y ­wrE   ©ÚquorF   ©rG   ra   ry   rH   s     €€r)   rI   z*dup_count_complex_roots.<locals>.<genexpr>  s    øè ø€ Ò/¨�!—%‘%œ˜A› ×#Ñ/ùó   ƒ%(r    Tr‚   r   )r™   rš   rk   r¦   r¹   ©r  )rJ   rK   r   r5   r†   r   r	   rF   r   r6   r   r   r   rÄ   r  rý   r  r!  )-r%   r&   r™   rš   r  rÐ   rˆ   ÚBrz   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   ry   rH   s-                                              @@r)   Údup_count_complex_rootsrB  ö  s	  ù€ à�7Š7˜1Ÿ7š7ÜÐJÈQÑNÓOÐOà‡w‚wØ�!—+‘+“-ˆˆ‰1à�z‰z‹|˜Qˆˆˆ1ä�A�q˜!Ó€Aà
€{�c�kÜ˜1“œs¤6¨!¨Q£<Ó0ˆˆˆ2ØŒcÔ/¨QÔ/Ó/Ñ/ˆà
€{Ø�"�q�bˆA‰à‰ˆˆAà
€{Ø�"�q�bˆA‰à‰ˆˆAä˜1˜aÓ �F€Bˆä˜˜A˜q ! QÓ'€EÜ˜˜A˜q ! QÓ'€Eä  q¨!°TÔ:�H€A€uÜ  q¨!°TÔ:�H€A€uä˜˜A˜q ! QÓ'€EÜ˜˜A˜q ! QÓ'€Eä  q¨!°TÔ:�H€A€uÜ  q¨!°TÔ:�H€A€uä˜˜A˜q ! QÓ'€EÜ˜˜A˜q ! QÓ'€Eä  q¨!°TÔ:�H€A€uÜ  q¨!°TÔ:�H€A€uä˜˜A˜q ! QÓ'€EÜ˜˜A˜q ! QÓ'€Eä  q¨!°TÔ:�H€A€uÜ  q¨!°TÔ:�H€A€uà�5ˆ>€DØ�5ˆ>€DØ�5ˆ>€DØ�5ˆ>€Dä& t¨Q°A¸1À4ÈtÐ\`Ôa€DÜ& t¨Q°A¸1À4ÈtÐ\`Ôa€DÜ& t¨Q°A¸1À4ÈtÐ\`Ôa€DÜ& t¨Q°A¸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
           	      óŽ  — ||c\  }
}\  }}|\  }}}}|\  }}}}|\  }}}}|\  }}}}|
|z   dz  }t        ||dd|	«      }t        ||dd|	«      } t        || g|	||ddd¬«      }!g g }#}"|!|}%}$g g }'}&|t        |!«      })}(|D ]è  }|\  \  }}}*}+||k(  rQ||k(  r#|"j                  |«       |#j                  |«       Œ9||k  r|"j                  |«       ŒP|#j                  |«       Œb||k  r|"j                  |«       Œy||k\  r|#j                  |«       Œ�t	        |+|||	j                  «       |d¬«      \  }}||k  r|"j                  ||f|*|+f«       ||k\  sŒÓ|#j                  ||f|*|+f«       Œê |D ]è  }|\  \  }}}*}+||k(  rQ||k(  r#|&j                  |«       |'j                  |«       Œ9||k  r|&j                  |«       ŒP|'j                  |«       Œb||k  r|&j                  |«       Œy||k\  r|'j                  |«       Œ�t	        |+|||	j                  «       |d¬«      \  }}||k  r|&j                  ||f|*|+f«       ||k\  sŒÓ|'j                  ||f|*|+f«       Œê t        |"|||
||	«      },t        |$|| |||	«      }-t        |&||||
|	«      }.|}/t        |#|||||	«      }0|}1t        |'|||||	«      }2t        |)|| |||	«      }3t        |,|-|.|/d¬«      }4t        |0|1|2|3d¬«      }5t        |4|	«      }6t        |5|	«      }7|"|$|&|(f}8|,|-|.|/f}9|#|%|'|)f}:|0|1|2|3f};||||f}<|| ||f}=||||f}>|||| f}?|
|f||f}}||f||f}A}@|6|||8|9|<|=f}B|7|@|A|:|;|>|?f}C|B|CfS )zFVertical bisection step in Collins-Krandick root isolation algorithm. r-   r   r    T©r™   rš   rk   r¹   r¦   ©rw   rk   r(  ©	r   rÄ   r  r$   rŠ   r†   rý   r  r!  )DrÆ   r;   rU   r_   rø   ÚF1ÚF2rŽ   r–   ry   rz   r{   r(   r9   r>  r?  r@  rA  r  r  r  r  r*  r.  r2  r6  r+  r/  r3  r7  Ú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_Rra   rb   ÚD_LÚD_RsD                                                                       r)   Ú_vertical_bisectionrl  @  s  € à˜€N�F€Qˆ‰FˆQ�àÑ€Dˆ$��dØÑ€Dˆ$��dà!#Ñ€Eˆ5�%˜Ø!#Ñ€Eˆ5�%˜à	
ˆQ‰�!‰€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àò 8ˆØÑ‰ˆˆA�˜à�Š6Ø�AŠvØ—‘˜aÔ Ø—‘˜aÕ Ø�Q’Ø—‘˜aÕ à—‘˜aÕ à�AŠvØ—‘˜aÕ Ø�a’Ø—‘˜aÕ ä+¨A¨q°!°Q·Z±Z³\ÈAÐTXÔY‘��1à˜’6Ø—M‘M A q 6¨7°AÐ"6Ô7Ø˜“6Ø—M‘M A q 6¨7°AÐ"6Õ7ð-8ð0 ò 8ˆØÑ‰ˆˆA�˜à�Š6Ø�AŠvØ—‘˜aÔ Ø—‘˜aÕ Ø�Q’Ø—‘˜aÕ à—‘˜aÕ à�AŠvØ—‘˜aÕ Ø�a’Ø—‘˜aÕ ä+¨A¨q°!°Q·Z±Z³\ÈAÐTXÔY‘��1à˜’6Ø—M‘M A q 6¨7°AÐ"6Ô7Ø˜“6Ø—M‘M A q 6¨7°AÐ"6Õ7ð-8ô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àˆqˆ6�A�q�6€q€AØˆqˆ6�A�q�6€q€Aà��1�c˜3  dÐ
+€CØ��1�c˜3  dÐ
+€Cà�ˆ8€Or+   c
           	      óŽ  — ||c\  }
}\  }}|\  }}}}|\  }}}}|\  }}}}|\  }}}}||z   dz  }t        ||dd|	«      }t        ||dd|	«      } t        || g|	|
|ddd¬«      }!||!}#}"g g }%}$t        |!«      |}'}&g g })}(|D ]è  }|\  \  }}}*}+||k(  rQ||k(  r#|$j                  |«       |%j                  |«       Œ9||k  r|$j                  |«       ŒP|%j                  |«       Œb||k  r|$j                  |«       Œy||k\  r|%j                  |«       Œ�t	        |+|||	j                  «       |d¬«      \  }}||k  r|$j                  ||f|*|+f«       ||k\  sŒÓ|%j                  ||f|*|+f«       Œê |D ]è  }|\  \  }}}*}+||k(  rQ||k(  r#|(j                  |«       |)j                  |«       Œ9||k  r|(j                  |«       ŒP|)j                  |«       Œb||k  r|(j                  |«       Œy||k\  r|)j                  |«       Œ�t	        |+|||	j                  «       |d¬«      \  }}||k  r|(j                  ||f|*|+f«       ||k\  sŒÓ|)j                  ||f|*|+f«       Œê |},t        |$|||||	«      }-t        |&|| ||
|	«      }.t        |(|||||	«      }/t        |#|| |
||	«      }0t        |%|||||	«      }1|}2t        |)|||||	«      }3t        |,|-|.|/d¬«      }4t        |0|1|2|3d¬«      }5t        |4|	«      }6t        |5|	«      }7|"|$|&|(f}8|,|-|.|/f}9|#|%|'|)f}:|0|1|2|3f};||||f}<||| |f}=||||f}>| |||f}?|
|f||f}}|
|f||f}A}@|6|||8|9|<|=f}B|7|@|A|:|;|>|?f}C|B|CfS )zHHorizontal bisection step in Collins-Krandick root isolation algorithm. r-   r    TrD  rE  r(  rF  )DrÆ   r;   rU   r_   rø   rG  rH  rŽ   r–   ry   rz   r{   r(   r9   r>  r?  r@  rA  r  r  r  r  r*  r.  r2  r6  r+  r/  r3  r7  Ú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Â   rU  Ú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_Ura   rb   ÚD_BÚD_UsD                                                                       r)   Ú_horizontal_bisectionr�  ª  s  € à˜€N�F€Qˆ‰FˆQ�àÑ€Dˆ$��dØÑ€Dˆ$��dà!#Ñ€Eˆ5�%˜Ø!#Ñ€Eˆ5�%˜à	
ˆQ‰�!‰€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àò 8ˆØÑ‰ˆˆA�˜à�Š6Ø�AŠvØ—‘˜aÔ Ø—‘˜aÕ Ø�Q’Ø—‘˜aÕ à—‘˜aÕ à�AŠvØ—‘˜aÕ Ø�a’Ø—‘˜aÕ ä+¨A¨q°!°Q·Z±Z³\ÈAÐTXÔY‘��1à˜’6Ø—M‘M A q 6¨7°AÐ"6Ô7Ø˜“6Ø—M‘M A q 6¨7°AÐ"6Õ7ð-8ð0 ò 8ˆØÑ‰ˆˆA�˜à�Š6Ø�AŠvØ—‘˜aÔ Ø—‘˜aÕ Ø�Q’Ø—‘˜aÕ à—‘˜aÕ à�AŠvØ—‘˜aÕ Ø�a’Ø—‘˜aÕ ä+¨A¨q°!°Q·Z±Z³\ÈAÐTXÔY‘��1à˜’6Ø—M‘M A q 6¨7°AÐ"6Ô7Ø˜“6Ø—M‘M A q 6¨7°AÐ"6Õ7ð-8ð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àˆqˆ6�A�q�6€q€AØˆqˆ6�A�q�6€q€Aà��1�c˜3  dÐ
+€CØ��1�c˜3  dÐ
+€Cà�ˆ8€Or+   c                 óž   — d\  }}t        | «      D ]*  \  }\  }\  }}\  }}}}}}||z
  ||z
  z  }	|�|	|k  sŒ'|	|}}Œ, | j                  |«      S )z0Find a rectangle of minimum area for bisection. ©NN)rº   rO   )
Ú
rectanglesÚmin_arear=   r:   rˆ   rz   r{   r(   r9   Úareas
             r)   Ú_depth_first_selectr–    sr   € à�K€Hˆaä.7¸
Ó.Cò "Ñ*ˆÑ*ˆA‰v��1‘v˜˜1˜q ! Q¨Ø�A‘˜˜A™‰ˆàÐ˜t h›Ø �a‰Hð	"ð �>‰>˜!ÓÐr+   c                 óB   — | |c\  }}\  }}|�||z
  |k  xr ||z
  |k  S y)z8Return ``True`` if the given rectangle is small enough. Tre   )r;   rU   ru   rz   r{   r(   r9   s          r)   Ú_rectangle_small_pr˜     s8   € à˜€N�F€Qˆ‰FˆQ�à
€Ø�1‰u�s‰{Ò*˜q 1™u s™{Ð*àr+   c                 ó¾  ‡H‡I— |j                   s|j                  st        d|z  «      ‚t        | «      dk  rg S |j                   r|j	                  «       ŠHn|ŠHt        | |‰H«      } t        t        | ‰H«      «      ŠIdt        ˆHˆIfd„| D «       «      z  }| ‰Hj                  f||fc\  }}\  }	}
|�|}|�|}	|dk  s
|
|k  s|	|k  rt        d«      ‚t        | ‰H«      \  }}t        ||dd‰H«      }t        ||dd‰H«      }t        ||	dd‰H«      }t        ||	dd‰H«      }t        ||
dd‰H«      }t        ||
dd‰H«      }t        ||dd‰H«      }t        ||dd‰H«      }||g}||g}||g}||g}t        |‰H||	ddd¬«      }t        |‰H||
ddd¬«      }t        |‰H||	ddd¬«      }t        |‰H||
ddd¬«      }t        |«      }t        |«      }t        |||||	‰H«      }t        |||||
‰H«      }t        ||||	|‰H«      }t        ||||
|‰H«      } t!        |||| «      }!t#        |!‰H«      }"|"sg S ||||f}#|||| f}$||||f}%||||f}&|"||f|	|
f|#|$|%|&fgg }(}'|'�r´t%        |'«      \  }"\  }}\  }	}
}#}$}%}&|	|z
  |
|z
  kD  rÇt'        |"||f|	|
f|#|$|%|&||‰H«
      \  })}*|)\  }+},}-}.}/}0}1|*\  }2}3}4}5}6}7}8|+dk\  rF|+dk(  r0t)        |,|-|«      r#|(j+                  t-        |,|-|.|/|0|1||‰H«	      «       n|'j+                  |)«       |2dk\  �r|2dk(  r0t)        |3|4|«      r#|(j+                  t-        |3|4|5|6|7|8||‰H«	      «       n×|'j+                  |*«       nÅt/        |"||f|	|
f|#|$|%|&||‰H«
      \  }9}:|9\  };},}-}<}=}>}?|:\  }@}3}4}A}B}C}D|;dk\  rF|;dk(  r0t)        |,|-|«      r#|(j+                  t-        |,|-|<|=|>|?||‰H«	      «       n|'j+                  |9«       @dk\  rF@dk(  r0t)        |3|4|«      r#|(j+                  t-        |3|4ABCD||‰H«	      «       n|'j+                  |:«       |'r�Œ´t1        |(d	„ ¬
«      g }(}E|ED ]#  }F|(j3                  |Fj5                  «       |Fg«       Œ% |r|(S |(D �Gcg c]  }G|Gj7                  «       ‘Œ c}GS c c}Gw )zTIsolate complex roots of a square-free polynomial using Collins-Krandick algorithm. z3isolation of complex roots is not supported over %sr   r-   c              3   óT   •K  — | ]  }‰j                  t        |«      ‰«      –— Œ! y ­wrE   r$  r&  s     €€r)   rI   z0dup_isolate_complex_roots_sqf.<locals>.<genexpr>9  s    øè ø€ Ò+ Aˆa�e‰e”C˜“F˜B×Ñ+ùr'  z'not a valid complex isolation rectangler    TrD  c                 ó2   — | j                   | j                  fS rE   )ÚaxÚay)r�   s    r)   ú<lambda>z/dup_isolate_complex_roots_sqf.<locals>.<lambda>œ  s   € °·±°q·t±t°€ r+   )Úkey)rJ   rK   r   r	   r5   r   rF   r   r6   rP   r‡   r   r   rÄ   r  rý   r  r!  r–  rl  r˜  r$   ÚComplexIntervalr�  r­   rŸ   Ú	conjugateÚas_tuple)Jr%   r&   ru   r™   rš   r¯   r)  rz   r{   r(   r9   rŽ   r–   Úf1L1Úf2L1Úf1L2Úf2L2Úf1L3Úf2L3Úf1L4Úf2L4r:  r;  r<  r=  r>  r?  r@  rA  r  r  r  r  r   rÆ   r_   rø   rG  rH  r“  rŒ   rj  rk  r`  r;   rU   rb  rc  rf  rg  ra  ra   rb   rd  re  rh  ri  rŽ  r�  r„  r†  r‡  rŠ  r‹  r…  rˆ  r‰  rŒ  r�  Ú_rootsÚrootr�   ry   rH   sJ                                                                           @@r)   Údup_isolate_complex_roots_sqfr­  )  sL  ù€ à�7Š7˜1Ÿ7š7ÜÐOÐRSÑSÓTÐTä�!ƒ}˜ÒØˆ	à‡w‚wØ�K‰K‹M‰àˆä�A�q˜!Ó€Aä	ŒV�A�q‹\Ó	€BØ	Œ#Ô+¨Ô+Ó
+Ñ+€Aà�b˜!Ÿ&™&�\ A q 6€N�F€Qˆ‰FˆQ�à
€Øˆà
€Øˆàˆ1‚u��Q’˜!˜qš&ÜÐBÓCÐCä˜1˜aÓ �F€Bˆä�r˜1˜a  AÓ&€DÜ�r˜1˜a  AÓ&€Dä�r˜1˜a  AÓ&€DÜ�r˜1˜a  AÓ&€Dä�r˜1˜a  AÓ&€DÜ�r˜1˜a  AÓ&€Dä�r˜1˜a  AÓ&€DÜ�r˜1˜a  AÓ&€Dà�$ˆ<€DØ�$ˆ<€DØ�$ˆ<€DØ�$ˆ<€Dä& t¨Q°A¸1À4ÐPTÐ\`Ôa€DÜ& t¨Q°A¸1À4ÐPTÐ\`Ôa€DÜ& t¨Q°A¸1À4ÐPTÐ\`Ôa€DÜ& t¨Q°A¸1À4ÐPTÐ\`Ôa€Dä˜dÓ#€DÜ˜dÓ#€Dä" 4¨¨t°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ˆq‘6�A�q˜1˜a  Ràˆq‰5�1�q‘5Š=Ü*¨1¨q°!¨f°q¸!°f¸aÀÀBÈÈBÐPRÐ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ÐQSÐUVÓ!WÕXà×%Ñ% cÔ*à�a‹xØ˜!’8Ô 2°1°a¸Ô =Ø—L‘L¤°°A°s¸CÀÀtÈRÐQSÐUVÓ!WÕXà×%Ñ% cÕ*ä,¨Q°°A°¸¸A¸ÀÀ1ÀbÈ"ÈbÐRTÐ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Ó&¨Ð-Õ.ð/ñ Øˆà',Ö. !�—‘•Ò.Ð.ùÒ.s   Ñ Qc           	      óH   — t        | ||||||¬«      t        | |||||¬«      fS )zBIsolate real and complex roots of a square-free polynomial ``f``. )ru   r™   rš   rk   r¯   )ru   r™   rš   r¯   )r³   r­  )r%   r&   ru   r™   rš   rk   r¯   s          r)   Údup_isolate_all_roots_sqfr¯  ¦  s8   € ô 	# A q¨c°sÀÈ$ÐYaÔbÜ% a¨°¸À#ÐPXÔYð[ð [r+   c                 óT  — |j                   s|j                  st        d|z  «      ‚t        | |«      \  }}t	        |«      dk(  rO|\  \  } }t        | |||||¬«      \  }	}
|	D ��cg c]  \  }}||f|f‘Œ }	}}|
D ��cg c]  \  }}||f|f‘Œ }
}}|	|
fS t        d«      ‚c c}}w c c}}w )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)rJ   rK   r   r   r.   r¯  r  )r%   r&   ru   r™   rš   rk   rˆ   r¶   rq   Ú	real_partÚcomplex_partr;   rU   s                r)   Údup_isolate_all_rootsr³  ¬  sÃ   € à�7Š7˜1Ÿ7š7ÜÐXÐ[\Ñ\Ó]Ð]ä˜a Ó#�J€A€wä
ˆ7ƒ|�qÒØ‰	‰ˆ!ˆQä";Øˆq�c˜s¨°$ô#8Ñˆ	�<ð 1:×;¡f q¨!˜˜1�v˜q’kÐ;ˆ	Ñ;Ø3?×A©¨!¨Q˜1˜a˜& !šÐAˆÑAà˜,Ð&Ð&ä!Ð#WÓXÐXùó <ùÛAs   Á$BÁ<B$c                   óÄ   — e Zd ZdZd„ Zed„ «       Zed„ «       Zd„ Zed„ «       Z	ed„ «       Z
ed„ «       Zed	„ «       Zed
„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zy)r®   z?A fully qualified representation of a real isolation interval. c                 ó’  — t        |«      dk(  r–|\  }}d| _        |dk  r4|dk  rt        ||«      | | df\  }}}| _        nt        d|›d|›d�«      ‚t	        ||f|j                  «       «      \  }}}}	t        |t        ||g«      t        ||	g«      |«      }||||	f| _        n|dd	 | _        |d	   | _        ||c| _	        | _
        y)
z8Initialize new real interval with complete information. r-   Fr   Tr„   r~   r…   Nr!   )r.   Únegr   r‡   rc   r5   r   r
   rx   r%   Údom)
ÚselfÚdatar%   r·  r(   r9   r;   rU   ra   rb   s
             r)   Ú__init__zRealInterval.__init__Ã  sÝ   € äˆt‹9˜Š>Ø‰DˆAˆqàˆDŒHà�1ŠuØ˜’6Ü(2°1°cÓ(:¸Q¸BÀÀÀDÐ(HÑ%�A�q˜!˜T�Xå$ÒPQÒSTÐ%UÓVÐVä.°°1¨v°s·}±}³ÓG‰JˆAˆq�!�Qä˜a¤¨A¨q¨6Ó!2Ü!*¨A¨q¨6Ó!2°Có9ˆAð ˜Q  1˜*ˆD�Kà˜s ˜)ˆDŒKØ˜B‘xˆDŒHà˜cÐˆŒ�•r+   c                 ó   — t         S rE   )r®   ©r¸  s    r)   ÚfunczRealInterval.funcÜ  s   € äÐr+   c                 óh   — | }|j                   |j                  fz   |j                  |j                  fS rE   )rx   r¶  r%   r·  ©r¸  r:   s     r)   ÚargszRealInterval.argsà  s+   € àˆØ—‘˜AŸE™E˜8Ñ# Q§S¡S¨!¯%©%Ð0Ð0r+   c                 ób   — t        |«      t        | «      ury| j                  |j                  k(  S ©NF©ÚtyperÀ  ©r¸  Úothers     r)   Ú__eq__zRealInterval.__eq__å  ó(   € Ü�‹;œd 4›jÑ(ØØ�y‰y˜EŸJ™JÑ&Ð&r+   c                 óè   — | j                   j                  «       }| j                  \  }}}}| j                  s||z  ||z  k  r	 |||«      S  |||«      S ||z  ||z  kD  r
 |||«       S  |||«       S )z%Return the position of the left end. )r·  r5   rx   r¶  )r¸  r`   r;   rU   ra   rb   s         r)   r;   zRealInterval.aê  s€   € ð —‘×"Ñ"Ó$ˆØ—[‘[‰
ˆˆ1ˆa�à�xŠxØ�‰s�Q�q‘SŠyÙ˜Q “{Ð"Ù˜˜A“;Ðà�‰s�Q�q‘SŠyÙ˜a ›�|Ð#Ù˜!˜Q“K�<Ðr+   c                 óV   — | j                   }| | _         | j                   }|| _         |S )z&Return the position of the right end. )r¶  r;   )r¸  ÚwasÚrvs      r)   rU   zRealInterval.bù  s-   € ð �h‰hˆØ�7ˆŒØ�f‰fˆWˆØˆŒØˆ	r+   c                 ó4   — | j                   | j                  z
  S )z-Return width of the real isolating interval. ©rU   r;   r¼  s    r)   ÚdxzRealInterval.dx  s   € ð �v‰v˜Ÿ™‰Ðr+   c                 ó:   — | j                   | j                  z   dz  S )z2Return the center of the real isolating interval. r-   ©r;   rU   r¼  s    r)   ÚcenterzRealInterval.center  s   € ð —‘˜Ÿ™‘ Ñ"Ð"r+   c                 ój   — t        | j                  j                  | j                  j                  «      S ©z=Return the largest denominator occurring in either endpoint. )r6   r;   ÚdenominatorrU   r¼  s    r)   Ú	max_denomzRealInterval.max_denom  s%   € ô �4—6‘6×%Ñ% t§v¡v×'9Ñ'9Ó:Ð:r+   c                 ó2   — | j                   | j                  fS )z8Return tuple representation of real isolating interval. rÑ  r¼  s    r)   r¢  zRealInterval.as_tuple  s   € à—‘˜Ÿ™ÐÐr+   c                 ó<   — d| j                   ›d| j                  ›d�S )Nú(r~   r…   rÑ  r¼  s    r)   Ú__repr__zRealInterval.__repr__  s   � Ø!ŸV›V T§V£VÐ,Ð,r+   c                 óŒ   — t        |t        «      r|\  }}n|d}}|dk(  xr$ | j                  |cxk  xr | j                  k  S c S )a  
        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;   rU   ©r¸  Úitemró   rô   s       r)   Ú__contains__zRealInterval.__contains__  sG   € ô �dœEÔ"Ø‰FˆB‘à˜1�ˆBØ�Q‰wÒ1˜4Ÿ6™6 RÖ1¨4¯6©6Ñ1Ð1Ñ1Ð1r+   c                 óR  — t        |t        «      r4| j                  |j                  k  xs |j                  | j                  k  S t        |t        «      sJ ‚| j                  |j
                  k  xs7 |j                  | j                  k  xs |j                  |j                  z  dkD  S )ú9Return ``True`` if two isolation intervals are disjoint. r   )	rÜ  r®   rU   r;   r   rœ  Úbxr�  ÚbyrÅ  s     r)   Úis_disjointzRealInterval.is_disjoint*  s„   € ä�eœ\Ô*Ø—F‘F˜UŸW™WÑ$Ò8¨¯©°$·&±&Ñ(8Ð9Ü˜%¤Ô1Ð1Ð1Ø—‘˜Ÿ™Ñ!ò % U§X¡X°·±Ñ%6ò %Ø�x‰x˜Ÿ™Ñ  1Ñ$ð	&r+   c                 óÊ   — | j                   €| S t        | j                  | j                   | j                  dd¬«      \  }}t	        || j
                  fz   || j                  «      S )z2Internal one step real root refinement procedure. r    T)rv   rx   )rx   r|   r%   r·  r®   r¶  )r¸  r%   rx   s      r)   Ú_inner_refinezRealInterval._inner_refine2  sW   € à�;‰;ÐØˆKä.Ø�F‰F�D—K‘K §¡°¸4ôA‰	ˆˆ6ô ˜F d§h¡h [Ñ0°!°T·X±XÓ>Ð>r+   c                 ó”   — | }|j                  |«      s2|j                  «       |j                  «       }}|j                  |«      sŒ2||fS ©zDRefine an isolating interval until it is disjoint with another one. ©rä  ræ  ©r¸  rÆ  Úexprs      r)   Úrefine_disjointzRealInterval.refine_disjoint<  óL   € àˆØ×"Ñ" 5Ô)Ø×,Ñ,Ó.°×0CÑ0CÓ0E�%ˆDð ×"Ñ" 5Õ)ð �Uˆ{Ðr+   c                 óh   — | }|j                   |k  s |j                  «       }|j                   |k  sŒ |S ©zERefine an isolating interval until it is of sufficiently small size. )rÏ  ræ  )r¸  rÏ  rë  s      r)   Úrefine_sizezRealInterval.refine_sizeD  s4   € àˆØ—7‘7˜R’<Ø×%Ñ%Ó'ˆDð —7‘7˜R“<ð ˆr+   c                 óJ   — | }t        |«      D ]  }|j                  «       }Œ |S )z9Perform several steps of real root refinement algorithm. ©r2   ræ  ©r¸  rv   rë  rˆ   s       r)   Úrefine_stepzRealInterval.refine_stepL  ó/   € àˆÜ�u“ò 	(ˆAØ×%Ñ%Ó'‰Dð	(ð ˆr+   c                 ó"   — | j                  «       S )z4Perform one step of real root refinement algorithm. ©ræ  r¼  s    r)   ÚrefinezRealInterval.refineT  ó   € à×!Ñ!Ó#Ð#r+   N©r    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rº  Úpropertyr½  rÀ  rÇ  r;   rU   rÏ  rÒ  rÖ  r¢  rÚ  rß  rä  ræ  rì  rð  rô  rø  re   r+   r)   r®   r®   À  sÈ   „ ÙIò"ð2 ñó ðð ñ1ó ð1ò'ð
 ñ ó ð ð ñó ðð ñó ðð ñ#ó ð#ð ñ;ó ð;ò ò-ò2ò$&ò?òòóó$r+   r®   c                   óþ   — e Zd ZdZdd„Zed„ «       Zed„ «       Zd„ Zed„ «       Z	ed„ «       Z
ed„ «       Zed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ Zy)r   a¹  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                 ó˜   — ||c| _         | _        ||c| _        | _        ||c| _        | _        ||c| _        | _        |	| _        |
| _	        y)z;Initialize new complex interval with complete information. N)
r;   rU   r_   rø   rŽ   rG  r–   rH  r·  Úconj)r¸  r;   rU   r_   rø   rG  rH  rŽ   r–   r·  r  s              r)   rº  zComplexInterval.__init__Ý  sP   € ð ˜AˆˆŒ�”Ø˜AˆˆŒ�”à˜rÐˆŒ�”Ø˜rÐˆŒ�”àˆŒØˆ�	r+   c                 ó   — t         S rE   )r   r¼  s    r)   r½  zComplexInterval.funcí  s   € äÐr+   c           
      óæ   — | }|j                   |j                  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  f
S rE   )
r;   rU   r_   rø   rG  rH  rŽ   r–   r·  r  r¿  s     r)   rÀ  zComplexInterval.argsñ  sJ   € àˆØ—‘�Q—S‘S˜!Ÿ#™#˜qŸs™s A§D¡D¨!¯$©$°·±°a·d±d¸A¿E¹EÀ1Ç6Á6ÐJÐJr+   c                 ób   — t        |«      t        | «      ury| j                  |j                  k(  S rÂ  rÃ  rÅ  s     r)   rÇ  zComplexInterval.__eq__ö  rÈ  r+   c                 ó    — | j                   d   S )z1Return ``x`` coordinate of south-western corner. r   )r;   r¼  s    r)   rœ  zComplexInterval.axû  ó   € ð �v‰v�a‰yÐr+   c                 óX   — | j                   s| j                  d   S | j                  d    S )z1Return ``y`` coordinate of south-western corner. r    )r  r;   rU   r¼  s    r)   r�  zComplexInterval.ay   ó)   € ð �yŠyØ—6‘6˜!‘9Ðà—F‘F˜1‘I�:Ðr+   c                 ó    — | j                   d   S )z1Return ``x`` coordinate of north-eastern corner. r   )rU   r¼  s    r)   râ  zComplexInterval.bx  r  r+   c                 óX   — | j                   s| j                  d   S | j                  d    S )z1Return ``y`` coordinate of north-eastern corner. r    )r  rU   r;   r¼  s    r)   rã  zComplexInterval.by  r	  r+   c                 ó@   — | j                   d   | j                  d   z
  S )z0Return width of the complex isolating interval. r   rÎ  r¼  s    r)   rÏ  zComplexInterval.dx  ó   € ð �v‰v�a‰y˜4Ÿ6™6 !™9Ñ$Ð$r+   c                 ó@   — | j                   d   | j                  d   z
  S )z1Return height of the complex isolating interval. r    rÎ  r¼  s    r)   ÚdyzComplexInterval.dy  r  r+   c                 ór   — | j                   | j                  z   dz  | j                  | j                  z   dz  fS )z5Return the center of the complex isolating interval. r-   ©rœ  râ  r�  rã  r¼  s    r)   rÒ  zComplexInterval.center  s3   € ð —‘˜4Ÿ7™7Ñ" AÑ%¨¯©°$·'±'Ñ(9¸1Ñ'<Ð=Ð=r+   c                 ó¾   — t        | j                  j                  | j                  j                  | j                  j                  | j
                  j                  «      S rÔ  )r6   rœ  rÕ  râ  r�  rã  r¼  s    r)   rÖ  zComplexInterval.max_denom$  sB   € ô �4—7‘7×&Ñ&¨¯©×(;Ñ(;Ø—7‘7×&Ñ&¨¯©×(;Ñ(;ó=ð 	=r+   c                 ób   — | j                   | j                  f| j                  | j                  ffS )ziReturn tuple representation of the complex isolating
        interval's SW and NE corners, respectively. )rœ  r�  râ  rã  r¼  s    r)   r¢  zComplexInterval.as_tuple*  s)   € ð —‘˜$Ÿ'™'Ð" T§W¡W¨d¯g©gÐ$6Ð7Ð7r+   c           	      óp   — d| j                   ›d| j                  ›d| j                  ›d| j                  ›d�	S )NrÙ  r~   z) x (r…   r  r¼  s    r)   rÚ  zComplexInterval.__repr__/  s!   � Ø(,¯«°·³¸$¿'»'À4Ç7Ã7ÐKÐKr+   c                 óà   — t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  d¬«
      S )z=This complex interval really is located in lower half-plane. T)r  )
r   r;   rU   r_   rø   rG  rH  rŽ   r–   r·  r¼  s    r)   r¡  z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                 óÊ   — t        |t        «      r|\  }}n|d}}| j                  |cxk  xr | j                  k  nc xr$ | j                  |cxk  xr | j
                  k  S c S )a%  
        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ß  zComplexInterval.__contains__7  sU   € ô �dœEÔ"Ø‰FˆB‘à˜1�ˆBØ�w‰w˜"Ö' §¡Ô'ÒD¨D¯G©G°rÖ,D¸T¿W¹WÑ,DÐDÑ,DÐDr+   c                 óR  — t        |t        «      r|j                  | «      S | j                  |j                  k7  ry| j                  |j
                  k  xs |j                  | j
                  k  }|ry| j                  |j                  k  xs |j                  | j                  k  }|S )rá  T)rÜ  r®   rä  r  râ  rœ  rã  r�  )r¸  rÆ  Úre_distinctÚim_distincts       r)   rä  zComplexInterval.is_disjointJ  s„   € ä�eœ\Ô*Ø×$Ñ$ TÓ*Ð*Ø�9‰9˜Ÿ
™
Ò"ØØ—w‘w §¡Ñ)Ò?¨U¯X©X¸¿¹Ñ-?ˆÙØØ—w‘w §¡Ñ)Ò?¨U¯X©X¸¿¹Ñ-?ˆØÐr+   c                 ó  — | j                   | j                  c\  }}\  }}| j                  | j                  }}| j                  | j
                  }}| j                  | j                  }
}	| j                  }||z
  ||z
  kD  r9t        d||f||f||||
||	|«
      \  }}|d   dk(  r|\  }}}}}}}
nC|\  }}}}}}}
n8t        d||f||f||||
||	|«
      \  }}|d   dk(  r|\  }}}}}}}
n
|\  }}}}}}}
t        ||||||
||	|| j                  «
      S )z5Internal one step complex root refinement procedure. r    r   )r;   rU   r_   rø   rŽ   rG  r–   rH  r·  rl  r�  r   r  )r¸  rz   r{   r(   r9   r_   rø   rŽ   rG  r–   rH  r·  rj  rk  rˆ   r;   rU   rŽ  r�  s                      r)   ræ  zComplexInterval._inner_refineV  sC  € àŸ™ §¡ˆ‰ˆˆA‘��Aà�v‰v�t—v‘vˆ1ˆà—‘˜$Ÿ'™'ˆBˆØ—‘˜$Ÿ'™'ˆBˆà�h‰hˆàˆq‰5�1�q‘5Š=Ü*¨1¨q°!¨f°q¸!°f¸aÀÀBÈÈBÐPRÐTWÓX‰HˆC�à�1‰v˜Š{Ø(+Ñ%��1�a˜˜A˜r¡2à(+Ñ%��1�a˜˜A˜r¡2ä,¨Q°°A°¸¸A¸ÀÀ1ÀbÈ"ÈbÐRTÐVYÓZ‰HˆC�à�1‰v˜Š{Ø(+Ñ%��1�a˜˜A˜r¡2à(+Ñ%��1�a˜˜A˜r 2ä˜q ! Q¨¨2¨r°2°r¸3ÀÇ	Á	ÓJÐJr+   c                 ó”   — | }|j                  |«      s2|j                  «       |j                  «       }}|j                  |«      sŒ2||fS rè  ré  rê  s      r)   rì  zComplexInterval.refine_disjointr  rí  r+   Nc                 ó®   — |€|}| }|j                   |k  r|j                  |k  s0|j                  «       }|j                   |k  sŒ |j                  |k  sŒ0|S rï  )rÏ  r  ræ  )r¸  rÏ  r  rë  s       r)   rð  zComplexInterval.refine_sizez  sR   € àˆ:ØˆBØˆØ—7‘7˜R’< D§G¡G¨b¢LØ×%Ñ%Ó'ˆDð —7‘7˜R“< D§G¡G¨b£Lð ˆr+   c                 óJ   — | }t        |«      D ]  }|j                  «       }Œ |S )z<Perform several steps of complex root refinement algorithm. rò  ró  s       r)   rô  zComplexInterval.refine_step„  rõ  r+   c                 ó"   — | j                  «       S )z7Perform one step of complex root refinement algorithm. r÷  r¼  s    r)   rø  zComplexInterval.refineŒ  rù  r+   ©FrE   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ø  re   r+   r)   r   r   Y  s  „ ñAóFð  ñó ðð ñKó ðKò'ð
 ñó ðð ñó ðð ñó ðð ñó ðð ñ%ó ð%ð ñ%ó ð%ð ñ>ó ð>ð ñ=ó ð=ò
8ò
LòEò
Eò&
òKò8óóó$r+   r   r  )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   rR   rV   r[   rc   rg   rr   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!  rB  rl  r�  r–  r˜  r­  r¯  r³  r®   r   re   r+   r)   ú<module>r'     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+   