U
    —9%eÆ¾  ã                	   @   sJ  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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.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH d dlImJZJ d dlKmLZLmMZMmNZN d dlOmPZPmQZQmRZR edƒ\ZSZTZUZVedƒ\	ZWZXZYZZZ[Z\Z]Z^Z_dd„ Z`dd„ 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/d0„ Zod1d2„ Zpd3d4„ Zqd5d6„ Zrd7d8„ Zsd9d:„ Ztd;d<„ Zud=d>„ Zvd?d@„ ZwdAdB„ ZxdCdD„ ZydEdF„ ZzdGdH„ Z{dIdJ„ Z|dKdL„ Z}dMdN„ Z~dOdP„ ZdQdR„ Z€dSdT„ ZdUdV„ Z‚dWdX„ ZƒdYdZ„ Z„d[d\„ Z…d]d^„ Z†d_d`„ Z‡dadb„ Zˆdcdd„ Z‰dedf„ ZŠdgdh„ Z‹didj„ ZŒdkdl„ ZeMdmdn„ ƒZŽdodp„ Zdqdr„ Zdsdt„ Z‘dudv„ Z’dwdx„ Z“dydz„ Z”d{d|„ Z•d}d~„ Z–dd€„ Z—dd‚„ Z˜dƒd„„ Z™d…d†„ Zšd‡dˆ„ Z›d‰dŠ„ Zœd‹dŒ„ ZddŽ„ Zždd„ ZŸd‘d’„ Z eNd“d”„ ƒZ¡d•d–„ Z¢d—d˜„ Z£d™dš„ Z¤d›dœ„ Z¥ddž„ 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©Ú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   © rL   rL   ú]/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/logic/tests/test_boolalg.pyÚtest_overloading    s     rN   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d„ ƒ t tdk tdkƒtkst‚tdk} t | | jƒ| jks>t‚ttkttk ttkttkf\}}}}t ||||ƒt ||ƒks€t‚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   rH   rL   rL   rL   rM   Ú<lambda>:   ó    ztest_And.<locals>.<lambda>c                   S   s   t tdk tƒS rP   rR   rL   rL   rL   rM   rS   ;   rT   c                 S   s   h | ]}t |Ž ’qS rL   )r   ©Ú.0ÚirL   rL   rM   Ú	<setcomp>A   s     ztest_And.<locals>.<setcomp>r   )r   r-   rJ   rH   r.   rB   Ú	TypeErrorÚ	canonicalrI   rF   r   ÚaÚbr   Úc©ÚeÚgÚlÚgeÚlerL   rL   rM   Útest_And,   s,    $,rd   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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s~t‚d S )NTFrO   c                   S   s
   t dtƒS rP   ©r   rH   rL   rL   rL   rM   rS   S   rT   ztest_Or.<locals>.<lambda>c                   S   s   t tdk tƒS rP   re   rL   rL   rL   rM   rS   T   rT   )	r   r.   rJ   rH   r-   rB   rY   rZ   rI   r^   rL   rL   rM   Útest_OrE   s(    $rf   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 ©NTFrO   r   )
r   r.   rJ   rH   r-   rI   Ú
isinstancerK   ÚDrZ   )r_   rL   rL   rM   Útest_Xor\   s,     &">rj   c                  C   s.   t tA } |  t¡t tB t  t B @ ks*t‚d S ©N)ÚxÚyÚrewriter   rJ   ©ÚexprrL   rL   rM   Útest_rewrite_as_Andu   s    rq   c                  C   s.   t tA } |  t¡t t @ tt  @ B ks*t‚d S rk   )rl   rm   rn   r   rJ   ro   rL   rL   rM   Útest_rewrite_as_Orz   s    rr   c                  C   s<   t t@ tt @ B } |  t¡t t@  tt @  @  ks8t‚d S rk   )rm   ÚzÚwrn   r   rJ   ro   rL   rL   rM   Útest_rewrite_as_Nand   s    ru   c                  C   s4   t tt B @ } |  t¡t  tt B  B  ks0t‚d S rk   )rs   rm   rt   rn   r   rJ   ro   rL   rL   rM   Útest_rewrite_as_Nor„   s    rv   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   rL   rL   rL   rM   rS   Š   rT   ztest_Not.<locals>.<lambda>TFr   rO   rQ   )rB   rY   r   r.   rJ   r-   rL   rL   rL   rM   Útest_Not‰   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 rw   )r   r.   rJ   rH   r-   rL   rL   rL   rM   Ú	test_Nand’   s    ry   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 rw   )r   r-   rJ   rH   r.   rL   rL   rL   rM   Útest_Nor¡   s    rz   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 rw   )r   r-   rJ   rH   r.   rL   rL   rL   rM   Ú	test_Xnor°   s    r{   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 rk   )r   rH   rI   rK   rL   rL   rL   rM   rS   Ã   rT   ztest_Implies.<locals>.<lambda>TFr   rO   )
rB   Ú
ValueErrorr   r-   rJ   r.   rH   rI   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 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 rg   )r   rH   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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-   rJ   r.   rL   rL   rL   rM   Ú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 rk   )rH   rI   ÚequalsrL   rL   rL   rM   rS   ò   rT   ztest_equals.<locals>.<lambda>)r   r   rH   rI   r   r   rJ   r   rK   rB   ÚNotImplementedErrorrL   rL   rL   rM   Útest_equalsì   s    *$2"rƒ   c               	      sF
  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j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sJt‚t t @ t @ t t @ t@ B }tt|ƒ}t|ƒtt @ t @ ks”t‚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s–t‚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
sBt‚dS )z1
    Test working of simplification methods.
    r   rO   é   é   é   é   rQ   é   c                      s   t ttttgˆ ƒS rk   )r   rt   rl   rm   rs   rL   ©ÚmintermsrL   rM   rS   %  rT   z-test_simplification_boolalg.<locals>.<lambda>c                      s   t ttttgˆ ƒS rk   ©r   rt   rl   rm   rs   rL   r‰   rL   rM   rS   &  rT   c                   S   s   t ttttgdgƒS )NZabcdefgr‹   rL   rL   rL   rM   rS   (  rT   c                   S   s   t tttB @ ddS )NZblabla)Úform)r'   rH   rI   rK   rL   rL   rL   rM   rS   :  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 ©NrO   )r   rl   rL   rL   rL   rM   rS   O  rT   c                   S   s   t tgdggdggƒS r   )r   rl   rL   rL   rL   rM   rS   T  rT   FTéÿÿÿÿN)r   rl   rm   rs   r   r   r   rJ   r   r-   r	   rt   rB   r|   rY   rH   rI   rK   r'   r   r   r   r   r.   r   r
   r   r   )Zset1Zset2Ú	dontcaresZansr\   r_   r[   r]   ÚdÚfr`   ÚhÚjrp   rL   r‰   rM   Ú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   rO   FN)r,   r   r[   rJ   r   rt   rl   rm   rs   r   r   r   r\   r]   r   )rŠ   Z	function1Z	function2rL   rL   rM   Útest_bool_mapj  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   rH   rJ   r.   r   r-   rL   rL   rL   rM   Ú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st‚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 rg   )rh   r   rJ   r-   r.   Z
is_BooleanrH   rI   rL   rL   rL   rM   Ú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 rw   )rH   rI   ÚsubsrJ   r.   r-   rL   rL   rL   rM   Ú	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
   rJ   )rH   rI   rL   rL   rM   Útest_commutative´  s    r›   c                   C   s    t t@ t@ t tt@ @ kst‚dS )zTest for associativity of AndN©rH   rI   rK   rJ   rL   rL   rL   rM   Útest_and_associativity¼  s    r   c                   C   s    t tB tB t ttB B kst‚d S rk   rœ   rL   rL   rL   rM   Útest_or_assicativityÂ  s    rž   c                  C   s   t ƒ } |   | kst‚d S rk   )r   rJ   )r[   rL   rL   rM   Ú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   rH   rI   rJ   rK   r   r   r   ri   rL   rL   rL   rM   Ú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 rw   )r   rH   rI   rK   rJ   rL   rL   rL   rM   Ú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 rw   )r    rH   rI   rK   rJ   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.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 rk   )
r"   r   r   rH   rI   rK   rJ   r!   r6   r   rL   rL   rL   rM   Útest_distributeå  s    ..r¥   c               	   C   sf  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‚d S )Núx,y,zTF©Zremove_true)Údeep)r
   r4   r   rJ   r   r   r   r   r   r   r   r   ©rl   rm   rs   rL   rL   rM   Ú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st‚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 )NFrO   r   c                   S   s   t tdk dgtƒ ¡ S r   )r   rH   rI   r(   rL   rL   rL   rM   rS     rT   ztest_to_nnf.<locals>.<lambda>)r(   r-   rJ   r.   rH   rI   r   rK   r   r   r   r   rB   rY   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$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st‚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 ©NTrO   )	r)   rI   rK   r   r   rJ   rH   r   r   rL   rL   rL   rM   Ú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)   rL   ©ÚeqrL   rM   rS   2  rT   z"test_issue_18904.<locals>.<lambda>c                      s   t ˆ ddS r®   r¯   rL   r°   rL   rM   rS   5  rT   T)r   Úforce)
r
   r%   r)   rJ   rB   r|   Ú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$t‚d S )NéûÿÿÿrQ   é   )r%   r)   r\   r[   rJ   rL   rL   rL   rM   Útest_issue_99499  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 rk   )rA   Z
CNF_to_cnfZto_CNFrI   rK   r)   rJ   rH   rL   rL   rL   rM   Ú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*   rI   rK   r   r   rJ   rH   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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 rk   rL   )rV   rl   ©Úsorted_recursiverL   rM   Ú	<genexpr>Y  s     z=test_to_int_repr.<locals>.sorted_recursive.<locals>.<genexpr>)ÚsortedrY   )Úargr½   rL   rM   r¾   W  s    z*test_to_int_repr.<locals>.sorted_recursiverO   rQ   r„   rŽ   )rš   r   r
   r+   rJ   r©   rL   r½   rM   Útest_to_int_reprT  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
   r5   r-   rJ   r.   r   r   r   r   ©rl   rm   rL   rL   rM   Útest_is_anfc  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 rw   )r$   r-   rJ   rH   rI   r   r   rL   rL   rL   rM   Útest_is_nnfn  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 rw   )r%   rl   rJ   rm   rs   rL   rL   rL   rM   Útest_is_cnfz  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 rw   )r&   rl   rJ   rm   rs   rL   rL   rL   rM   Ú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dd„ ƒ 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sJt‚tttjtƒt
tƒttt
tƒkspt‚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sVt‚tttdƒt
tƒ td¡t
kszt‚tttdƒt
tƒ td¡tksžt‚ttdd„ ƒ d S )NzA:CTFrO   r   c                   S   s   t dttƒS rP   ©r   rl   rm   rL   rL   rL   rM   rS   Ÿ  rT   ztest_ITE.<locals>.<lambda>c                   S   s   t dg tƒS r   ©r   rm   rL   rL   rL   rM   rS      rT   c                   S   s   t ddtƒS )NrO   rL   rÊ   rL   rL   rL   rM   rS   ¡  rT   c                   S   s   t dtg ƒS r   rÊ   rL   rL   rL   rM   rS   ¢  rT   r    c                   S   s   t tdkttƒS r   rÉ   rL   rL   rL   rM   rS   ¦  rT   c                   S   s   t tdktttƒS r   )r   rl   rm   rs   rL   rL   rL   rM   rS   ¸  rT   )r
   r   r.   rJ   r-   rh   r   r   rl   r   rm   rB   rY   r   r   r   rs   r˜   r|   )rH   rI   rK   rL   rL   rM   Útest_ITEŒ  sN     $&&$&((&$$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„   )r0   rJ   rH   r   rI   r   Úzeror   r   rl   rm   rL   rL   rL   rM   Ú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 rw   )rH   rJ   rI   r   r   r   r   r   rL   rL   rL   rM   Ú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 )NTFrO   c                 s   s   | ]}|  d d¡|kV  qdS )rO   rQ   Nr   rU   rL   rL   rM   r¿   _  s     z"test_true_false.<locals>.<genexpr>)r-   r   rJ   r.   ÚhashÚlenrh   r/   Úboolr   rG   r   rl   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&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   FrO   rQ   éþÿÿÿr„   c                   S   s   t tƒdk  ¡ S r   )r   rl   Úas_setrL   rL   rL   rM   rS   o  rT   z"test_bool_as_set.<locals>.<lambda>rŽ   )r   rm   r×   r   r   rJ   r   rl   r   r   r   r-   r   ZUniversalSetr.   ZEmptySetÚopenr   rB   r‚   r   r   rL   rL   rL   rM   Ú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   rJ   r   r   ZRealsrÄ   rL   rL   rM   Ú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 )Nrl   T)Zextended_realrQ   )r
   r   r   ÚfuncrÐ   ÚargsÚcountr   r-   rJ   r   )rl   rÜ   ÚvrL   rL   rM   Útest_all_or_nothing}  s    
$
rß   c                   C   s    t jt kst‚tjtkst‚d S rk   )r-   rZ   rJ   r.   rL   rL   rL   rM   Útest_canonical_atomsŒ  s    rà   c                   C   s    t jtkst‚tjt kst‚d S rk   )r-   Znegatedr.   rJ   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(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 )NrQ   T)Z	left_openrO   )r   rl   r   r×   r   rJ   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sFt‚d S )NrÖ   rQ   )r   r   r   rl   r×   r   rJ   rL   rL   rL   rM   Ú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 )NrO   r   éR   Z0010101000111001i9*  )r1   rJ   rL   rL   rL   rM   Ú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˜   rJ   )r[   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ƒ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   rO   )Úlistr2   r   rl   rm   rJ   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 rk   rL   rL   ©r¶   rL   rM   rS   Ã  rT   z!test_issue_8571.<locals>.<lambda>c                      s   ˆ  S rk   rL   rL   rê   rL   rM   rS   Ä  rT   c                      s   t ˆ ƒS rk   )ÚabsrL   rê   rL   rM   rS   Å  rT   c                      s   t ˆ ƒS rk   )ÚintrL   rê   rL   rM   rS   Ç  rT   rQ   c                      s   ˆ ˆ S rk   rL   rL   ©Úor¶   rL   rM   rS   Ë  rT   c                      s   ˆ ˆ S rk   rL   rL   rí   rL   rM   rS   Ì  rT   c                      s   ˆ ˆ S rk   rL   rL   rí   rL   rM   rS   Í  rT   c                      s   ˆ ˆ S rk   rL   rL   rí   rL   rM   rS   Î  rT   c                      s   ˆ ˆ S rk   rL   rL   rí   rL   rM   rS   Ï  rT   c                      s   ˆ ˆ S rk   rL   rL   rí   rL   rM   rS   Ð  rT   )	r   r-   r.   rB   rY   ZZeror}   rl   Ú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k	sVt‚| ¡ tjksht‚|dk ¡ tjks~t‚d S )NÚnT)Únegativezp q)ÚpositiverO   r   )r
   r   r.   rJ   Úexpandr-   )rò   ÚpÚqÚrrL   rL   rM   Ú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_AtomrJ   r.   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,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 rk   )r3   r   r-   rU   rL   rL   rM   r¿   ä  s     z"test_as_Boolean.<locals>.<genexpr>rO   rs   )rÌ   c                 s   s   | ]}t |ƒtjkV  qd S rk   )r3   r   r.   rU   rL   rL   rM   r¿   æ  s     Fr   c                 s   s   | ]}t |ƒ|kV  qd S rk   ©r3   rU   rL   rL   rM   r¿   ç  s     rQ   c                      s   t ˆ ƒS rk   rü   rL   ©rW   rL   rM   rS   é  rT   z!test_as_Boolean.<locals>.<lambda>)	r
   rÒ   r   r-   rJ   r.   rl   rB   rY   )rû   rs   rL   rý   rM   Ú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 )NrO   TF)r   rl   rm   rs   Zbinary_symbolsrJ   r   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(t‚d S )Nr   F)rO   T)r   rl   rm   Údiffr   r   rJ   rL   rL   rL   rM   Ú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   rO   )r
   r'   rJ   r   rt   rl   rm   rs   )rH   rI   rK   ri   ÚErÔ   ÚGÚHr÷   ZsoldnfZsolcnfrŠ   r   rL   rL   rM   Útest_issue_14700  sŽ    8ÿÿÿþþþýýýüüû6ÿÿÿþþþýý.
ÿ
ÿÿþþý ý"ü(
 
ÿ,0ÿ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 eFrO   rQ   rˆ   r   rŽ   )r
   r   r   r   r-   rJ   r   r.   r   r   r   )rt   rl   rm   rs   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,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 )Nrl   Tr
  rO   rŽ   )r
   r   r   r   r-   rJ   r   r.   ©rl   rL   rL   rM   Útest_issue_8373`  s
       r  c                  C   s4   t ddd} tt| dƒt| dƒƒ ¡ tjks0t‚d S )Nrl   Tr
  rO   rQ   )r
   r   r   r   r   r.   rJ   r  rL   rL   rM   Útest_issue_7950h  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 )NrO   zHOriginal: {}
and simplified: {}
do not evaluate to the same value for {})Zfree_symbolsrÐ   rè   rÿ   rE   rï   Údictr³   r˜   rJ   Úformat)	ÚoriginalÚ
simplifiedÚsymbrò   Ú	valuelistÚvaluesÚsublistÚoriginalvalueÚsimplifiedvaluerL   rL   rM   Ú(test_simplification_numerically_functiono  s    &

  þz\test_relational_simplification_numerically.<locals>.test_simplification_numerically_functionr	  Tr
  r  FrO   rQ   rˆ   rŽ   )r
   r   r   r   r   )	r  rt   rl   rm   rs   r   r_   ZexpressionsZ
expressionrL   rL   rM   Ú*test_relational_simplification_numericallym  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œqd 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   g | ]}|d  ‘qS ©rQ   rL   ©rV   rt   rL   rL   rM   Ú
<listcomp>™  s     zRtest_relational_simplification_patterns_numerically.<locals>.<listcomp>.<listcomp>©Úany©rV   rÞ   rL   rL   rM   r$  ™  s       zGtest_relational_simplification_patterns_numerically.<locals>.<listcomp>rO   úGOriginal: {}
and simplified: {}
do not evaluate to the same value for{})Ú
sympy.corer  Úsympy.logic.boolalgr  r   r!  r   r   r   rè   rÿ   rE   rï   rÜ   r  r³   ÚxreplacerJ   r  )r  r  r   r!  r[   r\   r]   r  Úpatternlistsr  rÛ   ÚpatternlistÚpatternr  r  r  r  r  r  rL   rL   rM   Ú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   rJ   )rò   rL   rL   rM   Ú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   rl   rm   r˜   rL   ©rø   rL   rM   rS   ²  rT   z"test_issue_17530.<locals>.<lambda>c                      s    t tt dktt dk ƒ ˆ ¡S r1  ©r   rl   rm   r˜   rL   r2  rL   rM   rS   ³  rT   c                      s    t tt dktt dk ƒ ˆ ¡S r1  r3  rL   r2  rL   rM   rS   ´  rT   )	rl   r   rm   r   r˜   rJ   r   rB   rY   rL   rL   r2  rM   Ú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 )NrO   r   )r7   rJ   rL   rL   rL   rM   Ú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Ã   rO   Tr   Fr§   )r
   r8   rJ   r   r   rÄ   rL   rL   rM   Ú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„   rO   r   )r
   r9   r   rJ   r   rÄ   rL   rL   rM   Ú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Ã   rQ   r   rO   )r
   r:   r   r   rJ   rÄ   rL   rL   rM   Ú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Ã   rO   )r
   r;   rJ   r   rÄ   rL   rL   rM   Ú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   rO   rQ   rŽ   )r<   rJ   rL   rL   rL   rM   Ú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®   )rI   rK   rH   r*   rJ   )rp   Zres1ÚresultrL   rL   rM   Ú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 )NrO   rQ   r„   r¹   rˆ   é   é   é	   r†   é   é   r‡   )r   r[   r\   r]   r   rJ   )r;  ÚexpectedrL   rL   rM   Ú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   rO   r„   )r=   rl   rm   rs   r   r   rJ   rL   rL   rL   rM   Ú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>   rl   rm   rs   r   r   rJ   rL   rL   rL   rM   Ú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:erQ   r?  Tr   c                      s   t ˆ ˆ ƒS rk   )r@   rL   ©r[   r\   rL   rM   rS   ÿ  rT   z%test_gateinputcount.<locals>.<lambda>)r
   r@   r   rJ   rB   rY   )r]   r   r_   rL   rG  rM   Ú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   rl   rJ   r   r-   rm   r   r   r   r   rô   ró   r.   r  rL   rL   rL   rM   Ú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   g | ]}|d  ‘qS r"  rL   r#  rL   rL   rM   r$  1  s     z\test_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>.<listcomp>r%  r'  rL   rL   rM   r$  1  s       zQtest_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>rO   r(  )r)  r  r*  rJ  r   rè   rÿ   rE   rï   rÜ   r  r³   r+  rJ   r  )r  rJ  r[   r\   r]   r  r,  r  rÛ   r-  r.  r  r  r  r  r  r  rL   rL   rM   Ú=test_relational_threeterm_simplification_patterns_numerically'  s,    
 

  þrK  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.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.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   Zsympy.assumptions.cnfrA   Zsympy.testing.pytestrB   rC   rD   Ú	itertoolsrE   rF   rG   rH   rI   rK   ri   r[   r\   r]   r   r_   rt   rl   rm   rs   rN   rd   rf   rj   rq   rr   ru   rv   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   rL   rL   rM   Ú<module>   sÈ   Ä		u			/ 
	
B
	
	%