Ë
    7^(h¥�  ã                   ó^  — d Z ddlZddl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mZ ddlmZmZ ddlmZmZmZmZ dd	lmZ dd
l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$ ddl%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, d„ Z-d„ Z.d„ Z/dd„Z0d„ Z1d„ Z2dejf                  dfd„Z4d„ Z5d d„Z6d„ Z7g fd„Z8y)!z<Tools for solving inequalities and systems of inequalities. é    N)Úcontinuous_domainÚperiodicityÚfunction_range)Úsympify)Úfactor_terms)Ú
RelationalÚLtÚGeÚEq)ÚSymbolÚDummy)ÚIntervalÚ	FiniteSetÚUnionÚIntersection)ÚS)Ú
expand_mul)ÚAbs)ÚAnd)ÚPolyÚPolynomialErrorÚparallel_poly_from_expr)Ú_nsort)ÚsolvifyÚsolveset)ÚsiftÚiterable)Ú
filldedentc           
      óÎ  — t        | t        «      st        d«      ‚| j                  «       j                  rot        | j                  «       d|«      }|t        j                  u rt        j                  gS |t        j                  u rt        j                  gS t        d|z  «      ‚| j                  d¬«      g }}|dk(  r)|D ]"  \  }}t        ||«      }|j                  |«       Œ$ |S |dk(  rQt        j                  }|t        j                   dfgz   D ]&  \  }	}t        ||	d	d	«      }|j                  |«       |	}Œ( |S | j#                  «       dkD  rd}
nd
}
d\  }}|dk(  rd}n,|dk(  rd
}n$|dk(  rd\  }}n|dk(  rd\  }}nt        d|z  «      ‚t        j                   d	}}	t%        |«      D ]†  \  }}|dz  r-|
|k(  r|j'                  dt        ||	| |«      «       |
 || }}	}
Œ8|
|k(  r%|s#|j'                  dt        ||	d	|«      «       |d	}}	Œb|
|k7  sŒh|sŒk|j'                  dt        ||«      «       Œˆ |
|k(  r,|j'                  dt        t        j                  |	d	|«      «       |S )a  Solve a polynomial inequality with rational coefficients.

    Examples
    ========

    >>> from sympy import solve_poly_inequality, Poly
    >>> from sympy.abc import x

    >>> solve_poly_inequality(Poly(x, x, domain='ZZ'), '==')
    [{0}]

    >>> solve_poly_inequality(Poly(x**2 - 1, x, domain='ZZ'), '!=')
    [Interval.open(-oo, -1), Interval.open(-1, 1), Interval.open(1, oo)]

    >>> solve_poly_inequality(Poly(x**2 - 1, x, domain='ZZ'), '==')
    [{-1}, {1}]

    See Also
    ========
    solve_poly_inequalities
    z8For efficiency reasons, `poly` should be a Poly instancer   ú%could not determine truth value of %sF)Úmultipleú==ú!=é   Téÿÿÿÿ)NFú>ú<ú>=)r$   Tú<=)r%   Tz'%s' is not a valid relationé   )Ú
isinstancer   Ú
ValueErrorÚas_exprÚ	is_numberr   r   ÚtrueÚRealsÚfalseÚEmptySetÚNotImplementedErrorÚ
real_rootsr   ÚappendÚNegativeInfinityÚInfinityÚLCÚreversedÚinsert)ÚpolyÚrelÚtÚrealsÚ	intervalsÚrootÚ_ÚintervalÚleftÚrightÚsignÚeq_signÚequalÚ
right_openÚmultiplicitys                  úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/solvers/inequalities.pyÚsolve_poly_inequalityrK      s˜  € ô, �dœDÔ!ÜØFóHð 	Hà‡|�|ƒ~×ÒÜ�t—|‘|“~ q¨#Ó.ˆØ”—‘‰;Ü—G‘G�9ÐØ”!—'‘'‰\Ü—J‘J�<Ðä%Ø7¸!Ñ;ó=ð =ð —‘°�Ó6¸ˆ9€Eà
ˆd‚{Øò 	'‰GˆD�!Ü  dÓ+ˆHØ×Ñ˜XÕ&ð	'ðd Ðð_ 
�ŠÜ×!Ñ!ˆà¤!§*¡*¨a Ð 1Ñ1ò 	‰HˆE�1Ü  e¨T°4Ó8ˆHØ×Ñ˜XÔ&Ø‰Dð	ðX ÐðO �7‰7‹9�qŠ=Ø‰DàˆDà$‰ˆ�à�#Š:Ø‰GØ�CŠZØ‰GØ�DŠ[Ø%‰NˆG‘UØ�DŠ[Ø%‰NˆG‘UäÐ;¸cÑAÓBÐBäŸJ™J¨ˆzˆä"*¨5£/ò 	>ÑˆD�,Ø˜aÒØ˜7’?Ø×$Ñ$Øœ8 D¨%°U°¸JÓGôIð ,0¨%°¸5°y˜Z�e‘à˜7’?©5Ø×$Ñ$Øœ8 D¨%°°zÓBôDà(,¨d˜:‘EØ˜W“_ªØ×$Ñ$ Q¬°°tÓ(<Õ=ð	>ð �7Š?Ø×ÑØ”8œA×.Ñ.°°t¸ZÓHôJð Ðó    c           	      óX   — t        | D ��cg c]  }t        |Ž D ]  }|‘Œ Œ c}}Ž S c c}}w )a�  Solve polynomial inequalities with rational coefficients.

    Examples
    ========

    >>> from sympy import Poly
    >>> from sympy.solvers.inequalities import solve_poly_inequalities
    >>> from sympy.abc import x
    >>> solve_poly_inequalities(((
    ... Poly(x**2 - 3), ">"), (
    ... Poly(-x**2 + 1), ">")))
    Union(Interval.open(-oo, -sqrt(3)), Interval.open(-1, 1), Interval.open(sqrt(3), oo))
    )r   rK   )ÚpolysÚpÚss      rJ   Úsolve_poly_inequalitiesrQ   q   s/   € ô ˜e×G˜Ô-BÀAÐ-FÒG¨’1ÐG�1ÓGÐHÐHùÓGs   ‹&
c                 ó<  — t         j                  }| D �]  }|sŒt        t         j                  t         j                  «      g}|D ]¹  \  \  }}}t        ||z  |«      }t        |d«      }g }	t        j                  ||«      D ]:  \  }
}|
j                  |«      }|t         j                  usŒ*|	j                  |«       Œ< |	}g }	|D ]2  }|D ]  }||z  }Œ	 |t         j                  usŒ"|	j                  |«       Œ4 |	}|rŒ¹ n |D ]  }|j                  |«      }Œ �Œ |S )a3  Solve a system of rational inequalities with rational coefficients.

    Examples
    ========

    >>> from sympy.abc import x
    >>> from sympy import solve_rational_inequalities, Poly

    >>> solve_rational_inequalities([[
    ... ((Poly(-x + 1), Poly(1, x)), '>='),
    ... ((Poly(-x + 1), Poly(1, x)), '<=')]])
    {1}

    >>> solve_rational_inequalities([[
    ... ((Poly(x), Poly(1, x)), '!='),
    ... ((Poly(-x + 1), Poly(1, x)), '>=')]])
    Union(Interval.open(-oo, 0), Interval.Lopen(0, 1))

    See Also
    ========
    solve_poly_inequality
    r"   )r   r2   r   r6   r7   rK   Ú	itertoolsÚproductÚ	intersectr5   Úunion)ÚeqsÚresultÚ_eqsÚglobal_intervalsÚnumerÚdenomr<   Únumer_intervalsÚdenom_intervalsr?   Únumer_intervalÚglobal_intervalrB   Údenom_intervals                 rJ   Úsolve_rational_inequalitiesrb   ‚   sK  € ô. �Z‰Z€Fàó $,ˆÙØä$¤Q×%7Ñ%7¼¿¹ÓDÐEÐà#'ò 	Ñ‰NˆU�E˜CÜ3°E¸%±KÀÓEˆOÜ3°E¸4Ó@ˆOàˆIä3<×3DÑ3DØ#Ð%5ó47ò /Ñ/� à)×3Ñ3°OÓD�à¤1§:¡:Ò-Ø×$Ñ$ XÕ.ð/ð  )ÐàˆIà#3ò 6�Ø&5ò 6�NØ# ~Ñ5‘Oð6ð #¬!¯*©*Ò4Ø×$Ñ$ _Õ5ð6ð  )Ðâ#Ùð7	ð: )ò 	,ˆHØ—\‘\ (Ó+‰Fò	,ðG$,ðL €MrL   Tc                 ó  — d}g }t         j                  }| D �]  }|sŒg }t         j                  }|D �]‘  }	t        |	t        «      r|	\  }	}
n4|	j
                  r&|	j                  |	j                  z
  |	j                  }
}	nd}
|	t         j                  u r#t         j                  t         j                  d}
}}nV|	t         j                  u r#t         j                  t         j                  d}
}}n!|	j                  «       j                  «       \  }}	 t        ||f|«      \  \  }}}|j$                  j&                  s"|j)                  «       |j)                  «       d}}}|j$                  j+                  «       }|j,                  s1|j.                  s%||z  }	t1        |	d|
«      }	|t3        |	|d¬«      z  }�Œ}|j5                  ||f|
f«       �Œ” |r`|t7        |g«      z  }t7        |D ����cg c]0  }|D ])  \  \  }}}|j9                  |«      r||j:                  fdf‘Œ+ Œ2 c}}}}g«      }||z  }||z  }�Œ |s|r|j=                  «       }|r|j?                  |«      }|S # t         $ r t!        t#        d«      «      ‚w xY wc c}}}}w )a8  Reduce a system of rational inequalities with rational coefficients.

    Examples
    ========

    >>> from sympy import Symbol
    >>> from sympy.solvers.inequalities import reduce_rational_inequalities

    >>> x = Symbol('x', real=True)

    >>> reduce_rational_inequalities([[x**2 <= 0]], x)
    Eq(x, 0)

    >>> reduce_rational_inequalities([[x + 2 > 0]], x)
    -2 < x
    >>> reduce_rational_inequalities([[(x + 2, ">")]], x)
    -2 < x
    >>> reduce_rational_inequalities([[x + 2]], x)
    Eq(x, -2)

    This function find the non-infinite solution set so if the unknown symbol
    is declared as extended real rather than real then the result may include
    finiteness conditions:

    >>> y = Symbol('y', extended_real=True)
    >>> reduce_rational_inequalities([[y + 2 > 0]], y)
    (-2 < y) & (y < oo)
    Tr"   z„
                    only polynomials and rational functions are
                    supported in this context.
                    Fr   )Ú
relational) r   r2   r0   r+   ÚtupleÚis_RelationalÚlhsÚrhsÚrel_opr/   ÚZeroÚOner1   ÚtogetherÚas_numer_denomr   r   r   ÚdomainÚis_ExactÚto_exactÚ	get_exactÚis_ZZÚis_QQr   Úsolve_univariate_inequalityr5   rb   ÚhasÚoneÚevalfÚas_relational)ÚexprsÚgenrd   ÚexactrW   ÚsolutionÚ_exprsrY   Ú_solÚexprr<   r[   r\   Úoptrn   ÚiÚnÚdrA   Úexcludes                       rJ   Úreduce_rational_inequalitiesr…   Ä   sq  € ð: €EØ
€CÜ�z‰z€HØó 0ˆÙØØˆÜ�w‰wˆØó #	3ˆDÜ˜$¤Ô&Ø ‘	�‘cà×%Ò%Ø $§¡¨4¯8©8Ñ 3°T·[±[˜#‘Dà�Cà”q—v‘v‰~Ü$%§F¡F¬A¯E©E°4˜c�u‘ØœŸ™‘Ü$%§E¡E¬1¯5©5°$˜c�u‘à#Ÿ}™}›×=Ñ=Ó?‘��uðÜ&=Ø˜E�N Có')Ñ#‘�˜ ð —:‘:×&Ò&Ø&+§n¡nÓ&6¸¿¹Ó8HÈ%˜e�u�à—Z‘Z×)Ñ)Ó+ˆFà—L’L F§L¢LØ˜U‘{�Ü! $¨¨3Ó/�ØÔ3°D¸#È%ÔPÑP’à—‘˜e U˜^¨SÐ1Ö2ðG#	3ñJ ØÔ/°°Ó7Ñ7ˆDÜ1Ø÷4Añ 4AØ°ò4AÙ!,¡& 1 a¨!°Q·U±U¸3´Zð 78¸¿¹°ZÀÒ4Fð 4AÐ4Fõ 4Að 3Bó CˆGà�G‰OˆDà�DÑŠða0ñd ‘XØ—>‘>Ó#ˆáØ×)Ñ)¨#Ó.ˆà€OøôA #ò Ü%¤jð 2ó 'ó ð ðüõ(4As   ÄIÇ$5I;ÉI8c                 ó$  ‡— |j                   du rt        t        d«      «      ‚ˆfd„Šdddœ}g } ‰| «      D ]K  \  } }||j                  «       vrt	        | d|«      } nt	        |  d||   «      } |j                  | g|z   «       ŒM t        ||«      S )a�  Reduce an inequality with nested absolute values.

    Examples
    ========

    >>> from sympy import reduce_abs_inequality, Abs, Symbol
    >>> x = Symbol('x', real=True)

    >>> reduce_abs_inequality(Abs(x - 5) - 3, '<', x)
    (2 < x) & (x < 8)

    >>> reduce_abs_inequality(Abs(x + 2)*3 - 13, '<', x)
    (-19/3 < x) & (x < 7/3)

    See Also
    ========

    reduce_abs_inequalities
    Fzs
            Cannot solve inequalities with absolute values containing
            non-real variables.
            c                 óÊ  •‡— g }| j                   s| j                  rj| j                  }| j                  D ]M  } ‰	|«      }|s|}Œt	        j
                  ||«      D � ���cg c]  \  \  } }\  }} || |«      ||z   f‘Œ }}}} }ŒO |S | j                  rO| j                  Š‰j                  st        d«      ‚|j                  ˆfd„ ‰	| j                  «      D «       «       |S t        | t        «      rd ‰	| j                  d   «      }|D ]H  \  } }|j                  | |t        | d«      gz   f«       |j                  |  |t!        | d«      gz   f«       ŒJ |S | g fg}|S c c}}}} w )Nz'Only Integer Powers are allowed on Abs.c              3   ó2   •K  — | ]  \  }}|‰z  |f–— Œ y ­w©N© )Ú.0r   Úcondsr‚   s      €rJ   ú	<genexpr>zAreduce_abs_inequality.<locals>._bottom_up_scan.<locals>.<genexpr>L  s   øè ø€ ÒX©k¨d°E˜$ ™' 5Ô)ÑXùs   ƒr   )Úis_AddÚis_MulÚfuncÚargsrS   rT   Úis_PowÚexpÚ
is_Integerr,   ÚextendÚbaser+   r   r5   r
   r	   )
r   ry   ÚopÚargr}   rŒ   Ú_exprÚ_condsr‚   Ú_bottom_up_scans
           @€rJ   r›   z.reduce_abs_inequality.<locals>._bottom_up_scan9  sj  ù€ Øˆà�;Š;˜$Ÿ+š+Ø—‘ˆBà—y‘yò >�Ù(¨Ó-�áØ"‘Eô &×-Ñ-¨e°VÓ<÷>ñ >ÑCaÁ=ÀDÈ%ÑRaÐSXÐZ`™b  u›o¨u°v©~Ò>ð >�Eô >ð>ð. ˆð �[Š[Ø—‘ˆAØ—<’<Ü Ð!JÓKÐKà�L‰LÓX¹_ÈTÏYÉYÓ=WÔXÔXð ˆô ˜œcÔ"Ù$ T§Y¡Y¨q¡\Ó2ˆFà%ò =‘��eØ—‘˜t U¬b°°q«k¨]Ñ%:Ð;Ô<Ø—‘˜t˜e U¬b°°q«k¨]Ñ%:Ð;Õ<ð=ð ˆð ˜B�Z�LˆEàˆùõ#>s   Á Er&   r(   ©r'   r)   r   )Úis_extended_realÚ	TypeErrorr   Úkeysr   r5   r…   )r   r<   rz   ÚmappingÚinequalitiesrŒ   r›   s         @rJ   Úreduce_abs_inequalityr¢     s­   ø€ ð( ×Ñ˜uÑ$Üœ
ð $ó ó ð 	ô
ð> ˜tÑ$€GØ€Lá& tÓ,ò ,‰ˆˆeØ�g—l‘l“nÑ$Ü˜t Q¨Ó,‰Dä˜t˜e Q¨°©Ó5ˆDà×Ñ˜T˜F U™NÕ+ð,ô (¨°cÓ:Ð:rL   c                 óZ   — t        | D ��cg c]  \  }}t        |||«      ‘Œ c}}Ž S c c}}w )a  Reduce a system of inequalities with nested absolute values.

    Examples
    ========

    >>> from sympy import reduce_abs_inequalities, Abs, Symbol
    >>> x = Symbol('x', extended_real=True)

    >>> reduce_abs_inequalities([(Abs(3*x - 5) - 7, '<'),
    ... (Abs(x + 25) - 13, '>')], x)
    (-2/3 < x) & (x < 4) & (((-oo < x) & (x < -38)) | ((-12 < x) & (x < oo)))

    >>> reduce_abs_inequalities([(Abs(x - 4) + Abs(3*x - 5) - 7, '<')], x)
    (1/2 < x) & (x < 4)

    See Also
    ========

    reduce_abs_inequality
    )r   r¢   )ry   rz   r   r<   s       rJ   Úreduce_abs_inequalitiesr¤   f  s9   € ô* Ø÷!ÙˆD�#ô (¨¨c°3Õ7ó !ð "ð "ùó !s   ‹'
Fc                 óJ  ‡ ‡‡)— ddl m} |j                  t        j                  «      du rt        t        d«      «      ‚|t        j                  ur3t        ‰ ‰d|¬«      j                  |«      }|r|j                  ‰«      }|S 	 ‰}|}‰j                  du r%t        j                  }|s|S |j                  |«      S ‰j                  €!t        dd¬	«      Š	 ‰ j                  |‰i«      Š d}‰ t        j                  u r|}�nÞ‰ t        j                   u rt        j                  }�nº‰ j"                  ‰ j$                  z
  }	t'        |	‰«      }
|
t        j(                  k(  rXt+        |	«      }	‰ j-                  |	d«      }|t        j                  u r|}�n,|t        j                   u �rt        j                  }�n|
��t/        |	‰|«      }‰ j0                  }|dv rL‰ j-                  |j2                  d«      r|}n|‰ j-                  |j4                  d«      s`t        j                  }nO|dv rK‰ j-                  |j4                  d«      r|}n,‰ j-                  |j2                  d«      st        j                  }|j4                  |j2                  }}||z
  t        j6                  u rt9        d|
dd«      j;                  |«      }|}|�€ |	j=                  «       \  }}	 ‰|j>                  vrtA        |	j>                  «      dkD  rtB        ‚tE        |	‰|«      }|€tB        ‚	 t+        |	«      Š)ˆ)ˆ ˆfd„}g } |‰ ‰«      D ]  }|jK                  tE        |‰|«      «       Œ  |stM        ‰)‰|«      }d‰ j0                  v xr ‰ j0                  dk7  }	 tO        |jP                  tS        |j4                  |j2                  «      z
  «      }tS        ||z   tU        |«      z   Ž j                  t9        |j4                  |j2                  |j4                  |v|j2                  |v«      «      }tW        d„ |D «       «      rtY        |d¬«      d   }n7t[        |d„ «      }|d   rt
        ‚	 |d   }tA        |«      dkD  rt]        |«      }t        j                  }‰)j_                  t        j`                  «      x}t        j(                  k7  �r’d}tS        «       }	 tc        |‰|«      }te        |t8        «      s1|D ]+  }||vsŒ ||«      sŒ|j                  sŒ|tS        |«      z  }Œ- né|j4                  |j2                  }!} tY        |tS        |!«      z   «      D ]¢  } || «      }"| |!k7  r‘ ||«      }#tg        | |«      }$|$|vry|$j                  rm ||$«      re|"r|#r|t9        | |«      z  }nQ|"r|t9        jh                  | |«      z  }n5|#r|t9        jj                  | |«      z  }n|t9        jl                  | |«      z  }|} Œ¤ |D ]  }%|tS        |%«      z  }Œ |t        j                  u r+tC        t        d‰ jG                  ‰|«      ›d|›d�«      «      ‚|j;                  |«      }t        j                  g}&|j4                  } | |v r. || «      r&| jn                  r|&jq                  tS        | «      «       |D ]‡  }'|'}! |tg        | |!«      «      r|&jq                  t9        | |!dd«      «       |'|v r|js                  |'«       n<|'|v r|js                  |'«        ||'«      }(n|}(|(r|&jq                  tS        |'«      «       |!} Œ‰ |j2                  }!|!|v r. ||!«      r&|!jn                  r|&jq                  tS        |!«      «        |tg        | |!«      «      r%|&jq                  t9        jl                  | |!«      «       |t        j(                  k7  rr|j;                  |«      }n#tu        tw        |&Ž ||«      jG                  ‰|«      }|s|S |j                  |«      S # t        $ r t        t        d
«      «      ‚w xY w# tB        t
        f$ r1 t        t        d‰ jG                  ‰tI        d«      «      z  «      «      ‚w xY w# t        $ r t
        ‚w xY w# t
        $ r t        d«      ‚w xY w# t        $ r t        j                  }d}Y �Œªw xY w)aT  Solves a real univariate inequality.

    Parameters
    ==========

    expr : Relational
        The target inequality
    gen : Symbol
        The variable for which the inequality is solved
    relational : bool
        A Relational type output is expected or not
    domain : Set
        The domain over which the equation is solved
    continuous: bool
        True if expr is known to be continuous over the given domain
        (and so continuous_domain() does not need to be called on it)

    Raises
    ======

    NotImplementedError
        The solution of the inequality cannot be determined due to limitation
        in :func:`sympy.solvers.solveset.solvify`.

    Notes
    =====

    Currently, we cannot solve all the inequalities due to limitations in
    :func:`sympy.solvers.solveset.solvify`. Also, the solution returned for trigonometric inequalities
    are restricted in its periodic interval.

    See Also
    ========

    sympy.solvers.solveset.solvify: solver returning solveset solutions with solve's output API

    Examples
    ========

    >>> from sympy import solve_univariate_inequality, Symbol, sin, Interval, S
    >>> x = Symbol('x')

    >>> solve_univariate_inequality(x**2 >= 4, x)
    ((2 <= x) & (x < oo)) | ((-oo < x) & (x <= -2))

    >>> solve_univariate_inequality(x**2 >= 4, x, relational=False)
    Union(Interval(-oo, -2), Interval(2, oo))

    >>> domain = Interval(0, S.Infinity)
    >>> solve_univariate_inequality(x**2 >= 4, x, False, domain)
    Interval(2, oo)

    >>> solve_univariate_inequality(sin(x) > 0, x, relational=False)
    Interval.open(0, pi)

    r   ©ÚdenomsFz|
        Inequalities in the complex domain are
        not supported. Try the real domain by
        setting domain=S.Reals)rd   Ú
continuousNrz   T©Úextended_realz–
                When gen is real, the relational has a complex part
                which leads to an invalid comparison like I < 0.
                rœ   )r&   r(   r$   z…
                    The inequality, %s, cannot be solved using
                    solve_univariate_inequality.
                    Úxc                 óœ  •— ‰j                  ‰t        | «      «      }	 ‰j                  |d«      }|t        j                  t        j
                  fv r|S |j                  du rt        j
                  S |j                  d«      }|j                  r‰j                  |d«      S t        d|z  «      ‚# t        $ r t        j
                  }Y Œšw xY w)Nr   Fr*   z!relationship did not evaluate: %s)Úsubsr   r�   rž   r   r1   r/   r�   r‚   Úis_comparabler3   )r«   ÚvÚrÚ
expanded_er   rz   s      €€€rJ   Úvalidz*solve_univariate_inequality.<locals>.valid  sµ   ø€ ð —O‘O C¬°A«Ó7�ð ØŸ	™	 ! Q›�Að œŸ™¤§¡Ð)Ñ)Ø�HØ×%Ñ%¨Ñ.ÜŸ7™7�NàŸ™˜A›�AØ—’Ø#Ÿy™y¨¨A›Ð.ä-Ø;¸aÑ?óAð Aøô !ò  ÜŸ™’Að ús   žB/ Â/CÃ
Cú=r#   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr‰   )r.   )r‹   r°   s     rJ   r�   z.solve_univariate_inequality.<locals>.<genexpr>@  s   è ø€ Ò< q�q—{•{Ñ<ùs   ‚)Ú	separatedc                 ó   — | j                   S r‰   ©r�   )r«   s    rJ   ú<lambda>z-solve_univariate_inequality.<locals>.<lambda>C  s   € ¸Q×=OÑ=O€ rL   z'sorting of these roots is not supportedz
                        zZ contains imaginary parts which cannot be
                        made 0 for any value of zm satisfying the
                        inequality, leading to relations like I < 0.
                        )<Úsympy.solvers.solversr§   Ú	is_subsetr   r0   r3   r   rt   Úintersectionrx   r�   r2   r   Úxreplacerž   r/   r1   rg   rh   r   rj   r   r�   r   ri   ÚsupÚinfr7   r   rU   rm   Úfree_symbolsÚlenr,   r   r­   r   r•   r   ÚsetÚboundaryr   ÚlistÚallr   r   ÚsortedÚcoeffÚImaginaryUnitr   r+   Ú_ptÚRopenÚLopenÚopenÚ	is_finiter5   Úremover   r   )*r   rz   rd   rn   r¨   r§   ÚrvÚ_genÚ_domainÚeÚperiodÚconstÚfranger<   r¾   r½   r‚   rƒ   Úsolnsr²   ÚsingularitiesÚ	include_xÚdiscontinuitiesÚcritical_pointsr>   ÚsiftedÚ	make_realÚcoeffIÚcheckÚim_solÚaÚzÚstartÚendÚvalid_startÚvalid_zÚptrP   Úsol_setsr«   Ú_validr±   s*   ``                                       @rJ   rt   rt     s  ú€ õr -à×ÑœŸ™Ó  EÑ)Ü!¤*ð ."ó ##ó $ð 	$ð 
”q—w‘wÑ	Ü(Øˆc˜e°
ô<ß<H¹LÈÓ<Pð 	áØ×!Ñ! #Ó&ˆBØˆ	àð
 €DØ€GØ
×Ñ˜uÑ$Ü�Z‰ZˆÙ#ˆrÐ?¨×)9Ñ)9¸$Ó)?Ð?Ø	×	Ñ	Ð	%Ü�E¨Ô.ˆð	Ø—=‘= $¨ Ó-ˆDð 
€BàŒq�v‰v�~ØŠà	”—‘‰Ü�Z‰ZŠð �H‰H�t—x‘xÑˆÜ˜Q Ó$ˆØ”Q—V‘VÒÜ˜1“ˆAØ—I‘I˜a “OˆEØœŸ™‰Ø’Øœ!Ÿ'™'Ò!Ü—Z‘Z’ØÑÜ# A s¨FÓ3ˆFà—+‘+ˆCØ�kÑ!Ø—9‘9˜VŸZ™Z¨Ô+Ø‘BØŸ™ 6§:¡:¨qÔ1ÜŸ™‘Bà˜Ñ#Ø—9‘9˜VŸZ™Z¨Ô+Ø‘BØŸ™ 6§:¡:¨qÔ1ÜŸ™�Bà—z‘z 6§:¡:�ˆCØ�S‰yœAŸJ™JÑ&Ü! ! V¨U°DÓ9×CÑCÀGÓL�Ø �à‰:Ø×#Ñ#Ó%‰DˆAˆqð8Ø˜aŸn™nÑ,´°Q·^±^Ó1DÀqÒ1HÜ$Ð$ô    3¨Ó/�Ø�=ä$Ð$ð !ô $ A›ˆJöAð6 ˆMÙ˜D #Ó&ò >�Ø×$Ñ$¤W¨Q°°VÓ%<Õ=ð>áÜ*¨:°s¸FÓC�à˜tŸ{™{Ð*ÒB¨t¯{©{¸dÑ/BˆIðUÜ"% f§o¡oÜ˜fŸj™j¨&¯*©*Ó5ñ'6ó #7�ô #,¨e°mÑ.CÄdØ#óG%ñ /%ð #'ß'3¡|Ü˜VŸZ™Z¨¯©Ø—J‘J fÐ,¨f¯j©jÀÐ.FóHó(Ið  ô Ñ<¨OÔ<Ô<Ü" ?¸dÔCÀAÑF‘Eä! /Ñ3OÓP�FØ˜d’|ô 2Ð1ð2Ø & t¡˜Ü˜u›:¨š>Ü$*¨5£M˜Eô Ÿ™ˆIØ$×*Ñ*¬1¯?©?Ó;Ð;�ÄÇÁÓFØ�Ü"›�ð"Ü  ¨¨fÓ5�AÜ% a¬Ô2Ø!"ò 7˜AØ ¨Ò5¹%À½(Àq×GYÓGYØ &¬)°A«,Ñ 6¡ñ7ð &'§U¡U¨A¯E©E˜s˜Ü!'¨¼)ÀC».Ñ(HÓ!Iò &˜AÙ*/°«,˜KØ$¨š|Ù*/°«( Ü%(¨°£] Ø#%¨]Ñ#:¸r×?RÒ?RÑW\Ð]_ÔW`Ù'2±wØ(.´(¸5À!Ó2DÑ(D©Ù)4Ø(.´(·.±.ÀÈÓ2JÑ(J©Ù)0Ø(.´(·.±.ÀÈÓ2JÑ(J©à(.´(·-±-ÀÀqÓ2IÑ(I¨Ø$%™Eð&ð "/ò 3˜AØ"¤i°£lÑ2™Fð3ð œQŸZ™ZÑ'Ü$¥Zð !%§	¡	¨#¨tÕ 4²dð	1<ó &=ó >ð >ð &×/Ñ/°Ó7�	äŸ
™
�|ˆHà—J‘JˆEØ˜‰¡5¨¤<°E·O²OØ—‘¤	¨%Ó 0Ô1àò �Ø�áœ˜U C›Ô)Ø—O‘O¤H¨U°C¸¸tÓ$DÔEà˜Ñ%Ø!×(Ñ(¨Õ+à˜OÑ+Ø'×.Ñ.¨qÔ1Ù!& q£™à!*˜ÙØ Ÿ™¬	°!«Ô5à‘ð#ð& —*‘*ˆCØ�f‰}¡ s¤°·²Ø—‘¤	¨#£Ô/á”S˜ “_Ô%Ø—‘¤§¡¨e°SÓ 9Ô:àœŸ™Ò¡EØ×*Ñ*¨7Ó3‘ä!Ü˜HÐ%¨	°7ó<ß<@¹DÀÀd»Oð ñ  ˆ2Ð; R×%5Ñ%5°dÓ%;Ð;øô_ ò 	ÜœJð (ó ó ð ð	ûôp Ô 3Ð4ò 8ô *¬*ð 6ð Ÿ)™) C¬°«Ó5ñ66ó +7ó 8ð 8ð8ûô@ %ò 2Ü1Ð1ð2ûä&ò UÜ)Ð*SÓTÐTðUûôD "ò "ÜŸW™W�FØ!“Eð"ús^   Ã_4 ËA` ÎCa+ Ña Ó &b Ó'b Ó0b Ó=C:b ß4`àA aáa(á(a+ á+b âb"â!b"c                 ó”  — | j                   s|j                   s
| |z   dz  }|S | j                   r|j                   rt        j                  }|S | j                   r| j                  �|j                   r|j                  €t	        d«      ‚|j                   r|j
                  s| j                   r| j                  r|| }} |j                   r;| j                  r| dz  }|S | j
                  r| t        j                  z  }|S | dz   }|S | j                   r9|j                  r|t        j                  z  }|S |j
                  r|dz  }|S |dz
  }S )z$Return a point between start and endr*   z,cannot proceed with unsigned infinite valuesr$   )Úis_infiniter   rj   Úis_extended_positiver,   Úis_extended_negativeÚHalf)rá   râ   rå   s      rJ   rÈ   rÈ   ¦  sI  € à×Ò S§_¢_Ø�c‰k˜1‰_ˆð6 €Ið5 
×	Ò	˜sŸšÜ�V‰Vˆð2 €Ið/ ×Ò %×"<Ñ"<Ð"DØ—’ C×$<Ñ$<Ð$DÜÐKÓLÐLØ�OŠO × 8Ò 8Ø×!Ò! e×&@Ò&@Ø˜e�3ˆEð �?Š?Ø×)Ò)Ø˜1‘W�ð €Ið ×+Ò+Øœ1Ÿ6™6‘\�ð €Ið ˜Q‘Y�ð €Ið ×ÒØ×'Ò'ØœŸ™‘Z�ð
 €Ið	 ×)Ò)Ø˜‘U�ð €Ið ˜1‘W�Ø€IrL   c                 ór  — ddl m} || j                  vr| S | j                  |k(  r| j                  } | j
                  |k(  r|| j                  j                  vr| S d„ }d}t        j                  }| j
                  | j                  z
  }	 t        ||«      }|j                  «       dk(  r!| j                  |j                  «       d«      }n|s|j                  «       dkD  rt        ‚g }|�€æj                  «       }d}|j)                  |d¬«      \  }}||z  }||z  }t+        |«      }|j)                  |d¬«      \  }}|j,                  dk7  s.|j.                  |j0                  cxk(  r	 €#n n | j2                  d	vr|}t        j4                  }||z  }|j0                  r| j                  ||«      }n| j                  j                  ||«      } || j
                  «       || j                  «      z  } ||«      }||z
  D ]r  }t7        t9        |d«      ||¬
«      }t;        |t8        «      sŒ,|j
                  |k(  sŒ< ||||j                  «      t        j                   u sŒa|j=                  | «       Œt | |fD ]U  } ||||«      t        j                   u sŒ || ||«      t        j                   usŒ9|j=                  ||u r||k  n||k  «       ŒW |j=                  |«       t'        |Ž S # t        t        f$ �r= |�s+	 t        | gg|«      }n# t        $ r t        | |«      }Y nw xY w || ||«      }	|	t        j                   u r/ ||||«      t        j"                  u r|j%                  ||k  d«      } || || «      }
|
t        j                   u rG |||| «      t        j"                  u r,|j%                  | |k  d«      }|j%                  || kD  d«      }|t        j                   u rJ|	t        j                   u r||k  n||k  }|
t        j                   urt'        | |k  |«      }nt        |«      }Y �ŒPw xY w)a�  Return the inequality with s isolated on the left, if possible.
    If the relationship is non-linear, a solution involving And or Or
    may be returned. False or True are returned if the relationship
    is never True or always True, respectively.

    If `linear` is True (default is False) an `s`-dependent expression
    will be isolated on the left, if possible
    but it will not be solved for `s` unless the expression is linear
    in `s`. Furthermore, only "safe" operations which do not change the
    sense of the relationship are applied: no division by an unsigned
    value is attempted unless the relationship involves Eq or Ne and
    no division by a value not known to be nonzero is ever attempted.

    Examples
    ========

    >>> from sympy import Eq, Symbol
    >>> from sympy.solvers.inequalities import _solve_inequality as f
    >>> from sympy.abc import x, y

    For linear expressions, the symbol can be isolated:

    >>> f(x - 2 < 0, x)
    x < 2
    >>> f(-x - 6 < x, x)
    x > -3

    Sometimes nonlinear relationships will be False

    >>> f(x**2 + 4 < 0, x)
    False

    Or they may involve more than one region of values:

    >>> f(x**2 - 4 < 0, x)
    (-2 < x) & (x < 2)

    To restrict the solution to a relational, set linear=True
    and only the x-dependent portion will be isolated on the left:

    >>> f(x**2 - 4 < 0, x, linear=True)
    x**2 < 4

    Division of only nonzero quantities is allowed, so x cannot
    be isolated by dividing by y:

    >>> y.is_nonzero is None  # it is unknown whether it is 0 or not
    True
    >>> f(x*y < 1, x)
    x*y < 1

    And while an equality (or inequality) still holds after dividing by a
    non-zero quantity

    >>> nz = Symbol('nz', nonzero=True)
    >>> f(Eq(x*nz, 1), x)
    Eq(x, 1/nz)

    the sign must be known for other inequalities involving > or <:

    >>> f(x*nz <= 1, x)
    nz*x <= 1
    >>> p = Symbol('p', positive=True)
    >>> f(x*p <= 1, x)
    x <= 1/p

    When there are denominators in the original expression that
    are removed by expansion, conditions for them will be returned
    as part of the result:

    >>> f(x < x*(2/x - 1), x)
    (x < 1) & Ne(x, 0)
    r   r¦   c                 óœ   — 	 | j                  ||«      }|t        j                  u r|S |dvry |S # t        $ r t        j                  cY S w xY w)N©TF)r­   r   ÚNaNrž   )ÚierP   r�   r¯   s       rJ   Úclassifyz#_solve_inequality.<locals>.classify  sN   € ð	Ø—‘˜˜1“ˆAØ”A—E‘E‰zØ�Ø˜-Ñ'ØØˆHøÜò 	Ü—5‘5ŠLð	ús   ‚%/ ¨/ ­/ ¯AÁ
ANr$   T)Úas_AddF)r#   r"   )Úlinear)r¹   r§   r¿   rh   r9   rg   r   r7   r   Údegreer�   r-   r3   r   r…   rt   r/   r1   r­   r   Úas_independentr   Úis_zeroÚis_negativeÚis_positiveri   rk   Ú_solve_inequalityr   r+   r5   )rñ   rP   rô   r§   rò   rÎ   Úoor   rO   ÚokooÚoknoorŒ   rÑ   rh   ÚbÚaxÚefrß   Úbeginning_denomsÚcurrent_denomsrƒ   Úcr�   s                          rJ   rú   rú   Ç  sÓ  € õT -Ø�—‘ÑØˆ	Ø	‡v�v�‚{Ø�[‰[ˆØ	‡v�v�‚{�q §¡× 3Ñ 3Ñ3Øˆ	òð 
€BÜ	
�‰€BØ�6‰6�B—F‘F‰?€DðÜ��q‹MˆØ�8‰8‹:˜Š?Ø—‘˜Ÿ™› aÓ(‰BÙ˜AŸH™H›J¨šNä%Ð%ð0 €EØ	�zØ�I‰I‹Kˆð
 ˆØ× Ñ  ¨4Ð Ó0‰ˆˆ2Ø	ˆQ‰ˆØˆq‰ˆÜ˜!‹_ˆØ× Ñ  ¨5Ð Ó1‰ˆˆ1Ø�I‰I˜ÒØ—‘Ø—‘ô&Ø!%ó&à—	‘	 Ñ-ØˆAÜ—‘ˆAØˆq‰ˆØ�=Š=Ø—‘˜˜C“‰Bà—‘×!Ñ! ! SÓ)ˆBñ " "§&¡&›>©F°2·6±6«NÑ:ÐÙ ›ˆØ! NÑ2ò 	%ˆAÜ!¤" Q¨£(¨A°fÔ=ˆAÜ˜!œRÕ  Q§U¡U¨a£ZÙ˜B  1§5¡5Ó)¬Q¯V©VÒ3à—L‘L ! Õ$ð	%ð �#�r�ò 	:ˆAÙ˜˜Q Ó"¤a§f¡fÒ,Ù˜R  AÓ&¬a¯f©fÒ4Ø—‘ a¨2¡g˜Q šU°1°q±5Õ9ð	:ð
 
‡L�L�ÔÜ�ˆ;ÐøôA Ô0Ð1ó Úð8Ü1°B°4°&¸!Ó<‘øÜ"ò 8Ü0°°QÓ7’ð8úñ ˜B  2Ó&ˆDØ”q—v‘v‰~¡(¨2¨q°"Ó"5¼¿¹Ñ"@Ø—W‘W˜Q ™V TÓ*�Ù˜R  R CÓ(ˆEØœŸ™‘Ù˜R  R CÓ(¬A¯G©GÑ3Ø—W‘W˜b˜S 1™W dÓ+�Ø—W‘W˜Q " ™W dÓ+�Ø”Q—V‘V‰|Ø"&¬!¯&©&¡.�a˜2’g°q¸2±v�Ø¤§¡Ñ&Ü˜b˜S 1™W bÓ)‘Bä�T“
ˆAúð+ús8   Â
AK) Ë)P6Ë=LÌP6ÌL$Ì!P6Ì#L$Ì$DP6Ð5P6c           
      óÀ  ‡— i i }}g }| D �]_  }|j                   |j                  }}|j                  t        «      }t	        |«      dk(  r|j                  «       Šnh|j                  |z  }	t	        |	«      dk(  r7|	j                  «       Š|j                  t        t        |d|«      ‰«      «       Œ¤t        t        d«      «      ‚|j                  ‰«      r$|j                  ‰g «      j                  ||f«       Œí|j                  ˆfd„«      }
|
r7t        d„ |
D «       «      r%|j                  ‰g «      j                  ||f«       �Œ:|j                  t        t        |d|«      ‰«      «       �Œb |j!                  «       D ��cg c]  \  }}t#        |g|«      ‘Œ }}}|j!                  «       D ��cg c]  \  }}t%        ||«      ‘Œ }}}t'        ||z   |z   Ž S c c}}w c c}}w )Nr$   r   zZ
                    inequality has more than one symbol of interest.
                    c                 ó�   •— | j                  ‰«      xr3 | j                  xs% | j                  xr | j                  j                   S r‰   )ru   Úis_Functionr’   r“   r”   )Úurz   s    €rJ   r¸   z&_reduce_inequalities.<locals>.<lambda>“  s;   ø€ Ø—‘�c“
ò DØ—‘ÒB §¡Ò!B°!·%±%×2BÑ2BÐ.Bð rL   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr‰   )r+   r   ©r‹   r�   s     rJ   r�   z'_reduce_inequalities.<locals>.<genexpr>–  s   è ø€ Ò!I¸¤*¨Q´×"4Ñ!Iùs   ‚)rg   ri   Úatomsr   rÀ   Úpopr¿   r5   rú   r   r3   r   Úis_polynomialÚ
setdefaultÚfindrÄ   Úitemsr…   r¤   r   )r¡   ÚsymbolsÚ	poly_partÚabs_partÚotherÚ
inequalityr   r<   ÚgensÚcommonÚ
componentsrz   ry   Úpoly_reducedÚabs_reduceds              `   rJ   Ú_reduce_inequalitiesr  t  sÂ  ø€ ð ˜bˆx€IØ€Eà"ó Oˆ
à—N‘N J×$5Ñ$5ˆcˆð
 �z‰zœ&Ó!ˆäˆt‹9˜Š>Ø—(‘(“*‰Cà×&Ñ&¨Ñ0ˆFÜ�6‹{˜aÒØ—j‘j“l�Ø—‘Ô.¬z¸$ÀÀ3Ó/GÈÓMÔNØä)¬*ð 6ó +ó ð ð ×Ñ˜cÔ"Ø× Ñ   bÓ)×0Ñ0°$¸°Õ=àŸ™ó $Dó EˆJñ œcÑ!I¸jÔ!IÔIØ×#Ñ# C¨Ó,×3Ñ3°T¸3°KÖ@à—‘Ô.¬z¸$ÀÀ3Ó/GÈÓMÖNð?OðB R[×Q`ÑQ`ÓQb×cÁ:À3ÈÔ0°%°¸#Õ>Ðc€LÑcØIQÏÉÓIY×Z¹:¸3ÀÔ*¨5°#Õ6ÐZ€KÑZä� Ñ+¨eÑ3Ð5Ð5ùó dùÛZs   Æ GÆ-Gc                 óV  — t        | «      s| g} | D �cg c]  }t        |«      ‘Œ } } t        «       j                  | D �cg c]  }|j                  ‘Œ c}Ž }t        |«      s|g}t        |«      xs ||z  }t        d„ |D «       «      rt        t        d«      «      ‚|D �ci c]&  }|j                  €|t        |j                  d¬«      “Œ( }}| D �cg c]  }|j                  |«      ‘Œ } }|D �ch c]  }|j                  |«      ’Œ }}g }| D ]º  }t        |t        «      rF|j                  |j                  j!                  «       |j"                  j!                  «       z
  d«      }n|dvrt%        |d«      }|dk(  rŒo|dk(  rt&        j(                  c S |j                  j*                  rt-        d|z  «      ‚|j/                  |«       Œ¼ |} ~t1        | |«      }|j                  |j3                  «       D ��ci c]  \  }}||“Œ
 c}}«      S c c}w c c}w c c}w c c}w c c}w c c}}w )	aE  Reduce a system of inequalities with rational coefficients.

    Examples
    ========

    >>> from sympy.abc import x, y
    >>> from sympy import reduce_inequalities

    >>> reduce_inequalities(0 <= x + 3, [])
    (-3 <= x) & (x < oo)

    >>> reduce_inequalities(0 <= x + y*2 - 1, [x])
    (x < oo) & (x >= 1 - 2*y)
    c              3   ó8   K  — | ]  }|j                   d u –— Œ y­w)FNr·   r	  s     rJ   r�   z&reduce_inequalities.<locals>.<genexpr>¹  s   è ø€ Ò
8¨1ˆ1×Ñ Ô&Ñ
8ùs   ‚zP
            inequalities cannot contain symbols that are not real.
            Tr©   r   rï   Fr    )r   r   rÁ   rV   r¿   Úanyrž   r   r�   r   Únamer¼   r+   r   r�   rg   r-   rh   r   r   r1   r.   r3   r5   r  r  )	r¡   r  r�   r  ÚrecastÚkeeprÎ   Úkr¯   s	            rJ   Úreduce_inequalitiesr"  ¡  s  € ô �LÔ!Ø$�~ˆØ(4Ö5 1”G˜A•JÐ5€LÐ5àŒ3‹5�;‰;°Ö>¨A˜Ÿ›Ò>Ð?€Dä�GÔØ�)ˆÜ�7‹|Ò#˜t tÑ+€GÜ
Ñ
8°Ô
8Ô8Üœ
ð $ó ó ð 	ð ö5Ø˜×+Ñ+Ð3ð ”�q—v‘v¨TÔ2Ñ2ð 5€Fð 5à0<Ö=¨1�A—J‘J˜vÕ&Ð=€LÐ=Ø+2Ö3 aˆq�z‰z˜&Õ!Ð3€GÐ3ð €DØò ˆÜ�aœÔ$Ø—‘�q—u‘u—}‘}“¨¯©¯©«Ñ8¸!Ó<‰AØ�mÑ#Ü�1�a“ˆAØ�Š9ØØ�%ŠZÜ—7‘7ŠNØ�5‰5�?Š?Ü%Ø7¸!Ñ;ó=ð =à�‰�A�ðð €LØô 
˜l¨GÓ	4€Bð �;‰;¨¯©«×8¡  A˜˜1™Ó8Ó9Ð9ùòQ 6ùâ>ùò5ùâ=ùÚ3ùó0 9s"   “H¿HÂ +HÃHÃ/H Ç7H%
)T)F)9Ú__doc__rS   Úsympy.calculus.utilr   r   r   Ú
sympy.corer   Úsympy.core.exprtoolsr   Úsympy.core.relationalr   r	   r
   r   Úsympy.core.symbolr   r   Úsympy.sets.setsr   r   r   r   Úsympy.core.singletonr   Úsympy.core.functionr   Ú$sympy.functions.elementary.complexesr   Úsympy.logicr   Úsympy.polysr   r   r   Úsympy.polys.polyutilsr   Úsympy.solvers.solvesetr   r   Úsympy.utilities.iterablesr   r   Úsympy.utilities.miscr   rK   rQ   rb   r…   r¢   r¤   r0   rt   rÈ   rú   r  r"  rŠ   rL   rJ   ú<module>r3     s    ðÙ BÛ ÷ñ å Ý -ß 8Ó 8ß +ß DÓ DÝ "Ý *Ý 4Ý ß FÑ FÝ (ß 4ß 4Ý +òXòvIò"?óDXòvD;òN"ð2 7;À1Ç7Á7ÐW\ó d<òN	óBjòZ*6ðZ /1ô 9:rL   