�
��g�� � �V � d Z ddlZddlmZmZmZ ddlmZ ddlm Z ddl
mZmZm
Z
mZ ddlmZmZ ddlmZmZmZmZ dd lmZ dd
lmZ ddlmZ ddlmZ dd
lm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, d� Z-d� Z.d� Z/dd�Z0d� Z1d� Z2dej3 dfd�Z4d� Z5d d�Z6d� Z7g fd�Z8dS )!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 � � st d� � �| � � � j rkt | � � � d|� � }|t j u r
t j gS |t j u r
t j
gS t d|z � � �| � d�� � g }}|dk r/|D ]*\ }}t ||� � }|� |� � �+�n�|dk rOt j }|t j dfgz D ].\ } }t || d d � � }|� |� � | }�/�nQ| � � � dk rd}
nd
}
d\ }}|dk rd}n3|d
k rd
}n*|dk rd\ }}n|dk rd\ }}nt d|z � � �t j d }
} t% |� � D ]�\ }}|dz r6|
|k r'|� dt || | |
� � � � |
|| }
} }
�@|
|k r-|s+|� dt || d |
� � � � |d }
} �s|
|k r&|r$|� dt ||� � � � ��|
|k r0|� dt 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&