a
    rÀ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„ ZdRdS„ 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„ Zdjdk„ ZŽdldm„ ZeOdndo„ ƒZdpdq„ 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‰„ ZdŠd‹„ ZždŒd„ ZŸdŽd„ Z dd‘„ 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   úZ/var/www/html/assistant/venv/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	sJ ‚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sJ ‚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sJ ‚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sJ ‚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x9Ú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sJ ‚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expressionsÚ
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œqd 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/  r0  r   r   r   rò   r	  rF   rù   rå   r  r½   Úxreplacer   )r-  r.  r/  r0  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   rA  rL   rM   rR   ¹  rS   c                      s    t tt dktt dk ƒ ˆ ¡S r@  rB  rL   rA  rL   rM   rR   º  rS   )rj   r   rk   r   r¢   r   rC   rX   rL   rL   rA  rM   Útest_issue_17530´  s    $$rC  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sJ ‚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    rE  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±   rD  )r
   r9   r   r   rÎ   rL   rL   rM   Útest_ANFformÇ  s    "ÿrF  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    rG  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     rH  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    rI  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    rJ  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    rL  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š   )rK  ÚexpectedrL   rL   rM   Útest_issue_20870ï  s    $ÿÿrS  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    ,rU  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 rT  )r?   rj   rk   rq   r   r   rL   rL   rL   rM   Útest_convert_to_varsPOSû  s    (rV  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   rO  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   rW  rM   Útest_gateinputcount   s
    $rX  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""rY  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 r1  rL   r2  rL   rL   rM   rÉ   7  rS   z[test_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>.<genexpr>r3  r5  rL   rL   rM   r6  7  rS   zQtest_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>rO   r7  )r8  r-  r9  rZ  r   rò   r	  rF   rù   rå   r  r½   r:  r   )r-  rZ  rZ   r[   r\   r#  r;  r$  rä   r<  r=  r!  r"  r%  r&  r'  r(  rL   rL   rM   Ú=test_relational_threeterm_simplification_patterns_numerically-  s(    
 


þr[  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    r\  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   rK  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   r9  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?  rC  rE  rF  rG  rH  rI  rJ  rL  rS  rU  rV  rX  rY  r[  r\  r]  rL   rL   rL   rM   Ú<module>   sÐ   Ä		t			. 
	
C
	
	%