U
    ZÊ¹j¢¿  ã                	   @   sf  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º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t‚t tB tt tƒks,t‚t t@ tB ttt tƒtƒksLt‚t t? tt tƒksbt‚t t> ttt ƒksxt‚t  tt ƒksŠt‚t tA tt tƒks t‚dS )z)Test that |, & are overloaded as expectedN)	ÚAÚBr   ÚAssertionErrorr   ÚCr   r   r   © rM   rM   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/logic/tests/test_boolalg.pyÚtest_overloading!   s     rO   c                  C   sÚ  t ƒ tkst‚t tƒtkst‚t dƒtks.t‚t dƒtks>t‚t ddƒtksPt‚t ddƒtksbt‚t ddƒtkstt‚t dtƒtks†t‚t dtƒtks˜t‚t dddƒtks¬t‚t ddtƒtksÀt‚t ddtƒtksÔt‚t dtƒtksæt‚ttdd„ ƒ t tdk tdkƒtk�st‚tdk} t | | jƒ| jk�s0t‚ttkttk ttkttkf\}}}}t ||||ƒt ||ƒk�srt‚dd„ t	||||fƒD ƒt ||ƒhk�sžt‚t t t
tdƒt
tdƒƒt ttdƒt
tdƒƒƒtk�sÖt‚d S )	NTFé   c                   S   s
   t dtƒS ©Né   )r   rI   rM   rM   rM   rN   Ú<lambda>;   ó    ztest_And.<locals>.<lambda>c                 S   s   h | ]}t |Ž ’qS rM   )r   ©Ú.0ÚirM   rM   rN   Ú	<setcomp>A   s     ztest_And.<locals>.<setcomp>r   )r   r.   rK   rI   r/   rC   Ú	TypeErrorÚ	canonicalrJ   rG   r   ÚaÚbr   Úc©ÚeÚgÚlÚgeÚlerM   rM   rN   Útest_And-   s*    $,rd   c                  C   st  t ƒ tkst‚t tƒtkst‚t dƒtks.t‚t dƒtks>t‚t ddƒtksPt‚t ddƒtksbt‚t ddƒtkstt‚t dtƒtks†t‚t dtƒtks˜t‚t dddƒtks¬t‚t ddtƒtksÀt‚t ddtƒtksÔt‚t dtƒtksæt‚ttdd„ ƒ t tdk tdkƒtk�st‚tdk} t | | jƒ| k�s.t‚ttkttk ttkttkf\}}}}t ||||ƒt ||ƒk�spt‚d S )NTFrP   c                   S   s
   t dtƒS rQ   )r   rI   rM   rM   rM   rN   rS   S   rT   ztest_Or.<locals>.<lambda>)	r   r/   rK   rI   r.   rC   rY   rZ   rJ   r^   rM   rM   rN   Útest_OrE   s&    $re   c                  C   s  t ƒ tkst‚t tƒtkst‚t ttƒtks0t‚t dttƒtksDt‚t tttttƒtks\t‚t dddttƒt ttƒ ks|t‚t dƒtksŒt‚t dƒtksœt‚t ddƒtks®t‚t ddƒtksÀt‚t ddƒtksÒt‚t dtƒt ksæt‚t dtƒtksøt‚t dddƒtk�st‚t ddtƒt k�s&t‚t ddtƒtk�s<t‚tt ttƒt ƒ�sRt‚t ttt ttƒƒt ttttƒk�sxt‚t ttt ttƒƒt ttƒk�sšt‚t tdk tdktƒt ddtƒ  k�rÒt ddtƒk�sØn t‚tdk} t | | j	ƒt ddƒ  k�rt ddƒk�sn t‚d S ©NTFrP   r   )
r   r/   rK   rI   r.   rJ   Ú
isinstancerL   ÚDrZ   )r_   rM   rM   rN   Útest_Xor[   s,     &">ri   c                  C   s.   t tA } |  t¡t tB t  t B @ ks*t‚d S ©N)ÚxÚyÚrewriter   rK   ©ÚexprrM   rM   rN   Útest_rewrite_as_Andt   s    rp   c                  C   s.   t tA } |  t¡t t @ tt  @ B ks*t‚d S rj   )rk   rl   rm   r   rK   rn   rM   rM   rN   Útest_rewrite_as_Ory   s    rq   c                  C   s<   t t@ tt @ B } |  t¡t t@  tt @  @  ks8t‚d S rj   )rl   ÚzÚwrm   r   rK   rn   rM   rM   rN   Útest_rewrite_as_Nand~   s    rt   c                  C   s4   t tt B @ } |  t¡t  tt B  B  ks0t‚d S rj   )rr   rl   rs   rm   r   rK   rn   rM   rM   rN   Útest_rewrite_as_Norƒ   s    ru   c                   C   sb   t tdd„ ƒ tdƒtkst‚tdƒtks.t‚tdƒtks>t‚tdƒtksNt‚tdƒtks^t‚d S )Nc                   S   s
   t ddƒS ©NTF)r   rM   rM   rM   rN   rS   ‰   rT   ztest_Not.<locals>.<lambda>TFr   rP   rR   )rC   rY   r   r/   rK   r.   rM   rM   rM   rN   Útest_Notˆ   s    rw   c                   C   sÞ   t ƒ tkst‚t tƒt ks t‚t dƒtks0t‚t dƒtks@t‚t ddƒtksRt‚t ddƒtksdt‚t ddƒtksvt‚t dtƒt ksŠt‚t dtƒtksœt‚t dddƒtks°t‚t ddtƒt ksÆt‚t ddtƒtksÚt‚d S rv   )r   r/   rK   rI   r.   rM   rM   rM   rN   Ú	test_Nand‘   s    rx   c                   C   sÜ   t ƒ tkst‚t tƒt ks t‚t dƒtks0t‚t dƒtks@t‚t ddƒtksRt‚t ddƒtksdt‚t ddƒtksvt‚t dtƒtksˆt‚t dtƒt ksœt‚t dddƒtks°t‚t ddtƒtksÄt‚t ddtƒtksØt‚d S rv   )r   r.   rK   rI   r/   rM   rM   rM   rN   Útest_Nor    s    ry   c                   C   s"  t ƒ tkst‚t tƒt ks t‚t ttƒtks2t‚t dttƒtksFt‚t tttttƒt ks`t‚t dƒtkspt‚t dƒtks€t‚t ddƒtks’t‚t ddƒtks¤t‚t ddƒtks¶t‚t dtƒtksÈt‚t dtƒt ksÜt‚t dddƒtksðt‚t ddtƒtk�st‚t ddtƒt k�st‚d S rv   )r   r.   rK   rI   r/   rM   rM   rM   rN   Ú	test_Xnor¯   s    rz   c                   C   sê   t tdd„ ƒ tddƒtks t‚tddƒtks2t‚tddƒtksDt‚tddƒtksVt‚tdtƒtksht‚tddƒtkszt‚tddƒtksŒt‚tt? tt> ks t‚tdk tdk? tdkks¼t‚tdk tj	tk? tksÖt‚tt? tksæt‚d S )Nc                   S   s   t tttƒS rj   )r   rI   rJ   rL   rM   rM   rM   rN   rS   Â   rT   ztest_Implies.<locals>.<lambda>TFr   rP   )
rC   Ú
ValueErrorr   r.   rK   r/   rI   rJ   r   ÚOnerM   rM   rM   rN   Útest_ImpliesÁ   s    r}   c                   C   s  t ttƒt ttƒ  kr(t tttƒks.n t‚t ƒ tks<t‚t ttƒt tƒ  krZtks`n t‚t ddƒt ddƒ  kr€tks†n t‚t ddƒt ddƒ  kr¦tks¬n t‚t tdƒtks¾t‚t tdƒttƒksÔt‚t ttdƒtt@ ksìt‚t ttdƒt t @ k�s
t‚t dtƒtk�st‚t dtƒttƒk�s6t‚t tt ttƒƒt t ttƒtƒk�s\t‚t tdk tdkƒtk�sxt‚t tdk tdkdƒtk�s–t‚t tdk tdkdƒtk�s´t‚t tdk tj	tkƒt ddƒ  k�rèt ddƒk�sîn t‚t t
ttƒt
ttƒƒtk�st‚d S rf   )r   rI   rJ   rK   r.   r/   r   rL   r   r|   r   rM   rM   rM   rN   Útest_EquivalentÐ   s"    .$&&&:r~   c                   C   sT   t dddƒtkst‚t dddƒtks(t‚t dddƒtks<t‚t dddƒtksPt‚d S )NFT)r@   r.   rK   r/   rM   rM   rM   rN   Útest_Exclusiveä   s    r   c                   C   sÒ   t tttƒƒ tt tƒt tƒƒ¡dks*t‚tttƒ tt? tt? @ ¡dksNt‚tt B t tB @  t t @ tt@ B ¡dks€t‚tt?  t t ? ¡dksžt‚ttt? ?  ttt? ? ¡dksÀt‚t	t
dd„ ƒ d S )NTFc                   S   s   t t@  t tk¡S rj   )rI   rJ   ÚequalsrM   rM   rM   rN   rS   ñ   rT   ztest_equals.<locals>.<lambda>)r   r   rI   rJ   r€   r   rK   r   rL   rC   ÚNotImplementedErrorrM   rM   rM   rN   Útest_equalsë   s    *$2"r‚   c               	      s@
  dddgdddgdddgdddgg} dddgdddgdddgdddgg}t tttg| ƒttttƒtƒtttƒtƒƒkszt‚tt tttg|ƒƒtttttƒttƒƒtttƒƒƒks´t‚ttttg| | ƒt	ksÐt‚t tttg| | ƒt	ksìt‚t t
ƒ t
ƒ t
ƒ g| | ƒt	k�st‚ddddgddddgddddgddddgddddgg‰ ddddgddddgddddgg}t ttttgˆ |ƒttttƒtttƒttƒƒƒk�s t‚tttttgˆ |ƒttttƒtƒtƒk�sÎt‚dddddg‰ dddg}t ttttgˆ |ƒttttƒtttƒttƒƒƒk�st‚tttttgˆ |ƒttttƒtƒtƒk�sLt‚dddddgdddddgddddgg‰ dddddgdg}t ttttgˆ |ƒttttƒtttƒttƒƒƒk�s¼t‚tttttgˆ |ƒttttƒtƒtƒk�sêt‚dtdtdig‰ dddddgdg}t ttttgˆ |ƒttttƒtttƒttƒƒƒk�sDt‚tttttgˆ |ƒttttƒtƒtƒk�srt‚tdtdidg‰ ddddgg}dddg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øt‚ttt@ tt@ B ƒ|k�st‚ttttƒƒtttƒtƒk�s8t‚ttttƒƒttttƒtttƒttƒƒƒk�sjt‚ttttdƒtƒƒtttdƒtƒk�s”t‚ttttdƒtƒƒtttdƒtƒk�s¾t‚tttttƒtƒƒttttƒtƒk�sèt‚tttttdƒtƒtttdƒtƒƒƒtttdƒtttƒƒk�s*t‚t t @ t @ t t @ t@ B }tt|ƒ}t|ƒtt @ t @ k�stt‚ttdd
„ ƒ ttttktttk tƒƒƒttkk�s¬t‚ttttktttktƒƒƒttkk�sÖt‚ttttktttk tƒƒƒttkk�s t‚tdƒ\	}}}}}}	}
}}||@ |@ |@ |@ |	@ |
@ |@ |@ ||@ |@ |@ |@ |	@ |
@ |@ | @ B }t|ƒ|k�svt‚t||@ |B |B ||@ d�||B k�s t‚t ttgddggƒ}t ttgddggƒ|k�sÒt‚tttgddggƒ|k�sðt‚ttdd
„ ƒ t tgdggdggƒt	k�st‚t tgdggdggƒt	k�s>t‚t tgg g ƒtk�sVt‚ttdd
„ ƒ ttgdggdggƒt	k�s„t‚ttgdggdggƒt	k�s¤t‚ttgg g ƒtk�s¼t‚ttt@ tt@ B ƒtttttƒƒk�sæt‚tttttƒƒƒdk�st‚tttttƒƒƒdk�st‚ttttdƒtttƒƒƒtttdƒttdƒƒk�sTt‚tttd dƒtttƒƒ ¡ tttdƒttdƒƒk�sŽt‚tttd dƒtttƒƒ ¡ tttdƒtttƒƒk�sÈt‚tttd dƒtttƒƒ ¡ tttdƒttdƒƒk�	st‚tttd dƒtttt ƒttt dƒƒ ¡ tttdƒttdƒttdƒƒk�	sTt‚tttd dƒttd dƒƒ ¡ ttdƒk�	s†t‚tttd dƒttd dƒƒ ¡ ttdƒk�	s¸t‚tttd dƒttd dƒƒ ¡ dk�	sät‚tttd dƒttd dƒƒ ¡ tttdƒttdƒƒk�
s"t‚tttt ƒƒdk�
s<t‚dS )z1
    Test working of simplification methods.
    r   rP   é   é   é   é   rR   é   c                      s   t ttttgˆ ƒS rj   )r   rs   rk   rl   rr   rM   ©ÚmintermsrM   rN   rS   $  rT   z-test_simplification_boolalg.<locals>.<lambda>c                      s   t ttttgˆ ƒS rj   ©r   rs   rk   rl   rr   rM   rˆ   rM   rN   rS   %  rT   c                   S   s   t ttttgdgƒS )NZabcdefgrŠ   rM   rM   rM   rN   rS   '  rT   c                   S   s   t tttB @ dd�S )NZblabla)Úform)r(   rI   rJ   rL   rM   rM   rM   rN   rS   8  rT   za b c d e f g h j)Zdontcarec                   S   s   t tgdggdggƒS ©NrP   )r   rk   rM   rM   rM   rN   rS   M  rT   c                   S   s   t tgdggdggƒS rŒ   )r   rk   rM   rM   rM   rN   rS   R  rT   FTéÿÿÿÿN)r   rk   rl   rr   r   r   r   rK   r   r.   r	   rs   rC   r{   rY   rI   rJ   rL   r(   r   r   r   r   r
   r/   r   r   r   )Zset1Zset2Ú	dontcaresZansr\   r_   r[   r]   ÚdÚfr`   ÚhÚjro   rM   rˆ   rN   Útest_simplification_boolalgô   sÊ    $$2 ÿ$(
ÿ"ÿÿ.
ÿÿ.
ÿÿÿ.ÿÿ."ÿ
***$ÿ
"
***"$ÿ*    *6:::,ÿ
22, ÿ
r“   c               
   C   s  ddddgddddgddddgddddgddddgg} t tttƒƒtƒtttifksXt‚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¶t‚t ttttgdddggƒttttgdddggƒƒdksðt‚ttttgdddgdddggƒ}ttttgdddgdddggƒ}t ||ƒ|ttttifk�sPt‚t tttƒtttƒ ƒdk�srt‚t t
ttƒtttƒƒdk�s’t‚t t
ttƒt
tttƒƒdk�s´t‚t ttttƒttttƒ ƒdk�sÚt‚t tttttƒtttttƒ ƒdk�st‚dS )z,
    Test working of bool_map function.
    r   rP   FN)r-   r   r[   rK   r   rs   rk   rl   rr   r   r   r   r\   r]   r   )r‰   Z	function1Z	function2rM   rM   rN   Útest_bool_mapi  s0    (
ÿ"ÿ2þÿÿ  ÿ
" "&r”   c                   C   st   t tdƒtkst‚t tddƒtks&t‚t tdƒtks8t‚t tddƒtksLt‚ttdƒtks^t‚ttdƒtkspt‚dS )zBTest that mixing symbols with boolean values
    works as expectedTFN)r   rI   rK   r/   r   r.   rM   rM   rM   rN   Útest_bool_symbol‚  s    r•   c                   C   sÞ   t dtƒdkst‚t ttƒdks$t‚ddks0t‚dtks<t‚dtkdksLt‚ddksXt‚dtksdt‚dtkdkstt‚tjdks‚t‚tt@ js�t‚ttB jsžt‚t jsªt‚ttA js¸t‚tjt ttƒksÌt‚t ttƒsÚt‚d S rf   )rg   r   rK   r.   r/   Z
is_BooleanrI   rJ   rM   rM   rM   rN   Útest_is_booleanŽ  s    r–   c                   C   s   t t@  t d¡tkst‚t t@  t d¡tks0t‚t t@  td¡t ksHt‚t t@  td¡tks`t‚t t@  t dtdi¡tks~t‚t tB  t d¡tks–t‚t tB  t d¡tks®t‚t tB  td¡tksÆt‚t tB  td¡t ksÞt‚t tB  t dtdi¡tksüt‚d S rv   )rI   rJ   ÚsubsrK   r/   r.   rM   rM   rM   rN   Ú	test_subs   s    r˜   c                  C   s>   t ttdƒƒ\} }| |@ || @ ks&t‚| |B || B ks:t‚dS )z$Test for commutativity of And and OrzA,BN)Úmapr   r
   rK   )rI   rJ   rM   rM   rN   Útest_commutative³  s    rš   c                   C   s    t t@ t@ t tt@ @ kst‚dS )zTest for associativity of AndN©rI   rJ   rL   rK   rM   rM   rM   rN   Útest_and_associativity»  s    rœ   c                   C   s    t tB tB t ttB B kst‚d S rj   r›   rM   rM   rM   rN   Útest_or_assicativityÁ  s    r�   c                  C   s   t ƒ } |   | kst‚d S rj   )r   rK   )r[   rM   rM   rN   Útest_double_negationÅ  s    rž   c                   C   s–   t tttdd�ƒt tB ks t‚t ttttƒ? ? ƒttttƒttƒƒttƒƒksTt‚t ttttt	ƒƒt tB t tB @ t t	B @ t	 tB @ ks’t‚d S )NF©Úevaluate)
r$   r   rI   rJ   rK   rL   r   r   r   rh   rM   rM   rM   rN   Útest_eliminate_implicationsÌ  s     ÿÿ&ÿr¡   c                   C   sx   t tt@ t@ ƒttthkst‚t ttB t@ ƒttB thks>t‚t tƒthksPt‚t dƒdhksbt‚t dƒdhkstt‚d S rv   )r    rI   rJ   rL   rK   rM   rM   rM   rN   Útest_conjunctsÔ  s
     r¢   c                   C   sz   t ttB tB ƒttthkst‚t ttB t@ ƒttB t@ hks@t‚t tƒthksRt‚t dƒdhksdt‚t dƒdhksvt‚d S rv   )r!   rI   rJ   rL   rK   rM   rM   rM   rN   Útest_disjunctsÜ  s
    "r£   c                   C   sŽ   t ttttƒtƒƒttttƒtttƒƒks.t‚ttttttƒƒƒttttƒtttƒƒks\t‚tttt	ttƒƒƒt	tttƒtttƒƒksŠt‚d S rj   )
r#   r   r   rI   rJ   rL   rK   r"   r7   r   rM   rM   rM   rN   Útest_distributeä  s    ..r¤   c               	   C   sˆ  t dƒ\} }}tt| |ƒƒt| |ƒks*t‚tt| |ƒƒt| |t| |ƒƒksNt‚ttt| |ƒt| |ƒ|ƒƒt| d| |@ dd�ks‚t‚ttt| |ƒt| |ƒt	| |ƒt| |ƒƒƒdks´t‚tt| t
|ƒt| |ƒt| |ƒt||ƒƒƒtdt||ƒt| ||ƒdd�k�st‚tt| |ƒƒt| |ƒk�s t‚tt
| ƒƒt| ddd�k�s@t‚tt| |ƒƒtdt| |ƒdd�k�sht‚tt| |ƒƒt| |dt| |ƒdd�k�s”t‚tt| |ƒƒt| dt| |ƒdd�k�s¾t‚tt| |ƒƒt| |ddd�k�sât‚tt| |B | |? ƒdd�tdtt| |ƒt| |ƒƒdd�k�s"t‚tt| |A | |@ ƒdd�tdtt| |ƒt| |ƒƒdd�k�sbt‚t| | |A | A  A ƒdk�s„t‚d S )Núx,y,zTF©Zremove_true)Údeep)r
   r5   r   rK   r   r   r   r   r   r   r   r   ©rk   rl   rr   rM   rM   rN   Útest_to_anfê  s.    $ÿ2(ÿ
 (,*$ÿ
ÿ
r©   c                   C   s  t tƒtkst‚t tƒtks t‚t tƒtks0t‚t tt B tB ƒtksJt‚t tt @ t@ ƒtksdt‚t tt? ƒt tB ks~t‚t ttttƒƒt tB t tB @ t tB @ ks°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�st‚t ttttƒƒt tB ttB @ k�s*t‚t t	ttB tB ƒƒt t @ t @ k�sVt‚t t	tt@ t@ ƒƒt t B t B k�s‚t‚t t	tt? ƒƒtt @ k�s¢t‚t t	ttttƒƒƒt
ttttƒtt t t ƒƒk�sÜt‚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�s2t‚t t	ttttƒƒƒt t B tt B @ k�sbt‚t tt? tt? A ƒtt @ t t@ B k�s�t‚t tt? tt? A dƒt t B tB tB tt @ t t@ B @ k�sÔt‚ttddƒ  ¡ tk�sît‚ttddƒ  ¡ t k�s
t‚ttdd„ ƒ d S )NFrP   r   c                   S   s   t tdk dgtƒ ¡ S rŒ   )r   rI   rJ   r)   rM   rM   rM   rN   rS     rT   ztest_to_nnf.<locals>.<lambda>)r)   r.   rK   r/   rI   rJ   r   rL   r   r   r   r   rC   rY   rM   rM   rM   rN   Útest_to_nnf  s4    2:ÿ
(,, ::ÿ
0.&ÿ
rª   c                	   C   s¨  t ttB  ƒtttƒttƒƒks$t‚t tt@ tB ƒttttƒtttƒƒksNt‚t tt? ƒt tB ksht‚t ttt@ ? ƒt tB t tB @ ks�t‚t tttB @ t ttB @ B dƒttB ks¼t‚t tt@ ƒtttƒksÖt‚t tttƒƒtttttƒƒttttƒƒƒk�st‚t tttt@ ƒƒt tB t tB @ t t B tB @ k�sDt‚t ttttB ƒdƒttttƒtƒtttƒtƒtttttƒƒƒk�sŠt‚t td ƒtd k�s¤t‚d S ©NTrP   )	r*   rJ   rL   r   r   rK   rI   r   r   rM   rM   rM   rN   Útest_to_cnf  s    $*(,2"ÿ
*ÿ
r¬   c                     s  t dƒ\} }}}}}}}}}	}
}}}}| |@ |@ |@ |@ |@ |@ |@ |@ | |@ |@ |@ |@ |@ |@ |	@ |@ B | |
@ |@ |@ |@ |@ |@ |@ |@ B ‰ ttˆ ƒƒs¢t‚tt‡ fdd„ƒ tttftt	fƒD ]H\}}|| ||||||||ƒ	‰ tt‡ fdd„ƒ |ˆ ddd�ˆ ksÆt‚qÆd S )Nzx1:16c                      s   t ˆ dd�S ©NTr   ©r*   rM   ©ÚeqrM   rN   rS   3  rT   z"test_issue_18904.<locals>.<lambda>c                      s   t ˆ dd�S r­   r®   rM   r¯   rM   rN   rS   6  rT   T)r   Úforce)
r
   r&   r*   rK   rC   r{   Úzipr   r   r+   )Úx1Zx2Zx3Zx4Zx5Zx6Zx7Zx8Zx9Úx10Zx11Zx12Zx13Zx14Zx15r�   ÚtrM   r¯   rN   Útest_issue_18904-  s    &""ÿ"þr¶   c                   C   s(   t ttdktdktdk @ B ƒƒs$t‚d S )NéûÿÿÿrR   é   )r&   r*   r\   r[   rK   rM   rM   rM   rN   Útest_issue_9949:  s    r¹   c                   C   s  t  t  ttB  ¡¡tttB  ƒks(t‚t  t  tt@ tB ¡¡ttt@ tB ƒksTt‚t  t  tt? ¡¡ttt? ƒksxt‚t  t  ttt@ ? ¡¡tttt@ ? ƒks¤t‚t  t  tttB @ t ttB @ B ¡¡ttttB @ t ttB @ B ƒksìt‚t  t  tt@ ¡¡ttt@ ƒk�st‚d S rj   )rB   Z
CNF_to_cnfZto_CNFrJ   rL   r*   rK   rI   rM   rM   rM   rN   Útest_to_CNF>  s    (,$,Hrº   c                   C   s<  t ttB  ƒtttƒttƒƒks$t‚t tttB @ ƒttttƒtttƒƒksNt‚t tt? ƒt tB ksht‚t ttt@ ? ƒt tt@ B ksŠt‚t ttB ƒttB ks¢t‚t tttƒdƒttttƒtttƒttƒƒƒksÔt‚t tttt@ ƒdƒtttttƒtttƒttƒƒtttƒttƒƒƒk�st‚t td ƒtd k�s8t‚d S r«   )	r+   rJ   rL   r   r   rK   rI   r   r   rM   rM   rM   rN   Útest_to_dnfG  s    $*"ÿ.ÿ
r»   c                     s–   t ttdƒƒ\} }}‡ fdd„‰ ˆ t| |B || B g| ||gƒƒˆ ddgddggƒksXt‚ˆ t| |B ||  B g| ||gƒƒˆ ddgddggƒks’t‚d S )Nr¥   c                    s6   zt ‡ fdd„| D ƒƒW S  tk
r0   |  Y S X d S )Nc                 3   s   | ]}ˆ |ƒV  qd S rj   rM   )rV   rk   ©Úsorted_recursiverM   rN   Ú	<genexpr>Z  s     z=test_to_int_repr.<locals>.sorted_recursive.<locals>.<genexpr>)ÚsortedrY   )Úargr¼   rM   rN   r½   X  s    z*test_to_int_repr.<locals>.sorted_recursiverP   rR   rƒ   r�   )r™   r   r
   r,   rK   r¨   rM   r¼   rN   Útest_to_int_reprU  s    ÿ ÿrÁ   c                  C   s¬   t dƒ\} }ttƒdkst‚ttƒdks,t‚t| ƒdks<t‚tt| |ƒƒdksRt‚tt| |t| |ƒƒƒdkspt‚tt| |t| |ƒƒƒdksŽt‚ttt| ƒ|ƒƒdks¨t‚d S )Núx,yTF)	r
   r6   r.   rK   r/   r   r   r   r   ©rk   rl   rM   rM   rN   Útest_is_anfd  s    rÄ   c                   C   s  t tƒdkst‚t tƒdks t‚t t ƒdks2t‚t tt@ ƒdksFt‚t tt@ t t@ B t t@ B t t @ B dƒdks|t‚t ttB t t B @ ƒdksœt‚t ttttƒƒƒdks¶t‚t ttA ƒdksÊt‚t tt@ t t@ B t t@ B t t @ B dƒdk�st‚d S rv   )r%   r.   rK   rI   rJ   r   r   rM   rM   rM   rN   Útest_is_nnfo  s    6 rÅ   c                   C   sŽ   t tƒdkst‚t ttB tB ƒdks(t‚t tt@ t@ ƒdks@t‚t ttB t@ ƒdksXt‚t tt@ tB ƒdkspt‚t tt@  tB ƒdksŠt‚d S rv   )r&   rk   rK   rl   rr   rM   rM   rM   rN   Útest_is_cnf{  s    rÆ   c                   C   sŽ   t tƒdkst‚t ttB tB ƒdks(t‚t tt@ t@ ƒdks@t‚t tt@ tB ƒdksXt‚t ttB t@ ƒdkspt‚t ttB  t@ ƒdksŠt‚d S rv   )r'   rk   rK   rl   rr   rM   rM   rM   rN   Útest_is_dnf„  s    rÇ   c                  C   s¢  t dƒ\} }}tdddƒtks"t‚tdddƒtks6t‚tdddƒtksJt‚tdddƒtks^t‚tt| ||ƒtƒstt‚d} t| ||ƒ|ksŒt‚d} t| ||ƒ|ks¤t‚d}tt| |ƒ||ƒ|ksÂt‚tt| dƒt|dƒdƒtksât‚tt| |ƒt	tƒksút‚tt|| ƒtk�st‚tdtt
ƒtk�s&t‚tdtt
ƒt
k�s<t‚ttdd„ ƒ ttdd„ ƒ ttd	d„ ƒ ttd
d„ ƒ tdddƒtjk�sŒt‚ttddddd�tƒ�s¨t‚tttdƒt
tƒttt
tƒk�sÌt‚tttdƒt
tƒtt t
tƒk�sòt‚tttdƒt
tƒtt t
tƒk�st‚tttdƒt
tƒttt
tƒk�s<t‚tttjtƒt
tƒttt
tƒk�sbt‚tttjtƒt
tƒtt t
tƒk�sŠt‚tttjtƒt
tƒtt t
tƒk�s²t‚tttjtƒt
tƒttt
tƒk�sØt‚tttdƒt
tƒtk�sôt‚tttdƒt
tƒtk�st‚tttdƒt
tƒt
k�s,t‚tttdƒt
tƒt
k�sHt‚tttdƒt
tƒ td¡t
k�slt‚tttdƒt
tƒ td¡tk�s�t‚ttdd„ ƒ d S )NzA:CTFrP   r   c                   S   s   t dttƒS rQ   )r   rk   rl   rM   rM   rM   rN   rS      rT   ztest_ITE.<locals>.<lambda>c                   S   s   t dg tƒS rŒ   ©r   rl   rM   rM   rM   rN   rS   ¡  rT   c                   S   s   t ddtƒS )NrP   rM   rÈ   rM   rM   rM   rN   rS   ¢  rT   c                   S   s   t dtg ƒS rŒ   rÈ   rM   rM   rM   rN   rS   £  rT   rŸ   c                   S   s   t tdktttƒS rŒ   )r   rk   rl   rr   rM   rM   rM   rN   rS   ¸  rT   )r
   r   r/   rK   r.   rg   r   r   rk   r   rl   rC   rY   r   r   r   rr   r—   r{   )rI   rJ   rL   rM   rM   rN   Útest_ITE�  sL     $&&$&((&$$rÉ   c                   C   sè   t dƒdkst‚t dƒdks t‚t tƒdks0t‚t t ƒdksBt‚t tttƒƒdksXt‚t t t¡ƒdksnt‚t tt t¡ƒƒdksˆt‚t tttƒƒdksžt‚t tt t¡t t¡ƒƒdksÀt‚t t	dk ƒsÐt‚t t	t
 dk ƒrät‚d S )NTFrƒ   )r1   rK   rI   r   rJ   r   Úzeror   r   rk   rl   rM   rM   rM   rN   Útest_is_literal»  s    "rË   c                   C   sò  dt @ t d@   krt ks"n t‚dt @ t d@   kr>dksDn t‚t t@ tt tƒksZt‚dt B t dB   krvdks|n t‚dt B t dB   kr˜t ksžn t‚t tB tt tƒks´t‚t  tt ƒksÆt‚dt ? t d>   krât ksèn t‚dt ? t d>   k�rdk�sn t‚t d? dt >   k�r.dk�s4n t‚t d? dt >   k�rVt  k�s\n t‚t t? tt >   k�r‚tt tƒk�sˆn t‚dt A t dA   k�rªt  k�s°n t‚dt A t dA   k�rÐt k�sÖn t‚t tA tt tƒk�sît‚d S rv   )rI   rK   rJ   r   r   r   r   r   rM   rM   rM   rN   Útest_operatorsÉ  s    """""&&(,(&rÌ   c                  C   s  t tj kst‚ttjkst‚t dk	s(t‚tdk	s4t‚t s<t‚trDt‚t dksPt‚tdks\t‚t dkrht‚tdkrtt‚t tkr€t‚tt ƒtdƒks”t‚ttƒtdƒks¨t‚tt dhƒttdhƒ  krÌdksÒn t‚tt tƒsàt‚tttƒsît‚tt tƒrüt‚tttƒ�rt‚t	t ƒtk�st‚t	dƒtk�s0t‚t	tƒt k�sBt‚t	dƒt k�sTt‚t  tk�sdt‚t t k�stt‚t
dt fdtfƒD �]f\} }t| |ƒtk�s¤t‚t|| ƒtk�s¸t‚t||ƒtk�sÌt‚t| | ƒt k�sàt‚t| tƒtk�sôt‚t|tƒtk�st‚| dk�r|dk�s@| |@ tk�s.t‚|| @ tk�s@t‚|dk	�r\||@ tk�s\t‚| dk	�rx| | @ t k�sxt‚t| |ƒt k�sŒt‚t|| ƒt k�s t‚t||ƒtk�s´t‚t| | ƒt k�sÈt‚t| tƒt k�sÜt‚t|tƒtk�sðt‚| dk�r|dk�s(| |B t k�st‚|| B t k�s(t‚|dk	�rD||B tk�sDt‚| dk	�r`| | B t k�s`t‚t| |ƒt k�stt‚t|| ƒt k�sˆt‚t||ƒtk�sœt‚t| | ƒtk�s°t‚t| tƒt k�sÆt‚t|tƒtk�sÚt‚| dk�rî|dk�s| |A t k�s t‚|| A t k�st‚|dk	�r.||A tk�s.t‚| dk	�rJ| | A tk�sJt‚t| |ƒt k�s^t‚t|| ƒt k�srt‚t||ƒt k�s†t‚t| | ƒtk�sšt‚t| tƒt k�s°t‚t|tƒt k�sÄt‚t| |ƒtk�sØt‚t|| ƒtk�sìt‚t||ƒt k�s t‚t| | ƒtk�st‚t| tƒtk�s(t‚t|tƒt k�s>t‚t| |ƒtk�sRt‚t|| ƒt k�sft‚t||ƒt k�szt‚t| | ƒt k�sŽt‚t| tƒtk�s¢t‚t|tƒt k�s¶t‚tt| ƒt k�sÊt‚tt|ƒt k�sàt‚| dk�rô|dk�s<| |? tk�st‚|| > tk�st‚|| ? t k�s*t‚| |> t k�s<t‚|dk	�rj||? t k�sXt‚||> t k�sjt‚| dk	�r˜| | ? t k�s†t‚| | > t k�s˜t‚t| |ƒtk�s¬t‚t|| ƒtk�sÀt‚t||ƒt k�sÔt‚t| | ƒt k�sèt‚t| tƒtk�süt‚t|tƒt k�st‚tt| ƒtk�s&t‚tt|ƒt k�s<t‚t| | | ƒt k�sRt‚t| | |ƒt k�sht‚t| || ƒtk�s~t‚t| ||ƒtk�s”t‚t|| | ƒt k�sªt‚t|| |ƒtk�sÀt‚t||| ƒt k�sÖt‚t|||ƒtk�s†t‚�q†tdd„ tj tjfD ƒƒ�st‚d S )NTFrP   c                 s   s   | ]}|  d d¡|kV  qdS )rP   rR   Nr   rU   rM   rM   rN   r¾   _  s     z"test_true_false.<locals>.<genexpr>)r.   r   rK   r/   ÚhashÚlenrg   r0   Úboolr   rH   r   rk   r   r   r   r   r   r   r   Úall)ÚTÚFrM   rM   rN   Útest_true_falseÜ  sà    *







rÓ   c                   C   s°  t tdkdtdkƒ ¡ tdtƒks&t‚ttdktdkƒ ¡ tddƒksJt‚ttdktdkƒ ¡ tt dƒtdtƒ kszt‚t	tdkƒ ¡ tt dƒksšt‚t	ttdktdk ƒƒ ¡ t
tt dƒtdtƒƒksÐt‚t ¡ tjksât‚t ¡ tjksôt‚t ¡ tjk�st‚tttdk tdkƒtdk ƒ ¡ t t d¡k�s<t‚ttdk ttƒdk ƒ ¡ tdk  ¡ k�sht‚ttdd„ ƒ td	tdt ƒd tdt ƒd  ƒ ¡ tjk�s¬t‚d S )
Nr   FrP   rR   éþÿÿÿrƒ   c                   S   s   t tƒdk  ¡ S rŒ   )r   rk   Úas_setrM   rM   rM   rN   rS   o  rT   z"test_bool_as_set.<locals>.<lambda>r�   )r   rl   rÕ   r   r   rK   r   rk   r   r   r   r.   r   ZUniversalSetr/   ZEmptySetÚopenr   rC   r�   r   r   rM   rM   rM   rN   Útest_bool_as_setb  s    &$0 ÿ4,r×   c                  C   s„   t dƒ\} }t| dk|dkƒ ¡ tdtƒtdtƒ ks:t‚t| dk|dkƒ ¡ tjtj tt dddƒtt dddƒ  ks€t‚d S )NrÂ   r   T)	r
   r   rÕ   r   r   rK   r   r   ZRealsrÃ   rM   rM   rN   Útest_multivariate_bool_as_sett  s
    .ÿrØ   c                  C   s–   t ddd�} | t k| tkf}t|Ž }|jtkrTt|jƒt|ƒ| tj¡ ks`t	‚n|dks`t	‚t
|Ž }|jt
kr†t|jƒdks’t	‚n|dks’t	‚d S )Nrk   T)Zextended_realrR   )r
   r   r   ÚfuncrÎ   ÚargsÚcountr   r.   rK   r   )rk   rÚ   ÚvrM   rM   rN   Útest_all_or_nothing}  s    
$
rÝ   c                   C   s    t jt kst‚tjtkst‚d S rj   )r.   rZ   rK   r/   rM   rM   rM   rN   Útest_canonical_atomsŒ  s    rÞ   c                   C   s    t jtkst‚tjt kst‚d S rj   )r.   Znegatedr/   rK   rM   rM   rM   rN   Útest_negated_atoms‘  s    rß   c                   C   sŠ   t tdkttk ƒ ¡ tdtdd�ks(t‚t tdkttk ƒ ¡ tdtƒksLt‚ttk  ¡ tt tƒksht‚tt k ¡ tt tƒks†t‚d S )NrR   T)Z	left_openrP   )r   rk   r   rÕ   r   rK   rM   rM   rM   rN   Ú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sFt‚d S )NrÔ   rR   )r   r   r   rk   rÕ   r   rK   rM   rM   rM   rN   Útest_issue_8975�  s    *ÿrá   c                   C   s2   t dddddddgƒdkst‚t dƒdks.t‚d S )NrP   r   éR   Z0010101000111001i9*  )r2   rK   rM   rM   rM   rN   Útest_term_to_integer¢  s    rã   c                  C   s  t dƒ\} }}}| |@ |@ | |@ B }| | |@ |¡||@ |B ksDt‚| | |@ |@ |¡| |@ |B ksht‚| |B |B | |B @ }| | |B |¡||B |@ ksœt‚| | |B |B |¡| |B |@ ksÀt‚| |A |A | |A @ }| | |A |¡||A |@ ksôt‚| | |A |A |¡| |A |@ k�st‚d S )Nza b c d)r
   r—   rK   )r[   r\   r]   r�   r�   rM   rM   rN   Útest_issue_21971§  s     $ $ rä   c                   C   sÌ   t ttttƒttgdd�ƒddddgks,t‚t tttB ttgdd�ƒddddgksVt‚t ttt? ttgdd�ƒddddgks€t‚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Èt‚d S )NF)ÚinputTr   rP   )Úlistr3   r   rk   rl   rK   rM   rM   rM   rN   Ú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 rj   rM   rM   ©rµ   rM   rN   rS   Ã  rT   z!test_issue_8571.<locals>.<lambda>c                      s   ˆ  S rj   rM   rM   rè   rM   rN   rS   Ä  rT   c                      s   t ˆ ƒS rj   )ÚabsrM   rè   rM   rN   rS   Å  rT   c                      s   t ˆ ƒS rj   )ÚintrM   rè   rM   rN   rS   Ç  rT   rR   c                      s   ˆ ˆ S rj   rM   rM   ©Úorµ   rM   rN   rS   Ë  rT   c                      s   ˆ ˆ S rj   rM   rM   rë   rM   rN   rS   Ì  rT   c                      s   ˆ ˆ S rj   rM   rM   rë   rM   rN   rS   Í  rT   c                      s   ˆ ˆ S rj   rM   rM   rë   rM   rN   rS   Î  rT   c                      s   ˆ ˆ S rj   rM   rM   rë   rM   rN   rS   Ï  rT   c                      s   ˆ ˆ S rj   rM   rM   rë   rM   rN   rS   Ð  rT   )	r   r.   r/   rC   rY   ZZeror|   rk   Úrange)Ú_rM   rë   rN   Útest_issue_8571Á  s    rï   c                  C   s‚   t ddd�} t ddd�\}}| ||  | d   ||  | d   dk }|tjk	sVt‚| ¡ tjksht‚|dk ¡ tjks~t‚d S )NÚnT)Únegativezp q)ÚpositiverP   r   )r
   r   r/   rK   Úexpandr.   )rð   ÚpÚqÚrrM   rM   rN   Útest_expand_relationalÔ  s    ,r÷   c                   C   s$   t jjdkst‚t jjdks t‚d S )NT)r   r.   Zis_AtomrK   r/   rM   rM   rM   rN   Útest_issue_12717Ý  s    rø   c                     s¦   t ddd�} tdd„ dtjd| fD ƒƒs,t‚t ddd�}td	d„ d
tjd|fD ƒƒsXt‚tdd„ ttdk fD ƒƒsvt‚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kV  qd S rj   )r4   r   r.   rU   rM   rM   rN   r¾   ä  s     z"test_as_Boolean.<locals>.<genexpr>rP   rr   )rÊ   c                 s   s   | ]}t |ƒtjkV  qd S rj   )r4   r   r/   rU   rM   rM   rN   r¾   æ  s     Fr   c                 s   s   | ]}t |ƒ|kV  qd S rj   ©r4   rU   rM   rM   rN   r¾   ç  s     rR   c                      s   t ˆ ƒS rj   rú   rM   ©rW   rM   rN   rS   é  rT   z!test_as_Boolean.<locals>.<lambda>)	r
   rÐ   r   r.   rK   r/   rk   rC   rY   )rù   rr   rM   rû   rN   Útest_as_Booleanâ  s      rü   c                  C   sD  t tdk ttƒjtthkst‚ttfD ]F} | tdƒjtƒ ks@t‚| tdƒjthksVt‚| tdƒjthks&t‚q&t	j
jtƒ ks€t‚t	jjtƒ ks’t‚tjthks¢t‚ttttdƒttdƒƒjtthksÈt‚t t¡jtƒ ksÞt‚t td¡jtƒ ksöt‚t t¡jthk�st‚t td¡jthk�s(t‚t t¡jtƒ k�s@t‚d S )NrP   TF)r   rk   rl   rr   Zbinary_symbolsrK   r   r   Úsetr   r.   r/   r   r   ÚprimeÚltZis_truer°   )r�   rM   rM   rN   Útest_binary_symbolsì  s    &r   c                   C   s,   t ttƒ t¡tdttdƒfdƒks(t‚d S )Nr   F)rP   T)r   rk   rl   Údiffr   r   rK   rM   rM   rM   rN   Útest_BooleanFunction_diffý  s    r  c               	   C   s6  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�sPt‚t|dƒ|
k�sdt‚ddddgddddgddddgddddgddddgddddgg}ddddgddddgddddgddddgg}tttttg|ƒtt @ tt@ t @ B k�s t‚tttttg||ƒtt @ tt@ t @ B k�s2t‚d S )NzA B C D E F G HZdnfZcnfr   rP   )r
   r(   rK   r   rs   rk   rl   rr   )rI   rJ   rL   rh   ÚErÒ   ÚGÚHrõ   ZsoldnfZsolcnfr‰   rŽ   rM   rM   rN   Útest_issue_14700  sŽ    8ÿÿÿþþþýýýüüû6ÿÿÿþþþýý.
ÿ
ÿÿþþý ý"ü(
 
ÿ,0ÿr  c                  C   s    t ttjƒ} t| ƒ| kst‚d S rj   )r   rk   r   ZIntegersr(   rK   )ZcondrM   rM   rN   Útest_issue_25115  s    r  c                  C   s"  t ddd�\} }}}t ddd�\}}t||k||k ƒ ¡ tjksDt‚t||k||kƒ ¡ tjksdt‚t||k| | kƒ ¡ tjksˆt‚t||k| | k ƒ ¡ tjks¬t‚t| | k||k ƒ ¡ tjksÐt‚t| | k| | kƒ ¡ tjksøt‚t| | k||kƒ ¡ tjk�st‚t| | k| | k ƒ ¡ tjk�sHt‚t||k||k ƒ ¡ tjk�sjt‚t||k||kƒ ¡ tjk�sŒt‚t||k| | kƒ ¡ tjk�s²t‚t||k| | k ƒ ¡ tjk�sØt‚t| | k||k ƒ ¡ tjk�sþt‚t| | k||kƒ ¡ tjk�s$t‚t| | k| | kƒ ¡ tjk�sNt‚t| | k| | k ƒ ¡ tjk�sxt‚t||k ||kƒ ¡ tjk�sšt‚t||k||kƒ ¡ tjk�s¼t‚t| | k||kƒ ¡ tjk�sât‚t| | k ||kƒ ¡ tjk�st‚t||k | | kƒ ¡ tjk�s.t‚t| | k| | kƒ ¡ tjk�sXt‚t||k| | kƒ ¡ tjk�s~t‚t| | k | | kƒ ¡ tjk�s¨t‚t||k ||kƒ ¡ tjk�sÊt‚t||k||kƒ ¡ tjk�sìt‚t| | k||kƒ ¡ tjk�st‚t| | k ||kƒ ¡ tjk�s8t‚t||k | | kƒ ¡ tjk�s^t‚t||k| | kƒ ¡ tjk�s„t‚t| | k| | kƒ ¡ tjk�s®t‚t| | k | | kƒ ¡ tjk�sØt‚t||k| |k ||kƒ ¡ tjk�s t‚t||k||k ƒ ¡ tjk�s"t‚t||kt||ƒƒ ¡ ||kk�sHt‚t||kt||ƒƒ ¡ t||ƒk�spt‚tt||ƒ|dkd|k |dk||k ƒ ¡ t||ƒ|dk@ |dk@ ||k@ k�sÂt‚tt||ƒ||k| |k ||k ƒ ¡ ||k||kB | |k B k�st‚tt||ƒ||k| |k ||k||k ƒ ¡ t||ƒ||k@ | |k @ k�sNt‚tt||ƒ|dkd|k |dk||k ƒ ¡ t||ƒ|dk@ |dk@ ||k@ k�s t‚t||ƒt||ƒ@ ||k@ ||k@  ¡ t||ƒt||ƒ@ ||k@ k�sêt‚tt||ƒt|| ƒƒ ¡ tt|d	ƒt|d	ƒƒk�s"t‚t	||k||kƒ ¡ t
||ƒk�sHt‚t|dk|d
k t||ƒƒ ¡ tjk�srt‚t||kt|d	ƒƒ ¡ t|d	kt|d	ƒƒk�s¤t‚tt
|dƒt
|dƒƒ ¡ tjk�sÊt‚tt|dƒt
d|ƒƒ ¡ t|dƒk�sôt‚tt|dƒt
d|ƒƒ ¡ t
|dƒk�st‚d S )Núw x y zT©Úrealúd eFrP   rR   r‡   r   r�   )r
   r   r   r   r.   rK   r   r/   r   r   r   )rs   rk   rl   rr   r�   r_   rM   rM   rN   Útest_relational_simplification$  sx      $$$(&*""&&&&**""&&&*&*""&&&&**("&(( ÿ
"ÿ
(ÿ
( ÿ
&ÿ
8&*2&*r  c                  C   s�   t ddd�} t| dk | dkƒ ¡ tjks,t‚t| dk | dkƒ ¡ tjksLt‚t| dk | dkƒ ¡ tjkslt‚t| dk| dkƒ ¡ tjksŒt‚d S )Nrk   Tr	  rP   r�   )r
   r   r   r   r.   rK   r   r/   ©rk   rM   rM   rN   Útest_issue_8373f  s
       r  c                  C   s4   t ddd�} tt| dƒt| dƒƒ ¡ tjks0t‚d S )Nrk   Tr	  rP   rR   )r
   r   r   r   r   r/   rK   r  rM   rM   rN   Ú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s8t	d 
| ||¡ƒ‚q8d S )NrP   zHOriginal: {}
and simplified: {}
do not evaluate to the same value for {})Zfree_symbolsrÎ   ræ   rý   rF   rí   Údictr²   r—   rK   Úformat)	ÚoriginalÚ
simplifiedÚsymbrð   Ú	valuelistÚvaluesÚsublistÚoriginalvalueÚsimplifiedvaluerM   rM   rN   Ú(test_simplification_numerically_functionu  s    &

  þz\test_relational_simplification_numerically.<locals>.test_simplification_numerically_functionr  Tr	  r  FrP   rR   r‡   r�   )r
   r   r   r   r   )	r  rs   rk   rl   rr   r�   r_   ZexpressionsÚ
expressionrM   rM   rN   Ú*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ºtd |d ||¡ƒ‚qºqœq�d S )Nr   ©ÚWild)Ú_simplify_patterns_andÚ_simplify_patterns_orÚ_simplify_patterns_xorr[   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 ©rR   NrM   ©rV   rs   rM   rM   rN   r¾   Ÿ  s     zQtest_relational_simplification_patterns_numerically.<locals>.<listcomp>.<genexpr>©Úany©rV   rÜ   rM   rM   rN   Ú
<listcomp>Ÿ  s       zGtest_relational_simplification_patterns_numerically.<locals>.<listcomp>rP   ú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²   ÚxreplacerK   r  )r  r  r   r!  r[   r\   r]   r  Úpatternlistsr  rÙ   ÚpatternlistÚpatternr  r  r  r  r  r  rM   rM   rN   Ú3test_relational_simplification_patterns_numerically’  s2    
þ 

  þ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sPt‚d S )Nrð   rƒ   r   )r
   r   rK   )rð   rM   rM   rN   Útest_issue_16803­  s    "ÿr0  c                      sŽ   t ttti‰ tt t dkt t dk ƒ ˆ ¡s0t‚tt t dk t t dk ƒ ˆ ¡rTt‚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   rk   rl   r—   rM   ©rö   rM   rN   rS   ¸  rT   z"test_issue_17530.<locals>.<lambda>c                      s    t tt dktt dk ƒ ˆ ¡S r1  ©r   rk   rl   r—   rM   r2  rM   rN   rS   ¹  rT   c                      s    t tt dktt dk ƒ ˆ ¡S r1  r3  rM   r2  rM   rN   rS   º  rT   )	rk   r   rl   r   r—   rK   r   rC   rY   rM   rM   r2  rN   Útest_issue_17530´  s    $$r4  c                   C   sÜ   t ddgƒddgkst‚t ddddgƒddddgks8t‚t ddddgƒddddgksXt‚t ddddgƒddddgksxt‚t ddddgƒddddgks˜t‚t ddddgƒddddgks¸t‚t ddddgƒddddgksØt‚d S )NrP   r   )r8   rK   rM   rM   rM   rN   Útest_anf_coeffs½  s         r5  c                  C   s�   t dƒ\} }t| gddgƒdks$t‚t| gddgƒdks<t‚t| gddgƒt| ddd�ks^t‚t| |gddddgƒtdt| |ƒdd�ksŒt‚d S )NrÂ   rP   Tr   Fr¦   )r
   r9   rK   r   r   rÃ   rM   rM   rN   Útest_ANFformÇ  s    "ÿr6  c                  C   sP   t dƒ\} }td| |gƒt| |ƒks(t‚tddg| |gƒtt|ƒ| ƒksLt‚d S )NrÂ   rƒ   rP   r   )r
   r:   r   rK   r   rÃ   rM   rM   rN   Útest_bool_mintermÐ  s    r7  c                  C   sT   t dƒ\} }td| |gƒtt| ƒ|ƒks,t‚tddg| |gƒtt|ƒ| ƒksPt‚d S )NrÂ   rR   r   rP   )r
   r;   r   r   rK   rÃ   rM   rM   rN   Útest_bool_maxtermÖ  s     r8  c                  C   sF   t dƒ\} }td| |gƒ|ks"t‚tddg| |gƒt| |ƒksBt‚d S )NrÂ   rP   )r
   r<   rK   r   rÃ   rM   rM   rN   Útest_bool_monomialÜ  s    r9  c                   C   s@   t dddgdddgƒdkst‚t dddgdddgƒdks<t‚d S )Nr   rP   rR   r�   )r=   rK   rM   rM   rM   rN   Útest_check_pairâ  s    r:  c                  C   s\   t t@ tt @ B t t  @ B } tt @ tt @ B t  t @ B }t| dd�}|| |fksXt‚d S r­   )rJ   rL   rI   r+   rK   )ro   Zres1ÚresultrM   rM   rN   Útest_issue_19114ç  s    r<  c                  C   s€   t ttttgddddddddd	d
ddgƒ} tt @ tt@ t@ B tt @ t @ B tt @ t @ B tt @ t @ B }| |ks|t‚d S )NrP   rR   rƒ   r¸   r‡   é   é   é	   r…   é   é   r†   )r   r[   r\   r]   r�   rK   )r;  ÚexpectedrM   rM   rN   Útest_issue_20870ï  s    *$ÿÿrC  c                   C   sZ   t dddgtttgƒtttƒtttƒƒks.t‚t dddgtttgƒttttƒƒksVt‚d S ©Nr   rP   rƒ   )r>   rk   rl   rr   r   r   rK   rM   rM   rM   rN   Útest_convert_to_varsSOPö  s    .rE  c                   C   sV   t dddgtttgƒttttƒtƒks*t‚t dddgtttgƒtttƒtƒksRt‚d S rD  )r?   rk   rl   rr   r   r   rK   rM   rM   rM   rN   Útest_convert_to_varsPOSû  s    *rF  c                     sz   t dƒ\‰ ‰} }}ttˆ ˆƒƒdks(t‚tˆ ˆ| @ |@ |ˆ B A B ƒdksLt‚ttˆ dƒƒdksbt‚tt‡ ‡fdd„ƒ d S )Nza:erR   r?  Tr   c                      s   t ˆ ˆ ƒS rj   )rA   rM   ©r[   r\   rM   rN   rS     rT   z%test_gateinputcount.<locals>.<lambda>)r
   rA   r   rK   rC   rY   )r]   r�   r_   rM   rG  rN   Útest_gateinputcount   s
    $rH  c                   C   sx  t tdk tdk  ƒrt‚t tdk tdk ƒs.t‚t tdk dtkƒtjksJt‚t tdk tdk ƒtdk ksht‚t tdktdk ƒr€t‚t tdktdkƒs–t‚t tdkdtkƒtjks²t‚t tdktdkƒtdkksÐt‚t tdktdk ƒrèt‚t tdktdkƒsþt‚t tdkdtk ƒtjk�st‚t tdktdkƒtdkk�s<t‚t tdktdk ƒ�rVt‚t tdktdkƒ�snt‚t tdkdtkƒtjk�sŒt‚t tdktdkƒtdkk�s¬t‚t ttdƒttdƒ ƒ�rÊt‚t ttdƒttdƒƒ�sæt‚t ttdƒtdtƒƒtjk�st‚t ttdƒttdƒƒttdƒk�s.t‚t ttdƒttdƒ ƒ�rLt‚t ttdƒtdtƒƒtjk�snt‚t ttdƒttdƒƒ�sŠt‚t ttdƒttdƒƒttdƒk�s°t‚t ttdktdkƒtdkƒtdkk�sÚt‚t ttdktdkƒtdktdk@ ƒtjk�s
t‚t t	 
t¡t	 
t¡ƒtjk�s,t‚t t	 
t¡t	 t¡ƒtjk�sNt‚t t	 
t¡t	 t¡ƒt	 
t¡k�stt‚d S r1  )r   rk   rK   r   r.   rl   r   r   r   r   rò   rñ   r/   r
  rM   rM   rM   rN   Útest_refine  s:      "&"&*0""rI  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¢td |
d ||¡ƒ‚q¢q„qxd S )Nr   r  )Ú_simplify_patterns_and3r[   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"  rM   r#  rM   rM   rN   r¾   7  s     z[test_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>.<genexpr>r$  r&  rM   rM   rN   r'  7  s       zQtest_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>rP   r(  )r)  r  r*  rJ  r   ræ   rý   rF   rí   rÚ   r  r²   r+  rK   r  )r  rJ  r[   r\   r]   r  r,  r  rÙ   r-  r.  r  r  r  r  r  r  rM   rM   rN   Ú=test_relational_threeterm_simplification_patterns_numerically-  s,    
 

  þrK  c                  C   sJ   t tttƒtttƒƒ} t| t ƒs$t‚t| j	ƒtttƒtttƒhksFt‚d S rj   )
r   r   r[   r]   r   r\   rg   rK   rý   rÚ   r  rM   rM   rN   Útest_issue_25451E  s    rL  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   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/   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   rL   rh   r[   r\   r]   r�   r_   rs   rk   rl   rr   rO   rd   re   ri   rp   rq   rt   ru   rw   rx   ry   rz   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/  r0  r4  r5  r6  r7  r8  r9  r:  r<  rC  rE  rF  rH  rI  rK  rL  rM   rM   rM   rN   Ú<module>   sÎ   Ä		u			. 
	
B
	
	%