a
    kºhTÂ  ã                	   @   sn  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 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mZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ d dlKmLZL d dlMmNZNmOZOmPZP d dlQmRZRmSZSmTZT ed\ZUZVZWZXed\	ZYZZZ[Z\Z]Z^Z_Z`Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhd d! Zid"d# Zjd$d% Zkd&d' Zld(d) Zmd*d+ Znd,d- Zod.d/ Zpd0d1 Zqd2d3 Zrd4d5 Zsd6d7 Ztd8d9 Zud:d; Zvd<d= Zwd>d? Zxd@dA ZydBdC ZzdDdE Z{dFdG Z|dHdI Z}dJdK Z~dLdM ZdNdO ZdPdQ ZdRdS ZdTdU ZdVdW ZdXdY ZdZd[ Zd\d] Zd^d_ Zd`da Zdbdc Zddde Zdfdg Zdhdi Zdjdk Zdldm ZeOdndo Zdpdq Zdrds Zdtdu Zdvdw Zdxdy Zdzd{ 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d Z¡dd Z¢dd Z£ePd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¬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 )œé    )ÚQ)Úrefine)Úoo)ÚEqualityÚEqÚNe)ÚS)ÚDummyÚsymbols)Ú	Piecewise)ÚcosÚsin)ÚIntervalÚUnion)ÚContains©Úsimplify)/ÚAndÚBooleanÚ
EquivalentÚITEÚImpliesÚNandÚNorÚNotÚOrÚPOSformÚSOPformÚXorÚXnorÚ	conjunctsÚ	disjunctsÚdistribute_or_over_andÚdistribute_and_over_orÚeliminate_implicationsÚis_nnfÚis_cnfÚis_dnfÚsimplify_logicÚto_nnfÚto_cnfÚto_dnfÚto_int_reprÚbool_mapÚtrueÚfalseÚBooleanAtomÚ
is_literalÚterm_to_integerÚtruth_tableÚ
as_BooleanÚto_anfÚis_anfÚdistribute_xor_over_andÚ
anf_coeffsÚANFformÚbool_mintermÚbool_maxtermÚbool_monomialÚ_check_pairÚ_convert_to_varsSOPÚ_convert_to_varsPOSÚ	ExclusiveÚgateinputcount)ÚCNF)ÚraisesÚXFAILÚslow)ÚcombinationsÚpermutationsÚproductzA:Dza:e w:zc                   C   s€   t t@ tt tksJ t tB tt tks,J t t@ tB ttt ttksLJ t t? tt tksbJ t t> ttt ksxJ t  tt ksJ t tA tt tks J dS )z)Test that |, & are overloaded as expectedN)ÚAÚBr   r   ÚCr   r   r   © rL   rL   úL/var/www/auris/lib/python3.9/site-packages/sympy/logic/tests/test_boolalg.pyÚtest_overloading!   s     rN   c                  C   sÚ  t  tu sJ t ttksJ t dtu s.J t dtu s>J t ddtu sPJ t ddtu sbJ t ddtu stJ t dttksJ t dttu sJ t dddtu s¬J t ddttksÀJ t ddttu sÔJ t dttksæJ ttdd  t tdk tdktu sJ tdk} t | | j| jks0J ttkttk ttkttkf\}}}}t ||||t ||ksrJ dd t||||fD t ||hksJ t t t	t
dt	tdt tt
dt	tdtu sÖJ d S )	NTFé   c                   S   s
   t dtS ©Né   )r   rI   rL   rL   rL   rM   Ú<lambda>;   ó    ztest_And.<locals>.<lambda>c                 S   s   h | ]}t | qS rL   )r   ©Ú.0ÚirL   rL   rM   Ú	<setcomp>A   rS   ztest_And.<locals>.<setcomp>r   )r   r.   rI   r/   rC   Ú	TypeErrorÚ	canonicalrJ   rG   r   ÚaÚbr   Úc©ÚeÚgÚlÚgeÚlerL   rL   rM   Útest_And-   s*    $,rc   c                  C   st  t  tu sJ t ttksJ t dtu s.J t dtu s>J t ddtu sPJ t ddtu sbJ t ddtu stJ t dttu sJ t dttksJ t dddtu s¬J t ddttu sÀJ t ddttksÔJ t dttu sæJ ttdd  t tdk tdktu sJ tdk} t | | j| ks.J ttkttk ttkttkf\}}}}t ||||t ||kspJ d S )NTFrO   c                   S   s
   t dtS rP   )r   rI   rL   rL   rL   rM   rR   S   rS   ztest_Or.<locals>.<lambda>)r   r/   rI   r.   rC   rX   rY   rJ   r]   rL   rL   rM   Útest_OrE   s&    $rd   c                  C   s  t  tu sJ t ttksJ t tttu s0J t dtttu sDJ t ttttttks\J t dddttt tt ks|J t dtu sJ t dtu sJ t ddtu s®J t ddtu sÀJ t ddtu sÒJ t dtt ksæJ t dttksøJ t dddtu sJ t ddtt ks&J t ddttks<J tt ttt sRJ t ttt ttt ttttksxJ t ttt ttt ttksJ t tdk tdktt ddt  krÒt ddtksØn J tdk} t | | jt dd  krt ddksn J d S ©NTFrO   r   )	r   r/   rI   r.   rJ   Ú
isinstancerK   ÚDrY   )r^   rL   rL   rM   Útest_Xor[   s,     &">rh   c                  C   s.   t tA } |  t¡t tB t  t B @ ks*J d S ©N)ÚxÚyÚrewriter   ©ÚexprrL   rL   rM   Útest_rewrite_as_Andt   s    ro   c                  C   s.   t tA } |  t¡t t @ tt  @ B ks*J d S ri   )rj   rk   rl   r   rm   rL   rL   rM   Útest_rewrite_as_Ory   s    rp   c                  C   s<   t t@ tt @ B } |  t¡t t@  tt @  @  ks8J d S ri   )rk   ÚzÚwrl   r   rm   rL   rL   rM   Útest_rewrite_as_Nand~   s    rs   c                  C   s4   t tt B @ } |  t¡t  tt B  B  ks0J d S ri   )rq   rk   rr   rl   r   rm   rL   rL   rM   Útest_rewrite_as_Nor   s    rt   c                   C   sb   t tdd  tdtu sJ tdtu s.J tdtu s>J tdtu sNJ tdtu s^J d S )Nc                   S   s
   t ddS ©NTF)r   rL   rL   rL   rM   rR      rS   ztest_Not.<locals>.<lambda>TFr   rO   rQ   )rC   rX   r   r/   r.   rL   rL   rL   rM   Útest_Not   s    rv   c                   C   sÞ   t  tu sJ t tt ks J t dtu s0J t dtu s@J t ddtu sRJ t ddtu sdJ t ddtu svJ t dtt ksJ t dttu sJ t dddtu s°J t ddtt ksÆJ t ddttu sÚJ d S ru   )r   r/   rI   r.   rL   rL   rL   rM   Ú	test_Nand   s    rw   c                   C   sÜ   t  tu sJ t tt ks J t dtu s0J t dtu s@J t ddtu sRJ t ddtu sdJ t ddtu svJ t dttu sJ t dtt ksJ t dddtu s°J t ddttu sÄJ t ddttu sØJ d S ru   )r   r.   rI   r/   rL   rL   rL   rM   Útest_Nor    s    rx   c                   C   s"  t  tu sJ t tt ks J t tttu s2J t dtttu sFJ t tttttt ks`J t dtu spJ t dtu sJ t ddtu sJ t ddtu s€J t ddtu s¶J t dttksÈJ t dtt ksÜJ t dddtu sðJ t ddttksJ t ddtt ksJ d S ru   )r   r.   rI   r/   rL   rL   rL   rM   Ú	test_Xnor¯   s    ry   c                   C   sê   t tdd  tddtu s J tddtu s2J tddtu sDJ tddtu sVJ tdttu shJ tddtu szJ tddtu sJ tt? tt> ks J tdk tdk? tdkksŒJ tdk tjtk? tu sÖJ tt? tu sæJ d S )Nc                   S   s   t tttS ri   )r   rI   rJ   rK   rL   rL   rL   rM   rR   Â   rS   ztest_Implies.<locals>.<lambda>TFr   rO   )	rC   Ú
ValueErrorr   r.   r/   rI   rJ   r   ÚOnerL   rL   rL   rM   Útest_ImpliesÁ   s    r|   c                   C   s  t ttt tt  kr(t tttks.n J t  tu s<J t ttt t  krZtu s`n J t ddt dd  krtu sn J t ddt dd  krŠtu s¬n J t tdtksŸJ t tdttksÔJ t ttdtt@ ksìJ t ttdt t @ ks
J t dttksJ t dtttks6J t tt ttt t tttks\J t tdk tdktu sxJ t tdk tdkdtu sJ t tdk tdkdtu sŽJ t tdk tjtkt dd  krèt ddksîn J t t	ttt	tttu sJ d S re   )
r   rI   rJ   r.   r/   r   rK   r   r{   r   rL   rL   rL   rM   Útest_EquivalentÐ   s"    .$&&&:r}   c                   C   sT   t dddtu sJ t dddtu s(J t dddtu s<J t dddtu sPJ d S )NFT)r@   r.   r/   rL   rL   rL   rM   Útest_Exclusiveä   s    r~   c                   C   sÒ   t ttt tt tt t¡du s*J ttt tt? tt? @ ¡du sNJ tt B t tB @  t t @ tt@ B ¡du sJ tt?  t t ? ¡du sJ ttt? ?  ttt? ? ¡du sÀJ tt	dd  d S )NTFc                   S   s   t t@  t tk¡S ri   )rI   rJ   ÚequalsrL   rL   rL   rM   rR   ñ   rS   ztest_equals.<locals>.<lambda>)
r   r   rI   rJ   r   r   r   rK   rC   ÚNotImplementedErrorrL   rL   rL   rM   Útest_equalsë   s    *$2"r   c               	      sì	  g d¢g d¢g d¢g d¢g} g d¢g d¢g d¢g d¢g}t tttg| tttttttttksjJ tt tttg|ttttttttttks€J ttttg| | tu sÀJ t tttg| | tu sÜJ t t	 t	 t	 g| | tu sþJ g d	¢g d
¢g d¢g d¢g d¢g g d¢g d¢g d¢g}t t
tttg |ttttttt
ttksnJ tt
tttg |tttt
ttksJ g d¢ g d¢}t t
tttg |ttttttt
ttksäJ tt
tttg |tttt
ttksJ dg d
¢dg d¢g d¢g dg d¢dg}t t
tttg |ttttttt
ttksrJ tt
tttg |tttt
ttks J dtdtdig dg d¢dg}t t
tttg |ttttttt
ttksöJ tt
tttg |tttt
ttks$J tdtdidg g d¢g}g d¢g tt fdd tt fdd ttdd  ttttt}ttttB @ |ks€J ttt@ tt@ B |ksÂJ ttttttttksäJ tttttttttttttksJ ttttdttttdtks@J ttttdttttdtksjJ tttttttttttksJ tttttdttttdttttdtttksÖJ t t @ t @ t t @ t@ B }tt|}t|tt @ t @ ks J ttdd  ttttktttk tttkksXJ ttttktttktttkksJ ttttktttk tttkks¬J td\	}}}}}}	}
}}||@ |@ |@ |@ |	@ |
@ |@ |@ ||@ |@ |@ |@ |	@ |
@ |@ | @ B }t||ks"J t||@ |B |B ||@ d||B ksLJ t ttgddgg}t ttgddgg|ks~J tttgddgg|ksJ ttd d  t tgdggdggtu sÊJ t tgdggdggtu sêJ t tgg g tu sJ ttd!d  ttgdggdggtu s0J ttgdggdggtu sPJ ttgg g tu shJ ttt@ tt@ B tttttksJ tttttd"ks®J tttttd#ksÊJ ttttdttttttdttdks J tttd dttt ¡ tttdttdks:J tttd dttt ¡ tttdtttkstJ tttd dttt ¡ tttdttdks®J tttd dtttt ttt d ¡ tttdttd$ttdk	s J tttd dttd d ¡ ttdk	s2J tttd dttd d ¡ ttdk	sdJ tttd dttd d ¡ d"k	sJ tttd dttd d ¡ tttdttdk	sÎJ tttt d#k	sèJ d%S )&z1
    Test working of simplification methods.
    ©r   r   rO   ©r   rO   rO   ©rO   r   r   )rO   rO   r   )r   r   r   ©r   rO   r   ©rO   r   rO   ©rO   rO   rO   ©r   r   r   rO   ©r   r   rO   rO   ©r   rO   rO   rO   ©rO   r   rO   rO   ©rO   rO   rO   rO   )r   r   r   r   )r   r   rO   r   ©r   rO   r   rO   )rO   é   é   é   é   )r   rQ   é   rO   r   r   r   c                      s   t ttttg S ri   )r   rr   rj   rk   rq   rL   ©ÚmintermsrL   rM   rR   #  rS   z-test_simplification_boolalg.<locals>.<lambda>c                      s   t ttttg S ri   ©r   rr   rj   rk   rq   rL   r   rL   rM   rR   $  rS   c                   S   s   t ttttgdgS )NZabcdefgr   rL   rL   rL   rM   rR   &  rS   rQ   r   c                   S   s   t tttB @ ddS )NZblabla)Úform)r(   rI   rJ   rK   rL   rL   rL   rM   rR   7  rS   za b c d e f g h j)Zdontcarec                   S   s   t tgdggdggS ©NrO   )r   rj   rL   rL   rL   rM   rR   L  rS   c                   S   s   t tgdggdggS r   )r   rj   rL   rL   rL   rM   rR   Q  rS   FTéÿÿÿÿN)r   rj   rk   rq   r   r   r   r   r.   r	   rr   rC   rz   rX   rI   rJ   rK   r(   r   r   r   r   r
   r/   r   r   r   )Zset1Zset2Ú	dontcaresZansr[   r^   rZ   r\   ÚdÚfr_   ÚhÚjrn   rL   r   rM   Útest_simplification_boolalgô   sÊ    2 ÿ"ÿÿÿ.ÿÿ.ÿÿÿ.ÿÿ.

"ÿ
***$ÿ
"
***"$ÿ*    *6:::,ÿ
22, ÿ
r   c               
   C   sè  g d¢g d¢g d¢g d¢g d¢g} t tttttttifksDJ t tttttg| tttttg| t	t
tttt
ttttttttttttifks¢J t ttttgg d¢gttttgg d¢gdksØJ ttttgg d¢g d¢g}ttttgg d¢g d	¢g}t |||ttttifks0J t tttttt dksRJ t t	ttt
ttd
u srJ t t	ttt	tttd
u sJ t tttttttt dksºJ t tttttttttt dksäJ d
S )z,
    Test working of bool_map function.
    r   r   r   r   r   r   Fr   r   N)r-   r   rZ   r   rr   rj   rk   rq   r   r   r   r[   r\   r   )r   Z	function1Z	function2rL   rL   rM   Útest_bool_maph  s0    ÿ"ÿ2þÿÿÿ
" "&r   c                   C   st   t tdtksJ t tddtks&J t tdtu s8J t tddtu sLJ ttdtu s^J ttdtkspJ dS )zBTest that mixing symbols with boolean values
    works as expectedTFN)r   rI   r/   r   r.   rL   rL   rL   rM   Útest_bool_symbol  s    r    c                   C   sÞ   t dtdu sJ t ttdu s$J ddks0J dtks<J dtkdu sLJ ddksXJ dtksdJ dtkdu stJ tjdu sJ tt@ jsJ ttB jsJ t jsªJ ttA jsžJ tjt ttksÌJ t ttsÚJ d S re   )rf   r   r.   r/   Z
is_BooleanrI   rJ   rL   rL   rL   rM   Útest_is_boolean  s    r¡   c                   C   s   t t@  t d¡tksJ t t@  t d¡tu s0J t t@  td¡t ksHJ t t@  td¡tu s`J t t@  t dtdi¡tu s~J t tB  t d¡tu sJ t tB  t d¡tks®J t tB  td¡tu sÆJ t tB  td¡t ksÞJ t tB  t dtdi¡tu süJ d S ru   )rI   rJ   Úsubsr/   r.   rL   rL   rL   rM   Ú	test_subs  s    r£   c                  C   s>   t ttd\} }| |@ || @ ks&J | |B || B ks:J dS )z$Test for commutativity of And and OrzA,BN)Úmapr   r
   )rI   rJ   rL   rL   rM   Útest_commutative²  s    r¥   c                   C   s    t t@ t@ t tt@ @ ksJ dS )zTest for associativity of AndN©rI   rJ   rK   rL   rL   rL   rM   Útest_and_associativityº  s    r§   c                   C   s    t tB tB t ttB B ksJ d S ri   rŠ   rL   rL   rL   rM   Útest_or_assicativityÀ  s    rš   c                  C   s   t  } |   | ksJ d S ri   )r   )rZ   rL   rL   rM   Útest_double_negationÄ  s    r©   c                   C   s   t tttddt tB ks J t tttt? ? ttttttttksTJ t tttttt tB t tB @ t tB @ t tB @ ksJ d S )NF©Úevaluate)	r$   r   rI   rJ   rK   r   r   r   rg   rL   rL   rL   rM   Útest_eliminate_implicationsË  s     ÿÿ&ÿr¬   c                   C   sx   t tt@ t@ ttthksJ t ttB t@ ttB thks>J t tthksPJ t ddhksbJ t ddhkstJ d S ru   )r    rI   rJ   rK   rL   rL   rL   rM   Útest_conjunctsÓ  s
     r­   c                   C   sz   t ttB tB ttthksJ t ttB t@ ttB t@ hks@J t tthksRJ t ddhksdJ t ddhksvJ d S ru   )r!   rI   rJ   rK   rL   rL   rL   rM   Útest_disjunctsÛ  s
    "r®   c                   C   s   t ttttttttttttks.J tttttttttttttks\J tttttttttttttksJ d S ri   )	r#   r   r   rI   rJ   rK   r"   r7   r   rL   rL   rL   rM   Útest_distributeã  s    ..r¯   c               	   C   s  t d\} }}tt| |t| |ks*J tt| |t| |t| |ksNJ ttt| |t| ||t| d| |@ ddksJ ttt| |t| |t| |t| |dksŽJ tt| t	|t| |t| |t||tdt||t| ||ddksJ tt| |t| |ks J tt	| t| dddks@J tt| |tdt| |ddkshJ tt| |t| |dt| |ddksJ tt| |t| dt| |ddksŸJ tt
| |t| |dddksâJ tt| |B | |? ddtdtt| |t| |ddks"J tt| |A | |@ ddtdtt| |t| |ddksbJ t| | |A | A  A dksJ d S )Núx,y,zTF©Zremove_true)Údeep)r
   r5   r   r   r   r   r   r   r   r   r   ©rj   rk   rq   rL   rL   rM   Útest_to_anfé  s.    $ÿ2(ÿ
 (,*$ÿ
ÿ
rŽ   c                   C   s  t ttu sJ t ttu s J t ttks0J t tt B tB tu sJJ t tt @ t@ tu sdJ t tt? t tB ks~J t ttttt tB t tB @ t tB @ ks°J t ttA tA ttB tB t t B tB @ tt B t B @ t tB t B @ ksJ t ttttt tB ttB @ ks*J t tttB tB t t @ t @ ksVJ t ttt@ t@ t t B t B ksJ t ttt? tt @ ks¢J t tttttt	t
tttt
t t t ksÜJ t tttA tA t tB tB tt B tB @ ttB t B @ t t B t B @ ks2J t tttttt t B tt B @ ksbJ t tt? tt? A tt @ t t@ B ksJ t tt? tt? A dt t B tB tB tt @ t t@ B @ ksÔJ ttdd  ¡ tksîJ ttdd  ¡ t ks
J ttdd  d S )NFrO   r   c                   S   s   t tdk dgt ¡ S r   )r   rI   rJ   r)   rL   rL   rL   rM   rR     rS   ztest_to_nnf.<locals>.<lambda>)r)   r.   r/   rI   rJ   r   rK   r   r   r   r   rC   rX   rL   rL   rL   rM   Útest_to_nnf   s4    2:ÿ
(,, ::ÿ
0.&ÿ
rµ   c                	   C   sš  t ttB  tttttks$J t tt@ tB tttttttksNJ t tt? t tB kshJ t ttt@ ? t tB t tB @ ksJ t tttB @ t ttB @ B dttB ksŒJ t tt@ tttksÖJ t ttttttttttttksJ t tttt@ t tB t tB @ t t B tB @ ksDJ t ttttB dttttttttttttttksJ t td td ks€J d S ©NTrO   )r*   rJ   rK   r   r   rI   r   r   rL   rL   rL   rM   Útest_to_cnf  s    $*(,2"ÿ
*ÿ
r·   c                     s  t d\} }}}}}}}}}	}
}}}}| |@ |@ |@ |@ |@ |@ |@ |@ | |@ |@ |@ |@ |@ |@ |	@ |@ B | |
@ |@ |@ |@ |@ |@ |@ |@ B  tt s¢J tt fdd tttfttfD ]H\}}|| ||||||||	 tt fdd | ddd ksÆJ qÆd S )Nzx1:16c                      s   t  ddS ©NTr   ©r*   rL   ©ÚeqrL   rM   rR   2  rS   z"test_issue_18904.<locals>.<lambda>c                      s   t  ddS rž   r¹   rL   rº   rL   rM   rR   5  rS   T)r   Úforce)	r
   r&   r*   rC   rz   Úzipr   r   r+   )Úx1Zx2Zx3Zx4Zx5Zx6Zx7Zx8Zx9Zx10Zx11Zx12Zx13Zx14Zx15r   ÚtrL   rº   rM   Útest_issue_18904,  s    &""ÿ"þrÀ   c                   C   s(   t ttdktdktdk @ B s$J d S )NéûÿÿÿrQ   é   )r&   r*   r[   rZ   rL   rL   rL   rM   Útest_issue_99499  s    rÃ   c                   C   s  t  t  ttB  ¡¡tttB  ks(J t  t  tt@ tB ¡¡ttt@ tB ksTJ t  t  tt? ¡¡ttt? ksxJ t  t  ttt@ ? ¡¡tttt@ ? ks€J t  t  tttB @ t ttB @ B ¡¡ttttB @ t ttB @ B ksìJ t  t  tt@ ¡¡ttt@ ksJ d S ri   )rB   Z
CNF_to_cnfZto_CNFrJ   rK   r*   rI   rL   rL   rL   rM   Útest_to_CNF=  s    (,$,HrÄ   c                   C   s<  t ttB  tttttks$J t tttB @ tttttttksNJ t tt? t tB kshJ t ttt@ ? t tt@ B ksJ t ttB ttB ks¢J t tttdtttttttttksÔJ t tttt@ dtttttttttttttttksJ t td td ks8J d S r¶   )r+   rJ   rK   r   r   rI   r   r   rL   rL   rL   rM   Útest_to_dnfF  s    $*"ÿ.ÿ
rÅ   c                     s   t ttd\} }} fdd  t| |B || B g| ||g ddgddggksXJ  t| |B ||  B g| ||g ddgddggksJ d S )Nr°   c                    s4   zt  fdd| D W S  ty.   |  Y S 0 d S )Nc                 3   s   | ]} |V  qd S ri   rL   )rU   rj   ©Úsorted_recursiverL   rM   Ú	<genexpr>Y  rS   z=test_to_int_repr.<locals>.sorted_recursive.<locals>.<genexpr>)ÚsortedrX   )ÚargrÆ   rL   rM   rÇ   W  s    z*test_to_int_repr.<locals>.sorted_recursiverO   rQ   r   r   )r€   r   r
   r,   r³   rL   rÆ   rM   Útest_to_int_reprT  s    ÿ ÿrË   c                  C   s¬   t d\} }ttdu sJ ttdu s,J t| du s<J tt| |du sRJ tt| |t| |du spJ tt| |t| |du sJ ttt| |du sšJ d S )Núx,yTF)r
   r6   r.   r/   r   r   r   r   ©rj   rk   rL   rL   rM   Útest_is_anfc  s    rÎ   c                   C   s  t tdu sJ t tdu s J t t du s2J t tt@ du sFJ t tt@ t t@ B t t@ B t t @ B ddu s|J t ttB t t B @ du sJ t ttttdu s¶J t ttA du sÊJ t tt@ t t@ B t t@ B t t @ B ddu sJ d S ru   )r%   r.   rI   rJ   r   r   rL   rL   rL   rM   Útest_is_nnfn  s    6 rÏ   c                   C   s   t tdu sJ t ttB tB du s(J t tt@ t@ du s@J t ttB t@ du sXJ t tt@ tB du spJ t tt@  tB du sJ d S ru   )r&   rj   rk   rq   rL   rL   rL   rM   Útest_is_cnfz  s    rÐ   c                   C   s   t tdu sJ t ttB tB du s(J t tt@ t@ du s@J t tt@ tB du sXJ t ttB t@ du spJ t ttB  t@ du sJ d S ru   )r'   rj   rk   rq   rL   rL   rL   rM   Útest_is_dnf  s    rÑ   c                  C   s¢  t d\} }}tdddtu s"J tdddtu s6J tdddtu sJJ tdddtu s^J tt| ||tstJ d} t| |||ksJ d} t| |||ks€J d}tt| ||||ksÂJ tt| dt|ddtu sâJ tt| |ttksúJ tt|| tksJ tdtt	tks&J tdtt	t	ks<J t
tdd  t
tdd  t
td	d  t
td
d  tdddtju sJ ttdddddtsšJ tttdt	tttt	tksÌJ tttdt	ttt t	tksòJ tttdt	ttt t	tksJ tttdt	tttt	tks<J tttjtt	tttt	tksbJ tttjtt	ttt t	tksJ tttjtt	ttt t	tks²J tttjtt	tttt	tksØJ tttdt	ttksôJ tttdt	ttksJ tttdt	tt	ks,J tttdt	tt	ksHJ tttdt	t td¡t	kslJ tttdt	t td¡tksJ t
tdd  d S )NzA:CTFrO   r   c                   S   s   t dttS rP   )r   rj   rk   rL   rL   rL   rM   rR     rS   ztest_ITE.<locals>.<lambda>c                   S   s   t dg tS r   ©r   rk   rL   rL   rL   rM   rR      rS   c                   S   s   t ddtS )NrO   rL   rÒ   rL   rL   rL   rM   rR   ¡  rS   c                   S   s   t dtg S r   rÒ   rL   rL   rL   rM   rR   ¢  rS   rª   c                   S   s   t tdktttS r   )r   rj   rk   rq   rL   rL   rL   rM   rR   ·  rS   )r
   r   r/   r.   rf   r   r   rj   r   rk   rC   rX   r   r   r   rq   r¢   rz   rŠ   rL   rL   rM   Útest_ITE  sL     $&&$&((&$$rÓ   c                   C   sè   t ddu sJ t ddu s J t tdu s0J t t du sBJ t tttdu sXJ t t t¡du snJ t tt t¡du sJ t tttdu sJ t tt t¡t t¡du sÀJ t tdk sÐJ t tt	 dk räJ d S )NTFr   )
r1   rI   r   rJ   r   Úzeror   r   rj   rk   rL   rL   rL   rM   Útest_is_literalº  s    "rÕ   c                   C   sò  dt @ t d@   krt ks"n J dt @ t d@   kr>dksDn J t t@ tt tksZJ dt B t dB   krvdks|n J dt B t dB   krt ksn J t tB tt tksŽJ t  tt ksÆJ dt ? t d>   krât ksèn J dt ? t d>   krdksn J t d? dt >   kr.dks4n J t d? dt >   krVt  ks\n J t t? tt >   krtt tksn J dt A t dA   krªt  ks°n J dt A t dA   krÐt ksÖn J t tA tt tksîJ d S ru   )rI   rJ   r   r   r   r   r   rL   rL   rL   rM   Útest_operatorsÈ  s    """""&&(,(&rÖ   c                  C   s  t tj u sJ ttju sJ t dus(J tdus4J t s<J trDJ t dksPJ tdks\J t dkrhJ tdkrtJ t tkrJ tt tdksJ tttdksšJ tt dhttdh  krÌdksÒn J tt tsàJ tttsîJ tt trüJ tttrJ tt tu sJ tdtu s0J ttt u sBJ tdt u sTJ t  tu sdJ t t u stJ t	dt fdtfD ]f\} }t
| |tu s€J t
|| tu sžJ t
||tu sÌJ t
| | t u sàJ t
| ttksôJ t
|ttu sJ | du r|du s@| |@ tu s.J || @ tu s@J |dur\||@ tu s\J | durx| | @ t u sxJ t| |t u sJ t|| t u s J t||tu sŽJ t| | t u sÈJ t| tt u sÜJ t|ttksðJ | du r|du s(| |B t u sJ || B t u s(J |durD||B tu sDJ | dur`| | B t u s`J t| |t u stJ t|| t u sJ t||tu sJ t| | tu s°J t| tt ksÆJ t|ttksÚJ | du rî|du s| |A t u s J || A t u sJ |dur.||A tu s.J | durJ| | A tu sJJ t| |t u s^J t|| t u srJ t||t u sJ t| | tu sJ t| tt ks°J t|tt u sÄJ t| |tu sØJ t|| tu sìJ t||t u s J t| | tu sJ t| ttu s(J t|tt ks>J t| |tu sRJ t|| t u sfJ t||t u szJ t| | t u sJ t| ttks¢J t|tt u s¶J tt| t u sÊJ tt|t ksàJ | du rô|du s<| |? tu sJ || > tu sJ || ? t u s*J | |> t u s<J |durj||? t u sXJ ||> t u sjJ | dur| | ? t u sJ | | > t u sJ t| |tu s¬J t|| tu sÀJ t||t u sÔJ t| | t u sèJ t| ttksüJ t|tt ksJ tt| tks&J tt|t ks<J t| | | t u sRJ t| | |t u shJ t| || tu s~J t| ||tu sJ t|| | t u sªJ t|| |tu sÀJ t||| t u sÖJ t|||tu sJ qtdd tj tjfD sJ d S )NTFrO   c                 s   s   | ]}|  d d¡|u V  qdS )rO   rQ   Nr   rT   rL   rL   rM   rÈ   ^  rS   z"test_true_false.<locals>.<genexpr>)r.   r   r/   ÚhashÚlenrf   r0   Úboolr   rH   r   rj   r   r   r   r   r   r   r   Úall)ÚTÚFrL   rL   rM   Útest_true_falseÛ  sà    *







rÝ   c                   C   s°  t tdkdtdk ¡ tdtks&J ttdktdk ¡ tddksJJ ttdktdk ¡ tt dtdt kszJ ttdk ¡ tt dksJ tttdktdk  ¡ t	tt dtdtksÐJ t
 ¡ tjksâJ t ¡ tju sôJ t ¡ tjksJ tttdk tdktdk  ¡ t t d¡ks<J ttdk ttdk  ¡ tdk  ¡ kshJ ttdd  td	tdt d tdt d   ¡ tju s¬J d S )
Nr   FrO   rQ   éþÿÿÿr   c                   S   s   t tdk  ¡ S r   )r   rj   Úas_setrL   rL   rL   rM   rR   n  rS   z"test_bool_as_set.<locals>.<lambda>r   )r   rk   rß   r   r   r   rj   r   r   r   r.   r   ZUniversalSetr/   ZEmptySetÚopenr   rC   r   r   r   rL   rL   rL   rM   Útest_bool_as_seta  s    &$0 ÿ4,rá   c                  C   s   t d\} }t| dk|dk ¡ tdttdt ks:J t| dk|dk ¡ tjtj tt dddtt ddd  ksJ d S )NrÌ   r   T)r
   r   rß   r   r   r   r   ZRealsrÍ   rL   rL   rM   Útest_multivariate_bool_as_sets  s
    .ÿrâ   c                  C   s   t ddd} | t k| tkf}t| }|jtu rTt|jt|| tj¡ ks`J n|dks`J t	| }|jt	u rt|jdksJ n|dksJ d S )Nrj   T)Zextended_realrQ   )
r
   r   r   ÚfuncrØ   ÚargsÚcountr   r.   r   )rj   rä   ÚvrL   rL   rM   Útest_all_or_nothing|  s    
$
rç   c                   C   s    t jt ksJ tjtksJ d S ri   )r.   rY   r/   rL   rL   rL   rM   Útest_canonical_atoms  s    rè   c                   C   s    t jtksJ tjt ksJ d S ri   )r.   Znegatedr/   rL   rL   rL   rM   Útest_negated_atoms  s    ré   c                   C   s   t tdkttk  ¡ tdtddks(J t tdkttk  ¡ tdtksLJ ttk  ¡ tt tkshJ tt k ¡ tt tksJ d S )NrQ   T)Z	left_openrO   )r   rj   r   rß   r   rL   rL   rL   rM   Útest_issue_8777  s    ($rê   c                   C   sJ   t tt tk tdktdtkttk  ¡ tt dtdt ksFJ d S )NrÞ   rQ   )r   r   r   rj   rß   r   rL   rL   rL   rM   Útest_issue_8975  s    *ÿrë   c                   C   s(   t g d¢dksJ t ddks$J d S )N)rO   r   rO   r   r   rO   r   éR   Z0010101000111001i9*  )r2   rL   rL   rL   rM   Útest_term_to_integer¡  s    rí   c                  C   s  t d\} }}}| |@ |@ | |@ B }| | |@ |¡||@ |B ksDJ | | |@ |@ |¡| |@ |B kshJ | |B |B | |B @ }| | |B |¡||B |@ ksJ | | |B |B |¡| |B |@ ksÀJ | |A |A | |A @ }| | |A |¡||A |@ ksôJ | | |A |A |¡| |A |@ ksJ d S ©Nza b c d)r
   r¢   )rZ   r[   r\   r   r   rL   rL   rM   Útest_issue_21971Š  s     $ $ rï   c                   C   sÀ   t ttttttgddg d¢ks(J t tttB ttgddg d¢ksNJ t ttt? ttgddg d¢kstJ t ttttttgddgdfddgdfddgdfddgdfgksŒJ d S )	NF)Úinput)FFFT)FTTT)TTFTr   rO   T)Úlistr3   r   rj   rk   rL   rL   rL   rM   Útest_truth_tableµ  s    ÿÿÿ*ÿrò   c                     s  t jt jfD ]ðttfdd ttfdd ttfdd ttfdd t jt jtfD ] tdD ]} tt fdd tt fdd tt fd	d tt fd
d tt fdd tt fdd    qrqfqd S )Nc                      s    
 S ri   rL   rL   ©r¿   rL   rM   rR   Â  rS   z!test_issue_8571.<locals>.<lambda>c                      s     S ri   rL   rL   ró   rL   rM   rR   Ã  rS   c                      s   t  S ri   )ÚabsrL   ró   rL   rM   rR   Ä  rS   c                      s   t  S ri   )ÚintrL   ró   rL   rM   rR   Æ  rS   rQ   c                      s     S ri   rL   rL   ©Úor¿   rL   rM   rR   Ê  rS   c                      s     S ri   rL   rL   rö   rL   rM   rR   Ë  rS   c                      s     S ri   rL   rL   rö   rL   rM   rR   Ì  rS   c                      s     S ri   rL   rL   rö   rL   rM   rR   Í  rS   c                      s     S ri   rL   rL   rö   rL   rM   rR   Î  rS   c                      s     S ri   rL   rL   rö   rL   rM   rR   Ï  rS   )	r   r.   r/   rC   rX   ZZeror{   rj   Úrange)Ú_rL   rö   rM   Útest_issue_8571À  s    rú   c                  C   s   t ddd} t ddd\}}| ||  | d   ||  | d   dk }|tjusVJ | ¡ tju shJ |dk ¡ tju s~J d S )NÚnT)Únegativezp q)ÚpositiverO   r   )r
   r   r/   Úexpandr.   )rû   ÚpÚqÚrrL   rL   rM   Útest_expand_relationalÓ  s    ,r  c                   C   s$   t jjdksJ t jjdks J d S )NT)r   r.   Zis_Atomr/   rL   rL   rL   rM   Útest_issue_12717Ü  s    r  c                     sŠ   t ddd} tdd dtjd| fD s,J t ddd}td	d d
tjd|fD sXJ tdd ttdk fD svJ dtdtd g fD ] tt fdd qd S )NÚnzT)Znonzeroc                 s   s   | ]}t |tju V  qd S ri   )r4   r   r.   rT   rL   rL   rM   rÈ   ã  rS   z"test_as_Boolean.<locals>.<genexpr>rO   rq   )rÔ   c                 s   s   | ]}t |tju V  qd S ri   )r4   r   r/   rT   rL   rL   rM   rÈ   å  rS   Fr   c                 s   s   | ]}t ||kV  qd S ri   ©r4   rT   rL   rL   rM   rÈ   æ  rS   rQ   c                      s   t  S ri   r  rL   ©rV   rL   rM   rR   è  rS   z!test_as_Boolean.<locals>.<lambda>)r
   rÚ   r   r.   r/   rj   rC   rX   )r  rq   rL   r  rM   Útest_as_Booleaná  s      r  c                  C   sD  t tdk ttjtthksJ ttfD ]F} | tdjt ks@J | tdjthksVJ | tdjthks&J q&tj	jt ksJ tj
jt ksJ tjthks¢J ttttdttdjtthksÈJ t t¡jt ksÞJ t td¡jt ksöJ t t¡jthksJ t td¡jthks(J t t¡jt ks@J d S )NrO   TF)r   rj   rk   rq   Zbinary_symbolsr   r   Úsetr   r.   r/   r   r   ÚprimeÚltZis_truer»   )r   rL   rL   rM   Útest_binary_symbolsë  s    &r  c                   C   s,   t tt t¡tdttdfdks(J d S )Nr   F)rO   T)r   rj   rk   Údiffr   r   rL   rL   rL   rM   Útest_BooleanFunction_diffü  s    r  c                  C   s  t d\} }}}}}}}||@ |@ | @ ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ |@ | @ B ||@ | @ | @ B ||@ |@ | @ | @ B ||@ |@ | @ | @ B ||@ |  @ | @ | @ B ||@ |  @ | @ | @ B | |@ |@ |@ | @ | @ B }||@ |@ | @ ||@ |@ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ |@ | @ | @ B ||@ |  @ | @ | @ B | |@ |@ |@ | @ | @ B }	||B |B ||B |B @ ||B |B @ ||B |B @ ||B |B @ ||B |B @ ||B | B | B @ | | B | B | B @ || B | B | B | B @ | |B | B | B | B | B @ || B | B | B | B | B @ ||B |B |  B | B | B | B @ }
t|d|	ksPJ t|d|
ksdJ g d¢g d¢g d¢g d¢g d¢g d	¢g}g d
¢g d¢g d¢g d¢g}tttttg|tt @ tt@ t @ B ksØJ tttttg||tt @ tt@ t @ B ks
J d S )NzA B C D E F G HZdnfZcnf)r   rO   r   r   r   )r   rO   rO   r   r   r   r   ©rO   r   r   r   ©rO   r   r   rO   )rO   rO   r   r   ©rO   rO   r   rO   )r
   r(   r   rr   rj   rk   rq   )rI   rJ   rK   rg   ÚErÜ   ÚGÚHr   ZsoldnfZsolcnfr   r   rL   rL   rM   Útest_issue_14700   s    8ÿÿÿþþþýýýüüû6ÿÿÿþþþýý.
ÿ
ÿÿþþý ý"üÿ0ÿr  c                  C   s    t ttj} t| | ksJ d S ri   )r   rj   r   ZIntegersr(   )ZcondrL   rL   rM   Útest_issue_25115  s    r  c                  C   s"  t ddd\} }}}t ddd\}}t||k||k  ¡ tjksDJ t||k||k ¡ tjksdJ t||k| | k ¡ tjksJ t||k| | k  ¡ tjks¬J t| | k||k  ¡ tjksÐJ t| | k| | k ¡ tjksøJ t| | k||k ¡ tjksJ t| | k| | k  ¡ tjksHJ t||k||k  ¡ tjksjJ t||k||k ¡ tjksJ t||k| | k ¡ tjks²J t||k| | k  ¡ tjksØJ t| | k||k  ¡ tjksþJ t| | k||k ¡ tjks$J t| | k| | k ¡ tjksNJ t| | k| | k  ¡ tjksxJ t||k ||k ¡ tjksJ t||k||k ¡ tjksŒJ t| | k||k ¡ tjksâJ t| | k ||k ¡ tjksJ t||k | | k ¡ tjks.J t| | k| | k ¡ tjksXJ t||k| | k ¡ tjks~J t| | k | | k ¡ tjksšJ t||k ||k ¡ tjksÊJ t||k||k ¡ tjksìJ t| | k||k ¡ tjksJ t| | k ||k ¡ tjks8J t||k | | k ¡ tjks^J t||k| | k ¡ tjksJ t| | k| | k ¡ tjks®J t| | k | | k ¡ tjksØJ t||k| |k ||k ¡ tjks J t||k||k  ¡ tjks"J t||kt|| ¡ ||kksHJ t||kt|| ¡ t||kspJ tt|||dkd|k |dk||k  ¡ t|||dk@ |dk@ ||k@ ksÂJ tt||||k| |k ||k  ¡ ||k||kB | |k B ksJ tt||||k| |k ||k||k  ¡ t||||k@ | |k @ ksNJ tt|||dkd|k |dk||k  ¡ t|||dk@ |dk@ ||k@ ks J t||t||@ ||k@ ||k@  ¡ t||t||@ ||k@ ksêJ tt||t||  ¡ tt|d	t|d	ks"J t||k||k ¡ t	||ksHJ t|dk|d
k t|| ¡ tjksrJ t||kt|d	 ¡ t|d	kt|d	ks€J tt	|dt	|d ¡ tjksÊJ tt|dt	d| ¡ t|dksôJ tt|dt	d| ¡ t	|dksJ d S )Núw x y zT©Úrealúd eFrO   rQ   r   r   r   )
r
   r   r   r   r.   r   r/   r   r   r   )rr   rj   rk   rq   r   r^   rL   rL   rM   Útest_relational_simplification#  sx      $$$(&*""&&&&**""&&&*&*""&&&&**("&(( ÿ
"ÿ
(ÿ
( ÿ
&ÿ
8&*2&*r  c                  C   s   t ddd} t| dk | dk ¡ tjks,J t| dk | dk ¡ tjksLJ t| dk | dk ¡ tjkslJ t| dk| dk ¡ tjksJ d S )Nrj   Tr  rO   r   )r
   r   r   r   r.   r   r/   ©rj   rL   rL   rM   Útest_issue_8373f  s
       r  c                  C   s4   t ddd} tt| dt| d ¡ tjks0J d S )Nrj   Tr  rO   rQ   )r
   r   r   r   r   r/   r  rL   rL   rM   Útest_issue_7950n  s    r  c            	      C   s>  dd } t ddd\}}}}t ddd\}}tt||||k||k ||k||k tt|||dkd	|k |d
k||k tt|||dkd	|k |d
k||k t||kt||ttt||||k||k t||k||k tt|||dkd	|k |dk||k t||t||@ ||k@ ||k@ f}|D ]}| || ¡  q$d S )Nc           	      S   s~   | j }t|}ttttt|d  || |}|D ]@}tt||}|  |¡}| |¡}||ks8J d 	| ||¡q8d S )NrO   zHOriginal: {}
and simplified: {}
do not evaluate to the same value for {})
Zfree_symbolsrØ   rñ   r  rF   rø   Údictrœ   r¢   Úformat)	ÚoriginalÚ
simplifiedÚsymbrû   Ú	valuelistÚvaluesÚsublistÚoriginalvalueÚsimplifiedvaluerL   rL   rM   Ú(test_simplification_numerically_functionu  s    &

þz\test_relational_simplification_numerically.<locals>.test_simplification_numerically_functionr  Tr  r  FrO   rQ   r   r   )r
   r   r   r   r   )	r(  rr   rj   rk   rq   r   r^   ZexpressionsZ
expressionrL   rL   rM   Ú*test_relational_simplification_numericallys  s     $$$*$ÿ"ú	ÿr)  c               	   C   s  ddl m}  ddlm}m}m} | d}| d}| d}|||g}t| gt| gt| gg}t	t
tt	tddd d}	d	d
 |	D }	|D ]r\}
}|D ]d}|
|d j }|d }|	D ]D}tt||}| |¡}| |¡}||ksºJ d |d ||¡qºqqd S )Nr   ©ÚWild)Ú_simplify_patterns_andÚ_simplify_patterns_orÚ_simplify_patterns_xorrZ   r[   r\   rÞ   r   c                 S   s*   g | ]"}t d d |D s"t |s|qS )c                 s   s   | ]}|d  V  qdS ©rQ   NrL   ©rU   rr   rL   rL   rM   rÈ     rS   zQtest_relational_simplification_patterns_numerically.<locals>.<listcomp>.<genexpr>©Úany©rU   ræ   rL   rL   rM   Ú
<listcomp>  rS   zGtest_relational_simplification_patterns_numerically.<locals>.<listcomp>rO   úGOriginal: {}
and simplified: {}
do not evaluate to the same value for{})Ú
sympy.corer+  Úsympy.logic.boolalgr,  r-  r.  r   r   r   rñ   r  rF   rø   rä   r  rœ   Úxreplacer  )r+  r,  r-  r.  rZ   r[   r\   r"  Úpatternlistsr#  rã   ÚpatternlistÚpatternr   r!  r$  r%  r&  r'  rL   rL   rM   Ú3test_relational_simplification_patterns_numerically  s.    
þ 


þr<  c                  C   sT   t d} | dk| dk B | dk| dk @ B  ¡ | dk| dk B | dk| dk @ B ksPJ d S )Nrû   r   r   )r
   r   )rû   rL   rL   rM   Útest_issue_16803­  s    "ÿr=  c                      s   t ttti tt t dkt t dk   ¡s0J tt t dk t t dk   ¡rTJ tt fdd tt fdd tt fdd d S )Nr   c                      s    t tt dk tt dk   ¡S ©Nr   )r   rj   rk   r¢   rL   ©r  rL   rM   rR   ž  rS   z"test_issue_17530.<locals>.<lambda>c                      s    t tt dktt dk   ¡S r>  ©r   rj   rk   r¢   rL   r?  rL   rM   rR   ¹  rS   c                      s    t tt dktt dk   ¡S r>  r@  rL   r?  rL   rM   rR   º  rS   )rj   r   rk   r   r¢   r   rC   rX   rL   rL   r?  rM   Útest_issue_17530Ž  s    $$rA  c                   C   s¬   t ddgddgksJ t g d¢g d¢ks0J t g d¢g d¢ksHJ t g d¢g d¢ks`J t g d¢g d¢ksxJ t g d¢g d¢ksJ t g d	¢g d
¢ksšJ d S )NrO   r   r   r   ©rO   rO   rO   r   r  r  r   r  r   )r8   rL   rL   rL   rM   Útest_anf_coeffsœ  s    rC  c                  C   s   t d\} }t| gddgdks$J t| gddgdks<J t| gddgt| dddks^J t| |gg d¢tdt| |ddksJ d S )NrÌ   rO   Tr   Fr±   rB  )r
   r9   r   r   rÍ   rL   rL   rM   Útest_ANFformÇ  s    "ÿrD  c                  C   sP   t d\} }td| |gt| |ks(J tddg| |gtt|| ksLJ d S )NrÌ   r   rO   r   )r
   r:   r   r   rÍ   rL   rL   rM   Útest_bool_mintermÐ  s    rE  c                  C   sT   t d\} }td| |gtt| |ks,J tddg| |gtt|| ksPJ d S )NrÌ   rQ   r   rO   )r
   r;   r   r   rÍ   rL   rL   rM   Útest_bool_maxtermÖ  s     rF  c                  C   sF   t d\} }td| |g|ks"J tddg| |gt| |ksBJ d S )NrÌ   rO   )r
   r<   r   rÍ   rL   rL   rM   Útest_bool_monomialÜ  s    rG  c                   C   s8   t g d¢g d¢dksJ t g d¢g d¢dks4J d S )Nr   r   rQ   r   r   )r=   rL   rL   rL   rM   Útest_check_pairâ  s    rH  c                  C   s\   t t@ tt @ B t t  @ B } tt @ tt @ B t  t @ B }t| dd}|| |fv sXJ d S rž   )rJ   rK   rI   r+   )rn   Zres1ÚresultrL   rL   rM   Útest_issue_19114ç  s    rJ  c                  C   sl   t ttttgg d¢} tt @ tt@ t@ B tt @ t @ B tt @ t @ B tt @ t @ B }| |kshJ d S )N)rO   rQ   r   rÂ   r   é   é   é	   r   é   é   r   )r   rZ   r[   r\   r   )rI  ÚexpectedrL   rL   rM   Útest_issue_20870ï  s    $ÿÿrQ  c                   C   sV   t g d¢tttgttttttks,J t g d¢tttgttttksRJ d S ©Nr   )r   rO   r   )r>   rj   rk   rq   r   r   rL   rL   rL   rM   Útest_convert_to_varsSOPö  s    ,rS  c                   C   sR   t g d¢tttgtttttks(J t g d¢tttgttttksNJ d S rR  )r?   rj   rk   rq   r   r   rL   rL   rL   rM   Útest_convert_to_varsPOSû  s    (rT  c                     sz   t d\ } }}tt dks(J t | @ |@ | B A B dksLJ tt ddksbJ tt fdd d S )Nza:erQ   rM  Tr   c                      s   t   S ri   )rA   rL   ©rZ   r[   rL   rM   rR     rS   z%test_gateinputcount.<locals>.<lambda>)r
   rA   r   rC   rX   )r\   r   r^   rL   rU  rM   Útest_gateinputcount   s
    $rV  c                   C   sx  t tdk tdk  rJ t tdk tdk s.J t tdk dtktju sJJ t tdk tdk tdk kshJ t tdktdk rJ t tdktdksJ t tdkdtktju s²J t tdktdktdkksÐJ t tdktdk rèJ t tdktdksþJ t tdkdtk tju sJ t tdktdktdkks<J t tdktdk rVJ t tdktdksnJ t tdkdtktju sJ t tdktdktdkks¬J t ttdttd rÊJ t ttdttdsæJ t ttdtdttju sJ t ttdttdttdks.J t ttdttd rLJ t ttdtdttju snJ t ttdttdsJ t ttdttdttdks°J t ttdktdktdktdkksÚJ t ttdktdktdktdk@ tju s
J t t 	t¡t 	t¡tju s,J t t 	t¡t 
t¡tju sNJ t t 	t¡t t¡t 	t¡kstJ d S r>  )r   rj   r   r.   rk   r   r   r   r   rý   rü   r/   r  rL   rL   rL   rM   Útest_refine  s:      "&"&*0""rW  c               	   C   sð   ddl m}  ddlm} | d}| d}| d}|||g}t| gg}tttttddd d}d	d
 |D }|D ]r\}}	|	D ]d}
||
d j	 }|
d }|D ]D}t
t||}| |¡}| |¡}||ks¢J d |
d ||¡q¢qqxd S )Nr   r*  )Ú_simplify_patterns_and3rZ   r[   r\   rÞ   r   c                 S   s*   g | ]"}t d d |D s"t |s|qS )c                 s   s   | ]}|d  V  qdS r/  rL   r0  rL   rL   rM   rÈ   7  rS   z[test_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>.<genexpr>r1  r3  rL   rL   rM   r4  7  rS   zQtest_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>rO   r5  )r6  r+  r7  rX  r   rñ   r  rF   rø   rä   r  rœ   r8  r  )r+  rX  rZ   r[   r\   r"  r9  r#  rã   r:  r;  r   r!  r$  r%  r&  r'  rL   rL   rM   Ú=test_relational_threeterm_simplification_patterns_numerically-  s(    
 


þrY  c                  C   sJ   t tttttt} t| t s$J t| jtttttthksFJ d S ri   )	r   r   rZ   r\   r   r[   rf   r  rä   r  rL   rL   rM   Útest_issue_25451E  s    rZ  c                  C   s   t d\} }}}t|t| |t| |}t| |t| |}tt|t||t||}tttt|t||t||}||ksJ ||ksJ d S rî   )r
   r   r   r5   )rZ   r[   r\   r   rj   rk   rI  Z
result_anfrL   rL   rM   Útest_issue_26985K  s    $r[  N)·Zsympy.assumptions.askr   Zsympy.assumptions.refiner   Zsympy.core.numbersr   Zsympy.core.relationalr   r   r   Zsympy.core.singletonr   Zsympy.core.symbolr	   r
   Zsympy.functionsr   Z(sympy.functions.elementary.trigonometricr   r   Zsympy.sets.setsr   r   Zsympy.sets.containsr   Zsympy.simplify.simplifyr   r7  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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   Zsympy.assumptions.cnfrB   Zsympy.testing.pytestrC   rD   rE   Ú	itertoolsrF   rG   rH   rI   rJ   rK   rg   rZ   r[   r\   r   r^   rr   rj   rk   rq   rN   rc   rd   rh   ro   rp   rs   rt   rv   rw   rx   ry   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Õ   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=  rA  rC  rD  rE  rF  rG  rH  rJ  rQ  rS  rT  rV  rW  rY  rZ  r[  rL   rL   rL   rM   Ú<module>   sÐ   Ä		t			. 
	
C
	
	%