o
    *Î®c;-  ã                   @   s˜   d dl mZmZmZmZmZ d dlmZmZ d dl	m
Z
 dZdZdZdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    )Údeduce_alpha_implicationsÚapply_beta_to_alpha_routeÚrules_2prereqÚ	FactRulesÚFactKB)ÚAndÚNot)ÚraisesTFNc                     sž  dd„ ‰ ˆ ddgƒ\} }| dddhddht dƒt dƒht dƒt dƒt dƒhiks*J ‚|ddhddhddhdœks:J ‚ˆ g d	¢ƒ\} }| dddhddht dƒt dƒht dƒt dƒt dƒhiks`J ‚|ddhddhddhdœkspJ ‚ˆ d
d
gƒi i fks|J ‚ˆ ddgƒddhddht dƒt dƒht dƒt dƒhidhdhdœfks¡J ‚tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ ˆ dt dƒfdgƒ\} }| dt dƒt dƒhdt dƒhddt dƒht dƒt dƒhiksèJ ‚|ddhddhddhdœksøJ ‚ˆ t dƒdfdgƒ\} }| ddht dƒdht dƒddht dƒt dƒdhiks!J ‚|ddhddhddhdœks2J ‚ˆ g d¢ƒ\} }| dh d£dh d£dddhddht dƒt dƒht dƒt dƒt dƒht dƒt dƒt dƒt dƒht dƒt dƒt dƒt dƒt dƒhiks~J ‚|h d£h d£h d£h d£h d£dœks•J ‚ˆ ddgƒ\} }| ddd hdd ht d ƒt dƒt dƒht dƒt dƒhiks¼J ‚|dd hddhdd hd!œksÍJ ‚d S )"Nc                 S   s&   t | ƒ}tdd„ | ¡ D ƒƒ}||fS )Nc                 S   s$   i | ]\}}|d fdd„ |D ƒ“qS )Tc                 S   s   h | ]}|d f’qS )T© )Ú.0Úvr
   r
   úB/tmp/pip-target-vg8gfxp4/lib/python/sympy/core/tests/test_facts.pyÚ	<setcomp>   ó    zGtest_deduce_alpha_implications.<locals>.D.<locals>.<dictcomp>.<setcomp>r
   )r   ÚkÚSr
   r
   r   Ú
<dictcomp>   s    ÿz=test_deduce_alpha_implications.<locals>.D.<locals>.<dictcomp>)r   r   Úitems)ÚiÚIÚPr
   r
   r   ÚD   s
   ÿz)test_deduce_alpha_implications.<locals>.D©ÚaÚb©r   Úcr   r   r   ©r   r   r   )r   r   r   )r   r   ©r   r   c                      s   ˆ dt dƒfgƒS )Nr   ©r   r
   ©r   r
   r   Ú<lambda>$   s    z0test_deduce_alpha_implications.<locals>.<lambda>c                      s   ˆ ddt dƒfgƒS )Nr   r   r   r   r
   r    r
   r   r!   %   r   c                      s   ˆ ddddt dƒfgƒS )Nr   r   )r   Únar"   r   r   r
   r    r
   r   r!   &   s    
ÿ)r   r   )r   r   )r   r   )r   Úd)r#   Úe>   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$   )ÚratÚreal)Úintr'   r)   r'   r(   )r'   r(   r)   )r   r	   Ú
ValueError)r   r   r
   r    r   Útest_deduce_alpha_implications   s\   
ÿ < 
*
þ@ ÿÿ"&ÿ ýþ"ÿÿr+   c                  C   s@  t } dd„ }ddhi}tddƒdfg}| ||ƒdhg f|dƒ|dƒdœks'J ‚ddhi}tdtdƒƒdfg}| ||ƒddhg ftdƒ|dƒd|dƒiksNJ ‚dddhi}tddƒdfg}| ||ƒh d	£g f|dƒ|dƒdœksqJ ‚ddhi}tddƒd
fg}| ||ƒdhdgf|dƒ|dƒdœks“J ‚dh d	£i}tddƒdfg}| ||ƒh d	£g f|dƒ|dƒdœks¶J ‚dddhi}tdddƒd
fg}| ||ƒddhdgf|dƒ|dƒ|dƒdœksÞJ ‚ddhdhdœ}tddƒdfg}| ||ƒh d£g fdhg f|dƒ|dƒdœksJ ‚ddhdhdœ}tddƒdftddƒdfg}| ||ƒh d£g fddhg f|dƒ|dƒ|dƒdœks<J ‚dddhi}tdd
ƒdftddƒd
fg}| ||ƒh d£g ftƒ ddgf|dƒ|dƒdœkslJ ‚dddhi}tdtdƒƒdfg}| ||ƒdddhg fd|dƒtdƒ|dƒiks–J ‚tdƒtdƒtdƒhi}ttdƒdƒdfg}| ||ƒtdƒtdƒtdƒhg ftdƒ|dƒd|dƒiksÌJ ‚dddhi}tddƒtdƒfg}| ||ƒddhg f|dƒ|dƒdœksòJ ‚ddhddhdœ}tddƒdfg}| ||ƒh d£g fddhg f|dƒ|dƒdœksJ ‚d S )Nc                 S   s   t ƒ | gfS ©N)Úset)Úbidxr
   r
   r   ÚQK   s   z)test_apply_beta_to_alpha_route.<locals>.QÚxr   r   r   )r0   r   r   r   >   r   r   r   Úy)r0   r   r   r   r#   )r0   r   r%   )r0   r   r   r   r$   >   r   r   r   r#   r$   é   )r0   r   r   r   r#   Úz>   r   r   r1   r3   )r0   r   r1   r   )r0   r   r   Úp>   r   r   r   r4   )r   r   r   r-   )ÚAPPLYr/   ÚAÚBr
   r
   r   Útest_apply_beta_to_alpha_routeG   sv   
(
0ÿ
*ÿ"ÿÿÿÿ"
ÿ.
ÿ,ÿr8   c                  C   s¤   t dƒ} | jdhdhdœksJ ‚t dƒ} | jdhdhdœks J ‚t dƒ} | jdhdhdœks0J ‚t dƒ} | jdhdhdœks@J ‚t dƒ} | jd	hd
hdœksPJ ‚d S )Núa -> br   r   r   za -> !bz!a -> bz!a -> !bz!z == nzÚnzr3   )r3   r:   )r   Úprereq©Úfr
   r
   r   Útest_FactRules_parse   s   r>   c                   C   s   t tdd„ ƒ d S )Nc                   S   s   t dƒS )Nza -> !a)r   r
   r
   r
   r   r!   ¯   s    z'test_FactRules_parse2.<locals>.<lambda>)r	   r*   r
   r
   r
   r   Útest_FactRules_parse2®   s   r?   c                     s&  t g d¢ƒ‰ ‡ fdd„} | dtiƒtttttdœksJ ‚| dtiƒttttdœks+J ‚| dtiƒttd	œks8J ‚| d
tiƒd
tiksDJ ‚| dtiƒdtiksPJ ‚| dtiƒdtiks\J ‚| dtiƒttdœksiJ ‚| dtiƒtttdœkswJ ‚| d
tiƒtttdœks…J ‚| dtiƒdtiks‘J ‚d S )N)r9   zb -> czb -> dzc -> ec                    ó   t ˆ ƒ}| | ¡ |S r,   ©r   Údeduce_all_facts©ÚfactsÚkbr<   r
   r   r   µ   ó   
z test_FactRules_deduce.<locals>.Dr   r&   r   )r   r   r#   r$   r   )r   r$   r#   r$   r   r   )r   r   r#   )r   ÚTÚFÚUr    r
   r<   r   Útest_FactRules_deduce²   s    rJ   c                     s\  t ddgƒ‰ ‡ fdd„} | dtiƒtttdœksJ ‚| dtiƒdtiks&J ‚| dtiƒttdœks3J ‚| dtiƒdtiks?J ‚| d	tiƒttd
œksLJ ‚| d	tiƒd	tiksXJ ‚t g d¢ƒ‰ | dtiƒtttdœkslJ ‚| dtiƒdtiksxJ ‚| dtiƒtttdœks†J ‚| dtiƒdtiks’J ‚| d	tiƒtttdœks J ‚| d	tiƒd	tiks¬J ‚d S )Núpos -> !negú	pos -> !zc                    r@   r,   rA   rC   r<   r
   r   r   Ì   rF   z!test_FactRules_deduce2.<locals>.DÚpos)rM   Únegr3   rN   )rM   rN   r3   )rM   r3   )rK   zneg -> !posrL   z	neg -> !z©r   rG   rH   r    r
   r<   r   Útest_FactRules_deduce2È   s   rP   c                     s  t dgƒ‰ ‡ fdd„} | dtiƒdtiksJ ‚| dtiƒtttdœks%J ‚| dtiƒttdœks2J ‚| dtiƒttd	œks?J ‚| ttd
œƒtttdœksNJ ‚| ttdœƒtttdœks]J ‚| ttd	œƒtttdœkslJ ‚| ttd
œƒtttdœks{J ‚| ttd
œƒtttdœksŠJ ‚d S )Nzreal == pos | nposc                    r@   r,   rA   rC   r<   r
   r   r   ç   rF   z)test_FactRules_deduce_multiple.<locals>.Dr(   )r(   rM   ÚnposrM   ©r(   rM   rQ   )r(   rQ   )rM   rQ   rO   r    r
   r<   r   Útest_FactRules_deduce_multipleã   s   
"rS   c                     sà  t dgƒ‰ ‡ fdd„} | dtiƒdtiksJ ‚| dtiƒttttdœks&J ‚| dtiƒttdœks3J ‚| dtiƒttd	œks@J ‚| d
tiƒttdœksMJ ‚| tttdœƒttttdœks^J ‚| ttdœƒttdœkslJ ‚| ttd	œƒttd	œkszJ ‚| ttdœƒttdœksˆJ ‚| tttdœƒttttdœks™J ‚| tttdœƒttttdœksªJ ‚| tttdœƒttttdœks»J ‚| tttdœƒttttdœksÌJ ‚| tttdœƒttttdœksÝJ ‚| tttdœƒttttdœksîJ ‚d S )Nzreal == neg | zero | posc                    r@   r,   rA   rC   r<   r
   r   r   ý   rF   z*test_FactRules_deduce_multiple2.<locals>.Dr(   ©r(   rN   ÚzerorM   rN   ©r(   rN   rU   )r(   rU   rM   rR   )rN   rU   rM   )r(   rU   rM   )r(   rN   rM   )r(   rN   rU   rO   r    r
   r<   r   Útest_FactRules_deduce_multiple2ú   s>   
ÿÿÿÿÿÿÿrW   c                  C   s^   t g d¢ƒ} t| ƒ}| ttdœ¡ |ttdœksJ ‚| dti¡ |ttttdœks-J ‚d S )N)úreal  == neg | zero | posúneg   -> real & !zero & !posúpos   -> real & !zero & !negrV   rU   rT   )r   r   rB   rG   rH   )r=   Úbaser
   r
   r   Útest_FactRules_deduce_base  s   r\   c                  C   sX   t g d¢ƒ} d| jd v sJ ‚d| jd v sJ ‚d| jd v s!J ‚d| jd v s*J ‚d S )N)rX   rY   rZ   znneg  == real & !negznpos  == real & !pos)rQ   T)rN   T)ÚnnegT)rM   T)rU   T)r   Úfull_implicationsr<   r
   r
   r   Útest_FactRules_deduce_staticext-  s
   r_   )Úsympy.core.factsr   r   r   r   r   Úsympy.core.logicr   r   Úsympy.testing.pytestr	   rG   rH   rI   r+   r8   r>   r?   rJ   rP   rS   rW   r\   r_   r
   r
   r
   r   Ú<module>   s     <V$