B
    [                 @   s   d dl mZmZ d dlmZmZ d dl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edefd	d
ZdedddfddZdedefddZdS )    )print_functiondivision)ooTuple)global_assumptionsAppliedPredicate)satisfiable)And)get_known_facts_cnf)fact_registryTc             C   sx   t | ||||d}tt| ||f| }tt|  ||f| }|rL|rLd S |rX|sXdS |sd|rddS |st|sttdd S )N)use_known_facts
iterationsTFzInconsistent assumptions)get_all_relevant_factsr   r	   
ValueError)propositionassumptionscontextr   r   relevant_factsZcan_be_trueZcan_be_false r   7lib/python3.7/site-packages/sympy/assumptions/satask.pysatask   s    

r   )TNc             C   s   t  }|sJ| t}|t| tO }|r<|t| tO }dd |D }|sVt g }|rzx|D ]}|t | q`W xP|D ]H}xBt|j	 D ]4}	|	|}
||
 |t dd |
tD O }qW qW ||| fS )Nc             S   s   h | ]}|j d  qS )r   )args).0keyr   r   r   	<setcomp>2   s    z%get_relevant_facts.<locals>.<setcomp>c             S   s   g | ]}|j d  qS )r   )r   )r   r   r   r   r   
<listcomp>?   s    z&get_relevant_facts.<locals>.<listcomp>)
setZatomsr   r   r	   addr
   Zrcallr   func)r   r   r   r   exprsr   ZnewexprskeysexprZfactZnewfactr   r   r   get_relevant_facts&   s&    





r"   c             C   s\   d}t  }d }xD|t  krRt| t|||||d\}}|d7 }||krt| S qW t| S )Nr   )r   r   r      )r   r"   r	   Z	make_args)r   r   r   r   r   ir   r   r   r   r   r   E   s    
r   )Z
__future__r   r   Z
sympy.corer   r   Zsympy.assumptions.assumer   r   Zsympy.logic.inferencer   Zsympy.logic.boolalgr	   Zsympy.assumptions.ask_generatedr
   Zsympy.assumptions.sathandlersr   r   r"   r   r   r   r   r   <module>   s   