U
    ±Ëh¢¿  ã                	   @   sf  d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ d dlKmLZL d dlMmNZNmOZOmPZP d dlQmRZRmSZSmTZT ed\ZUZVZWZXed\	ZYZZZ[Z\Z]Z^Z_Z`Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhd d! Zid"d# Zjd$d% Zkd&d' Zld(d) Zmd*d+ Znd,d- Zod.d/ Zpd0d1 Zqd2d3 Zrd4d5 Zsd6d7 Ztd8d9 Zud:d; Zvd<d= Zwd>d? Zxd@dA ZydBdC ZzdDdE Z{dFdG Z|dHdI Z}dJdK Z~dLdM ZdNdO ZdPdQ ZdRdS ZdTdU ZdVdW ZdXdY ZdZd[ Zd\d] Zd^d_ Zd`da Zdbdc Zddde Zdfdg Zdhdi Zdjdk Zdldm ZeOdndo Zdpdq Zdrds Zdtdu Zdvdw Zdxdy Zdzd{ Zd|d} Zd~d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z dd Z¡dd Z¢dd Z£ePdd Z€dd Z¥dd ZŠdd Z§dd Zšd d¡ Z©d¢d£ Zªd€d¥ Z«dŠd§ Z¬dšd© Z­dªd« Z®d¬d­ Z¯d®d¯ Z°d°d± Z±d²d³ Z²dŽdµ Z³d¶d· ZŽdžd¹ ZµdºS )»é    )ÚQ)Úrefine)Úoo)ÚEqualityÚEqÚNe)ÚS)ÚDummyÚsymbols)Ú	Piecewise)ÚcosÚsin)ÚIntervalÚUnion)ÚContains©Úsimplify)/ÚAndÚBooleanÚ
EquivalentÚITEÚImpliesÚNandÚNorÚNotÚOrÚPOSformÚSOPformÚXorÚXnorÚ	conjunctsÚ	disjunctsÚdistribute_or_over_andÚdistribute_and_over_orÚeliminate_implicationsÚis_nnfÚis_cnfÚis_dnfÚsimplify_logicÚto_nnfÚto_cnfÚto_dnfÚto_int_reprÚbool_mapÚtrueÚfalseÚBooleanAtomÚ
is_literalÚterm_to_integerÚtruth_tableÚ
as_BooleanÚto_anfÚis_anfÚdistribute_xor_over_andÚ
anf_coeffsÚANFformÚbool_mintermÚbool_maxtermÚbool_monomialÚ_check_pairÚ_convert_to_varsSOPÚ_convert_to_varsPOSÚ	ExclusiveÚgateinputcount)ÚCNF)ÚraisesÚXFAILÚslow)ÚcombinationsÚpermutationsÚproductzA:Dza:e w:zc                   C   s€   t t@ tt tkstt tB tt tks,tt t@ tB ttt ttksLtt t? tt tksbtt t> ttt ksxtt  tt kstt tA tt tks tdS )z)Test that |, & are overloaded as expectedN)	ÚAÚBr   ÚAssertionErrorr   ÚCr   r   r   © rM   rM   úB/tmp/pip-unpacked-wheel-6t8vlncq/sympy/logic/tests/test_boolalg.pyÚtest_overloading!   s     rO   c                  C   sÚ  t  tkstt ttkstt dtks.tt dtks>tt ddtksPtt ddtksbtt ddtksttt dttkstt dttkstt dddtks¬tt ddttksÀtt ddttksÔtt dttksætttdd  t tdk tdktksttdk} t | | j| jks0tttkttk ttkttkf\}}}}t ||||t ||ksrtdd t	||||fD t ||hkstt t t
tdt
tdt ttdt
tdtksÖtd S )	NTFé   c                   S   s
   t dtS ©Né   )r   rI   rM   rM   rM   rN   Ú<lambda>;   ó    ztest_And.<locals>.<lambda>c                 S   s   h | ]}t | qS rM   )r   ©Ú.0ÚirM   rM   rN   Ú	<setcomp>A   s     ztest_And.<locals>.<setcomp>r   )r   r.   rK   rI   r/   rC   Ú	TypeErrorÚ	canonicalrJ   rG   r   ÚaÚbr   Úc©ÚeÚgÚlÚgeÚlerM   rM   rN   Útest_And-   s*    $,rd   c                  C   st  t  tkstt ttkstt dtks.tt dtks>tt ddtksPtt ddtksbtt ddtksttt dttkstt dttkstt dddtks¬tt ddttksÀtt ddttksÔtt dttksætttdd  t tdk tdktksttdk} t | | j| ks.tttkttk ttkttkf\}}}}t ||||t ||ksptd S )NTFrP   c                   S   s
   t dtS rQ   )r   rI   rM   rM   rM   rN   rS   S   rT   ztest_Or.<locals>.<lambda>)	r   r/   rK   rI   r.   rC   rY   rZ   rJ   r^   rM   rM   rN   Útest_OrE   s&    $re   c                  C   s  t  tkstt ttkstt tttks0tt dtttksDtt ttttttks\tt dddttt tt ks|tt dtkstt dtkstt ddtks®tt ddtksÀtt ddtksÒtt dtt ksætt dttksøtt dddtkstt ddtt ks&tt ddttks<ttt ttt sRtt ttt ttt ttttksxtt ttt ttt ttkstt tdk tdktt ddt  krÒt ddtksØn ttdk} t | | j	t dd  krt ddksn td S ©NTFrP   r   )
r   r/   rK   rI   r.   rJ   Ú
isinstancerL   ÚDrZ   )r_   rM   rM   rN   Útest_Xor[   s,     &">ri   c                  C   s.   t tA } |  t¡t tB t  t B @ ks*td S ©N)ÚxÚyÚrewriter   rK   ©ÚexprrM   rM   rN   Útest_rewrite_as_Andt   s    rp   c                  C   s.   t tA } |  t¡t t @ tt  @ B ks*td S rj   )rk   rl   rm   r   rK   rn   rM   rM   rN   Útest_rewrite_as_Ory   s    rq   c                  C   s<   t t@ tt @ B } |  t¡t t@  tt @  @  ks8td S rj   )rl   ÚzÚwrm   r   rK   rn   rM   rM   rN   Útest_rewrite_as_Nand~   s    rt   c                  C   s4   t tt B @ } |  t¡t  tt B  B  ks0td S rj   )rr   rl   rs   rm   r   rK   rn   rM   rM   rN   Útest_rewrite_as_Nor   s    ru   c                   C   sb   t tdd  tdtksttdtks.ttdtks>ttdtksNttdtks^td S )Nc                   S   s
   t ddS ©NTF)r   rM   rM   rM   rN   rS      rT   ztest_Not.<locals>.<lambda>TFr   rP   rR   )rC   rY   r   r/   rK   r.   rM   rM   rM   rN   Útest_Not   s    rw   c                   C   sÞ   t  tkstt tt ks tt dtks0tt dtks@tt ddtksRtt ddtksdtt ddtksvtt dtt kstt dttkstt dddtks°tt ddtt ksÆtt ddttksÚtd S rv   )r   r/   rK   rI   r.   rM   rM   rM   rN   Ú	test_Nand   s    rx   c                   C   sÜ   t  tkstt tt ks tt dtks0tt dtks@tt ddtksRtt ddtksdtt ddtksvtt dttkstt dtt kstt dddtks°tt ddttksÄtt ddttksØtd S rv   )r   r.   rK   rI   r/   rM   rM   rM   rN   Útest_Nor    s    ry   c                   C   s"  t  tkstt tt ks tt tttks2tt dtttksFtt tttttt ks`tt dtksptt dtkstt ddtkstt ddtks€tt ddtks¶tt dttksÈtt dtt ksÜtt dddtksðtt ddttkstt ddtt kstd S rv   )r   r.   rK   rI   r/   rM   rM   rM   rN   Ú	test_Xnor¯   s    rz   c                   C   sê   t tdd  tddtks ttddtks2ttddtksDttddtksVttdttkshttddtkszttddtksttt? tt> ks ttdk tdk? tdkksŒttdk tj	tk? tksÖttt? tksætd S )Nc                   S   s   t tttS rj   )r   rI   rJ   rL   rM   rM   rM   rN   rS   Â   rT   ztest_Implies.<locals>.<lambda>TFr   rP   )
rC   Ú
ValueErrorr   r.   rK   r/   rI   rJ   r   ÚOnerM   rM   rM   rN   Útest_ImpliesÁ   s    r}   c                   C   s  t ttt tt  kr(t tttks.n tt  tks<tt ttt t  krZtks`n tt ddt dd  krtksn tt ddt dd  krŠtks¬n tt tdtksŸtt tdttksÔtt ttdtt@ ksìtt ttdt t @ ks
tt dttkstt dtttks6tt tt ttt t tttks\tt tdk tdktksxtt tdk tdkdtkstt tdk tdkdtksŽtt tdk tj	tkt dd  krèt ddksîn tt t
ttt
tttkstd S rf   )r   rI   rJ   rK   r.   r/   r   rL   r   r|   r   rM   rM   rM   rN   Útest_EquivalentÐ   s"    .$&&&:r~   c                   C   sT   t dddtkstt dddtks(tt dddtks<tt dddtksPtd S )NFT)r@   r.   rK   r/   rM   rM   rM   rN   Útest_Exclusiveä   s    r   c                   C   sÒ   t ttt tt tt t¡dks*tttt tt? tt? @ ¡dksNttt B t tB @  t t @ tt@ B ¡dksttt?  t t ? ¡dkstttt? ?  ttt? ? ¡dksÀtt	t
dd  d S )NTFc                   S   s   t t@  t tk¡S rj   )rI   rJ   ÚequalsrM   rM   rM   rN   rS   ñ   rT   ztest_equals.<locals>.<lambda>)r   r   rI   rJ   r   r   rK   r   rL   rC   ÚNotImplementedErrorrM   rM   rM   rN   Útest_equalsë   s    *$2"r   c               	      s@
  dddgdddgdddgdddgg} dddgdddgdddgdddgg}t tttg| tttttttttkszttt tttg|ttttttttttksŽtttttg| | t	ksÐtt tttg| | t	ksìtt t
 t
 t
 g| | t	kstddddgddddgddddgddddgddddgg ddddgddddgddddgg}t ttttg |tttttttttks ttttttg |ttttttksÎtdddddg dddg}t ttttg |tttttttttksttttttg |ttttttksLtdddddgdddddgddddgg dddddgdg}t ttttg |tttttttttksŒttttttg |ttttttksêtdtdtdig dddddgdg}t ttttg |tttttttttksDttttttg |ttttttksrttdtdidg ddddgg}dddgg tt fd	d
 tt fdd
 ttdd
  ttttt}ttttB @ |ksøtttt@ tt@ B |kstttttttttks8ttttttttttttttksjtttttdttttdtkstttttdttttdtksŸttttttttttttksèttttttdttttdttttdtttks*tt t @ t @ t t @ t@ B }tt|}t|tt @ t @ ksttttdd
  ttttktttk tttkks¬tttttktttktttkksÖtttttktttk tttkks ttd\	}}}}}}	}
}}||@ |@ |@ |@ |	@ |
@ |@ |@ ||@ |@ |@ |@ |	@ |
@ |@ | @ B }t||ksvtt||@ |B |B ||@ d||B ks tt ttgddgg}t ttgddgg|ksÒttttgddgg|ksðtttdd
  t tgdggdggt	kstt tgdggdggt	ks>tt tgg g tksVtttdd
  ttgdggdggt	kstttgdggdggt	ks€tttgg g tksŒtttt@ tt@ B tttttksættttttdksttttttdkstttttdttttttdttdksTttttd dttt ¡ tttdttdksttttd dttt ¡ tttdtttksÈttttd dttt ¡ tttdttdk	sttttd dtttt ttt d ¡ tttdttdttdk	sTttttd dttd d ¡ ttdk	sttttd dttd d ¡ ttdk	sžttttd dttd d ¡ dk	sättttd dttd d ¡ tttdttdk
s"ttttt dk
s<tdS )z1
    Test working of simplification methods.
    r   rP   é   é   é   é   rR   é   c                      s   t ttttg S rj   )r   rs   rk   rl   rr   rM   ©ÚmintermsrM   rN   rS   $  rT   z-test_simplification_boolalg.<locals>.<lambda>c                      s   t ttttg S rj   ©r   rs   rk   rl   rr   rM   r   rM   rN   rS   %  rT   c                   S   s   t ttttgdgS )NZabcdefgr   rM   rM   rM   rN   rS   '  rT   c                   S   s   t tttB @ ddS )NZblabla)Úform)r(   rI   rJ   rL   rM   rM   rM   rN   rS   8  rT   za b c d e f g h j)Zdontcarec                   S   s   t tgdggdggS ©NrP   )r   rk   rM   rM   rM   rN   rS   M  rT   c                   S   s   t tgdggdggS r   )r   rk   rM   rM   rM   rN   rS   R  rT   FTéÿÿÿÿN)r   rk   rl   rr   r   r   r   rK   r   r.   r	   rs   rC   r{   rY   rI   rJ   rL   r(   r   r   r   r   r
   r/   r   r   r   )Zset1Zset2Ú	dontcaresZansr\   r_   r[   r]   ÚdÚfr`   ÚhÚjro   rM   r   rN   Útest_simplification_boolalgô   sÊ    $$2 ÿ$(
ÿ"ÿÿ.
ÿÿ.
ÿÿÿ.ÿÿ."ÿ
***$ÿ
"
***"$ÿ*    *6:::,ÿ
22, ÿ
r   c               
   C   s  ddddgddddgddddgddddgddddgg} t tttttttifksXtt tttttg| t	ttttg| t
tttttttttttttttttifks¶tt ttttgdddggttttgdddggdksðtttttgdddgdddgg}ttttgdddgdddgg}t |||ttttifksPtt tttttt dksrtt t
tttttdkstt t
ttt
tttdksŽtt tttttttt dksÚtt tttttttttt dkstdS )z,
    Test working of bool_map function.
    r   rP   FN)r-   r   r[   rK   r   rs   rk   rl   rr   r   r   r   r\   r]   r   )r   Z	function1Z	function2rM   rM   rN   Útest_bool_mapi  s0    (
ÿ"ÿ2þÿÿ  ÿ
" "&r   c                   C   st   t tdtkstt tddtks&tt tdtks8tt tddtksLtttdtks^tttdtksptdS )zBTest that mixing symbols with boolean values
    works as expectedTFN)r   rI   rK   r/   r   r.   rM   rM   rM   rN   Útest_bool_symbol  s    r   c                   C   sÞ   t dtdkstt ttdks$tddks0tdtks<tdtkdksLtddksXtdtksdtdtkdkstttjdksttt@ jstttB jstt jsªtttA jsžttjt ttksÌtt ttsÚtd S rf   )rg   r   rK   r.   r/   Z
is_BooleanrI   rJ   rM   rM   rM   rN   Útest_is_boolean  s    r   c                   C   s   t t@  t d¡tkstt t@  t d¡tks0tt t@  td¡t ksHtt t@  td¡tks`tt t@  t dtdi¡tks~tt tB  t d¡tkstt tB  t d¡tks®tt tB  td¡tksÆtt tB  td¡t ksÞtt tB  t dtdi¡tksütd S rv   )rI   rJ   ÚsubsrK   r/   r.   rM   rM   rM   rN   Ú	test_subs   s    r   c                  C   s>   t ttd\} }| |@ || @ ks&t| |B || B ks:tdS )z$Test for commutativity of And and OrzA,BN)Úmapr   r
   rK   )rI   rJ   rM   rM   rN   Útest_commutative³  s    r   c                   C   s    t t@ t@ t tt@ @ kstdS )zTest for associativity of AndN©rI   rJ   rL   rK   rM   rM   rM   rN   Útest_and_associativity»  s    r   c                   C   s    t tB tB t ttB B kstd S rj   r   rM   rM   rM   rN   Útest_or_assicativityÁ  s    r   c                  C   s   t  } |   | kstd S rj   )r   rK   )r[   rM   rM   rN   Útest_double_negationÅ  s    r   c                   C   s   t tttddt tB ks tt tttt? ? ttttttttksTtt ttttt	t tB t tB @ t t	B @ t	 tB @ kstd S )NF©Úevaluate)
r$   r   rI   rJ   rK   rL   r   r   r   rh   rM   rM   rM   rN   Útest_eliminate_implicationsÌ  s     ÿÿ&ÿr¡   c                   C   sx   t tt@ t@ ttthkstt ttB t@ ttB thks>tt tthksPtt ddhksbtt ddhksttd S rv   )r    rI   rJ   rL   rK   rM   rM   rM   rN   Útest_conjunctsÔ  s
     r¢   c                   C   sz   t ttB tB ttthkstt ttB t@ ttB t@ hks@tt tthksRtt ddhksdtt ddhksvtd S rv   )r!   rI   rJ   rL   rK   rM   rM   rM   rN   Útest_disjunctsÜ  s
    "r£   c                   C   s   t ttttttttttttks.ttttttttttttttks\ttttt	ttt	ttttttkstd S rj   )
r#   r   r   rI   rJ   rL   rK   r"   r7   r   rM   rM   rM   rN   Útest_distributeä  s    ..r€   c               	   C   s  t d\} }}tt| |t| |ks*ttt| |t| |t| |ksNtttt| |t| ||t| d| |@ ddkstttt| |t| |t	| |t| |dksŽttt| t
|t| |t| |t||tdt||t| ||ddksttt| |t| |ks ttt
| t| dddks@ttt| |tdt| |ddkshttt| |t| |dt| |ddksttt| |t| dt| |ddksŸttt| |t| |dddksâttt| |B | |? ddtdtt| |t| |ddks"ttt| |A | |@ ddtdtt| |t| |ddksbtt| | |A | A  A dkstd S )Núx,y,zTF©Zremove_true)Údeep)r
   r5   r   rK   r   r   r   r   r   r   r   r   ©rk   rl   rr   rM   rM   rN   Útest_to_anfê  s.    $ÿ2(ÿ
 (,*$ÿ
ÿ
r©   c                   C   s  t ttkstt ttks tt ttks0tt tt B tB tksJtt tt @ t@ tksdtt tt? t tB ks~tt ttttt tB t tB @ t tB @ ks°tt ttA tA ttB tB t t B tB @ tt B t B @ t tB t B @ kstt ttttt tB ttB @ ks*tt t	ttB tB t t @ t @ ksVtt t	tt@ t@ t t B t B kstt t	tt? tt @ ks¢tt t	ttttt
tttttt t t ksÜtt t	ttA tA t tB tB tt B tB @ ttB t B @ t t B t B @ ks2tt t	ttttt t B tt B @ ksbtt tt? tt? A tt @ t t@ B kstt tt? tt? A dt t B tB tB tt @ t t@ B @ ksÔtttdd  ¡ tksîtttdd  ¡ t ks
tttdd  d S )NFrP   r   c                   S   s   t tdk dgt ¡ S r   )r   rI   rJ   r)   rM   rM   rM   rN   rS     rT   ztest_to_nnf.<locals>.<lambda>)r)   r.   rK   r/   rI   rJ   r   rL   r   r   r   r   rC   rY   rM   rM   rM   rN   Útest_to_nnf  s4    2:ÿ
(,, ::ÿ
0.&ÿ
rª   c                	   C   sš  t ttB  tttttks$tt tt@ tB tttttttksNtt tt? t tB kshtt ttt@ ? t tB t tB @ kstt tttB @ t ttB @ B dttB ksŒtt tt@ tttksÖtt ttttttttttttkstt tttt@ t tB t tB @ t t B tB @ ksDtt ttttB dttttttttttttttkstt td td ks€td S ©NTrP   )	r*   rJ   rL   r   r   rK   rI   r   r   rM   rM   rM   rN   Útest_to_cnf  s    $*(,2"ÿ
*ÿ
r¬   c                     s  t d\} }}}}}}}}}	}
}}}}| |@ |@ |@ |@ |@ |@ |@ |@ | |@ |@ |@ |@ |@ |@ |	@ |@ B | |
@ |@ |@ |@ |@ |@ |@ |@ B  tt s¢ttt fdd tttftt	fD ]H\}}|| ||||||||	 tt fdd | ddd ksÆtqÆd S )Nzx1:16c                      s   t  ddS ©NTr   ©r*   rM   ©ÚeqrM   rN   rS   3  rT   z"test_issue_18904.<locals>.<lambda>c                      s   t  ddS r­   r®   rM   r¯   rM   rN   rS   6  rT   T)r   Úforce)
r
   r&   r*   rK   rC   r{   Úzipr   r   r+   )Úx1Zx2Zx3Zx4Zx5Zx6Zx7Zx8Zx9Zx10Zx11Zx12Zx13Zx14Zx15r   ÚtrM   r¯   rN   Útest_issue_18904-  s    &""ÿ"þrµ   c                   C   s(   t ttdktdktdk @ B s$td S )NéûÿÿÿrR   é   )r&   r*   r\   r[   rK   rM   rM   rM   rN   Útest_issue_9949:  s    rž   c                   C   s  t  t  ttB  ¡¡tttB  ks(tt  t  tt@ tB ¡¡ttt@ tB ksTtt  t  tt? ¡¡ttt? ksxtt  t  ttt@ ? ¡¡tttt@ ? ks€tt  t  tttB @ t ttB @ B ¡¡ttttB @ t ttB @ B ksìtt  t  tt@ ¡¡ttt@ kstd S rj   )rB   Z
CNF_to_cnfZto_CNFrJ   rL   r*   rK   rI   rM   rM   rM   rN   Útest_to_CNF>  s    (,$,Hr¹   c                   C   s<  t ttB  tttttks$tt tttB @ tttttttksNtt tt? t tB kshtt ttt@ ? t tt@ B kstt ttB ttB ks¢tt tttdtttttttttksÔtt tttt@ dtttttttttttttttkstt td td ks8td S r«   )	r+   rJ   rL   r   r   rK   rI   r   r   rM   rM   rM   rN   Útest_to_dnfG  s    $*"ÿ.ÿ
rº   c                     s   t ttd\} }} fdd  t| |B || B g| ||g ddgddggksXt t| |B ||  B g| ||g ddgddggkstd S )Nr¥   c                    s6   zt  fdd| D W S  tk
r0   |  Y S X d S )Nc                 3   s   | ]} |V  qd S rj   rM   )rV   rk   ©Úsorted_recursiverM   rN   Ú	<genexpr>Z  s     z=test_to_int_repr.<locals>.sorted_recursive.<locals>.<genexpr>)ÚsortedrY   )Úargr»   rM   rN   rŒ   X  s    z*test_to_int_repr.<locals>.sorted_recursiverP   rR   r   r   )r   r   r
   r,   rK   rš   rM   r»   rN   Útest_to_int_reprU  s    ÿ ÿrÀ   c                  C   s¬   t d\} }ttdkstttdks,tt| dks<ttt| |dksRttt| |t| |dkspttt| |t| |dkstttt| |dksštd S )Núx,yTF)	r
   r6   r.   rK   r/   r   r   r   r   ©rk   rl   rM   rM   rN   Útest_is_anfd  s    rÃ   c                   C   s  t tdkstt tdks tt t dks2tt tt@ dksFtt tt@ t t@ B t t@ B t t @ B ddks|tt ttB t t B @ dkstt ttttdks¶tt ttA dksÊtt tt@ t t@ B t t@ B t t @ B ddkstd S rv   )r%   r.   rK   rI   rJ   r   r   rM   rM   rM   rN   Útest_is_nnfo  s    6 rÄ   c                   C   s   t tdkstt ttB tB dks(tt tt@ t@ dks@tt ttB t@ dksXtt tt@ tB dksptt tt@  tB dkstd S rv   )r&   rk   rK   rl   rr   rM   rM   rM   rN   Útest_is_cnf{  s    rÅ   c                   C   s   t tdkstt ttB tB dks(tt tt@ t@ dks@tt tt@ tB dksXtt ttB t@ dksptt ttB  t@ dkstd S rv   )r'   rk   rK   rl   rr   rM   rM   rM   rN   Útest_is_dnf  s    rÆ   c                  C   s¢  t d\} }}tdddtks"ttdddtks6ttdddtksJttdddtks^ttt| ||tsttd} t| |||kstd} t| |||ks€td}tt| ||||ksÂttt| dt|ddtksâttt| |t	tksúttt|| tksttdtt
tks&ttdtt
t
ks<tttdd  ttdd  ttd	d  ttd
d  tdddtjkstttdddddtsšttttdt
tttt
tksÌttttdt
ttt t
tksòttttdt
ttt t
tksttttdt
tttt
tks<ttttjtt
tttt
tksbttttjtt
ttt t
tksttttjtt
ttt t
tks²ttttjtt
tttt
tksØttttdt
ttksôttttdt
ttksttttdt
tt
ks,ttttdt
tt
ksHttttdt
t td¡t
kslttttdt
t td¡tkstttdd  d S )NzA:CTFrP   r   c                   S   s   t dttS rQ   )r   rk   rl   rM   rM   rM   rN   rS      rT   ztest_ITE.<locals>.<lambda>c                   S   s   t dg tS r   ©r   rl   rM   rM   rM   rN   rS   ¡  rT   c                   S   s   t ddtS )NrP   rM   rÇ   rM   rM   rM   rN   rS   ¢  rT   c                   S   s   t dtg S r   rÇ   rM   rM   rM   rN   rS   £  rT   r   c                   S   s   t tdktttS r   )r   rk   rl   rr   rM   rM   rM   rN   rS   ž  rT   )r
   r   r/   rK   r.   rg   r   r   rk   r   rl   rC   rY   r   r   r   rr   r   r{   )rI   rJ   rL   rM   rM   rN   Útest_ITE  sL     $&&$&((&$$rÈ   c                   C   sè   t ddkstt ddks tt tdks0tt t dksBtt tttdksXtt t t¡dksntt tt t¡dkstt tttdkstt tt t¡t t¡dksÀtt t	dk sÐtt t	t
 dk rätd S )NTFr   )r1   rK   rI   r   rJ   r   Úzeror   r   rk   rl   rM   rM   rM   rN   Útest_is_literal»  s    "rÊ   c                   C   sò  dt @ t d@   krt ks"n tdt @ t d@   kr>dksDn tt t@ tt tksZtdt B t dB   krvdks|n tdt B t dB   krt ksn tt tB tt tksŽtt  tt ksÆtdt ? t d>   krât ksèn tdt ? t d>   krdksn tt d? dt >   kr.dks4n tt d? dt >   krVt  ks\n tt t? tt >   krtt tksn tdt A t dA   krªt  ks°n tdt A t dA   krÐt ksÖn tt tA tt tksîtd S rv   )rI   rK   rJ   r   r   r   r   r   rM   rM   rM   rN   Útest_operatorsÉ  s    """""&&(,(&rË   c                  C   s  t tj kstttjkstt dk	s(ttdk	s4tt s<ttrDtt dksPttdks\tt dkrhttdkrttt tkrttt tdksttttdksšttt dhttdh  krÌdksÒn ttt tsàttttsîttt trüttttrtt	t tkstt	dtks0tt	tt ksBtt	dt ksTtt  tksdtt t ksttt
dt fdtfD ]f\} }t| |tks€tt|| tksžtt||tksÌtt| | t ksàtt| ttksôtt|ttkst| dkr|dks@| |@ tks.t|| @ tks@t|dk	r\||@ tks\t| dk	rx| | @ t ksxtt| |t kstt|| t ks tt||tksŽtt| | t ksÈtt| tt ksÜtt|ttksðt| dkr|dks(| |B t kst|| B t ks(t|dk	rD||B tksDt| dk	r`| | B t ks`tt| |t ksttt|| t kstt||tkstt| | tks°tt| tt ksÆtt|ttksÚt| dkrî|dks| |A t ks t|| A t kst|dk	r.||A tks.t| dk	rJ| | A tksJtt| |t ks^tt|| t ksrtt||t kstt| | tkstt| tt ks°tt|tt ksÄtt| |tksØtt|| tksìtt||t ks tt| | tkstt| ttks(tt|tt ks>tt| |tksRtt|| t ksftt||t ksztt| | t kstt| ttks¢tt|tt ks¶ttt| t ksÊttt|t ksàt| dkrô|dks<| |? tkst|| > tkst|| ? t ks*t| |> t ks<t|dk	rj||? t ksXt||> t ksjt| dk	r| | ? t kst| | > t kstt| |tks¬tt|| tksÀtt||t ksÔtt| | t ksètt| ttksütt|tt ksttt| tks&ttt|t ks<tt| | | t ksRtt| | |t kshtt| || tks~tt| ||tkstt|| | t ksªtt|| |tksÀtt||| t ksÖtt|||tkstqtdd tj tjfD std S )NTFrP   c                 s   s   | ]}|  d d¡|kV  qdS )rP   rR   Nr   rU   rM   rM   rN   rœ   _  s     z"test_true_false.<locals>.<genexpr>)r.   r   rK   r/   ÚhashÚlenrg   r0   Úboolr   rH   r   rk   r   r   r   r   r   r   r   Úall)ÚTÚFrM   rM   rN   Útest_true_falseÜ  sà    *







rÒ   c                   C   s°  t tdkdtdk ¡ tdtks&tttdktdk ¡ tddksJtttdktdk ¡ tt dtdt ksztt	tdk ¡ tt dkstt	ttdktdk  ¡ t
tt dtdtksÐtt ¡ tjksâtt ¡ tjksôtt ¡ tjksttttdk tdktdk  ¡ t t d¡ks<tttdk ttdk  ¡ tdk  ¡ kshtttdd  td	tdt d tdt d   ¡ tjks¬td S )
Nr   FrP   rR   éþÿÿÿr   c                   S   s   t tdk  ¡ S r   )r   rk   Úas_setrM   rM   rM   rN   rS   o  rT   z"test_bool_as_set.<locals>.<lambda>r   )r   rl   rÔ   r   r   rK   r   rk   r   r   r   r.   r   ZUniversalSetr/   ZEmptySetÚopenr   rC   r   r   r   rM   rM   rM   rN   Útest_bool_as_setb  s    &$0 ÿ4,rÖ   c                  C   s   t d\} }t| dk|dk ¡ tdttdt ks:tt| dk|dk ¡ tjtj tt dddtt ddd  kstd S )NrÁ   r   T)	r
   r   rÔ   r   r   rK   r   r   ZRealsrÂ   rM   rM   rN   Útest_multivariate_bool_as_sett  s
    .ÿr×   c                  C   s   t ddd} | t k| tkf}t| }|jtkrTt|jt|| tj¡ ks`t	n|dks`t	t
| }|jt
krt|jdkst	n|dkst	d S )Nrk   T)Zextended_realrR   )r
   r   r   ÚfuncrÍ   ÚargsÚcountr   r.   rK   r   )rk   rÙ   ÚvrM   rM   rN   Útest_all_or_nothing}  s    
$
rÜ   c                   C   s    t jt ksttjtkstd S rj   )r.   rZ   rK   r/   rM   rM   rM   rN   Útest_canonical_atoms  s    rÝ   c                   C   s    t jtksttjt kstd S rj   )r.   Znegatedr/   rK   rM   rM   rM   rN   Útest_negated_atoms  s    rÞ   c                   C   s   t tdkttk  ¡ tdtddks(tt tdkttk  ¡ tdtksLtttk  ¡ tt tkshttt k ¡ tt tkstd S )NrR   T)Z	left_openrP   )r   rk   r   rÔ   r   rK   rM   rM   rM   rN   Útest_issue_8777  s    ($rß   c                   C   sJ   t tt tk tdktdtkttk  ¡ tt dtdt ksFtd S )NrÓ   rR   )r   r   r   rk   rÔ   r   rK   rM   rM   rM   rN   Útest_issue_8975  s    *ÿrà   c                   C   s2   t dddddddgdkstt ddks.td S )NrP   r   éR   Z0010101000111001i9*  )r2   rK   rM   rM   rM   rN   Útest_term_to_integer¢  s    râ   c                  C   s  t d\} }}}| |@ |@ | |@ B }| | |@ |¡||@ |B ksDt| | |@ |@ |¡| |@ |B ksht| |B |B | |B @ }| | |B |¡||B |@ kst| | |B |B |¡| |B |@ ksÀt| |A |A | |A @ }| | |A |¡||A |@ ksôt| | |A |A |¡| |A |@ kstd S )Nza b c d)r
   r   rK   )r[   r\   r]   r   r   rM   rM   rN   Útest_issue_21971§  s     $ $ rã   c                   C   sÌ   t ttttttgddddddgks,tt tttB ttgddddddgksVtt ttt? ttgddddddgkstt ttttttgddgdfddgdfddgdfddgdfgksÈtd S )NF)ÚinputTr   rP   )Úlistr3   r   rk   rl   rK   rM   rM   rM   rN   Útest_truth_table¶  s    
ÿ
ÿ
ÿ*ÿræ   c                     s  t jt jfD ]ðttfdd ttfdd ttfdd ttfdd t jt jtfD ] tdD ]} tt fdd tt fdd tt fd	d tt fd
d tt fdd tt fdd    qrqfqd S )Nc                      s    
 S rj   rM   rM   ©rŽ   rM   rN   rS   Ã  rT   z!test_issue_8571.<locals>.<lambda>c                      s     S rj   rM   rM   rç   rM   rN   rS   Ä  rT   c                      s   t  S rj   )ÚabsrM   rç   rM   rN   rS   Å  rT   c                      s   t  S rj   )ÚintrM   rç   rM   rN   rS   Ç  rT   rR   c                      s     S rj   rM   rM   ©ÚorŽ   rM   rN   rS   Ë  rT   c                      s     S rj   rM   rM   rê   rM   rN   rS   Ì  rT   c                      s     S rj   rM   rM   rê   rM   rN   rS   Í  rT   c                      s     S rj   rM   rM   rê   rM   rN   rS   Î  rT   c                      s     S rj   rM   rM   rê   rM   rN   rS   Ï  rT   c                      s     S rj   rM   rM   rê   rM   rN   rS   Ð  rT   )	r   r.   r/   rC   rY   ZZeror|   rk   Úrange)Ú_rM   rê   rN   Útest_issue_8571Á  s    rî   c                  C   s   t ddd} t ddd\}}| ||  | d   ||  | d   dk }|tjk	sVt| ¡ tjksht|dk ¡ tjks~td S )NÚnT)Únegativezp q)ÚpositiverP   r   )r
   r   r/   rK   Úexpandr.   )rï   ÚpÚqÚrrM   rM   rN   Útest_expand_relationalÔ  s    ,rö   c                   C   s$   t jjdkstt jjdks td S )NT)r   r.   Zis_AtomrK   r/   rM   rM   rM   rN   Útest_issue_12717Ý  s    r÷   c                     sŠ   t ddd} tdd dtjd| fD s,tt ddd}td	d d
tjd|fD sXttdd ttdk fD svtdtdtd g fD ] tt fdd qd S )NÚnzT)Znonzeroc                 s   s   | ]}t |tjkV  qd S rj   )r4   r   r.   rU   rM   rM   rN   rœ   ä  s     z"test_as_Boolean.<locals>.<genexpr>rP   rr   )rÉ   c                 s   s   | ]}t |tjkV  qd S rj   )r4   r   r/   rU   rM   rM   rN   rœ   æ  s     Fr   c                 s   s   | ]}t ||kV  qd S rj   ©r4   rU   rM   rM   rN   rœ   ç  s     rR   c                      s   t  S rj   rù   rM   ©rW   rM   rN   rS   é  rT   z!test_as_Boolean.<locals>.<lambda>)	r
   rÏ   r   r.   rK   r/   rk   rC   rY   )rø   rr   rM   rú   rN   Útest_as_Booleanâ  s      rû   c                  C   sD  t tdk ttjtthkstttfD ]F} | tdjt ks@t| tdjthksVt| tdjthks&tq&t	j
jt kstt	jjt ksttjthks¢tttttdttdjtthksÈtt t¡jt ksÞtt td¡jt ksött t¡jthkstt td¡jthks(tt t¡jt ks@td S )NrP   TF)r   rk   rl   rr   Zbinary_symbolsrK   r   r   Úsetr   r.   r/   r   r   ÚprimeÚltZis_truer°   )r   rM   rM   rN   Útest_binary_symbolsì  s    &rÿ   c                   C   s,   t tt t¡tdttdfdks(td S )Nr   F)rP   T)r   rk   rl   Zdiffr   r   rK   rM   rM   rM   rN   Útest_BooleanFunction_diffý  s    r   c               	   C   s6  t d\} }}}}}}}||@ |@ | @ ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ |@ | @ B ||@ | @ | @ B ||@ |@ | @ | @ B ||@ |@ | @ | @ B ||@ |  @ | @ | @ B ||@ |  @ | @ | @ B | |@ |@ |@ | @ | @ B }||@ |@ | @ ||@ |@ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ |@ | @ | @ B ||@ |  @ | @ | @ B | |@ |@ |@ | @ | @ B }	||B |B ||B |B @ ||B |B @ ||B |B @ ||B |B @ ||B |B @ ||B | B | B @ | | B | B | B @ || B | B | B | B @ | |B | B | B | B | B @ || B | B | B | B | B @ ||B |B |  B | B | B | B @ }
t|d|	ksPtt|d|
ksdtddddgddddgddddgddddgddddgddddgg}ddddgddddgddddgddddgg}tttttg|tt @ tt@ t @ B ks ttttttg||tt @ tt@ t @ B ks2td S )NzA B C D E F G HZdnfZcnfr   rP   )r
   r(   rK   r   rs   rk   rl   rr   )rI   rJ   rL   rh   ÚErÑ   ÚGÚHrô   ZsoldnfZsolcnfr   r   rM   rM   rN   Útest_issue_14700  s    8ÿÿÿþþþýýýüüû6ÿÿÿþþþýý.
ÿ
ÿÿþþý ý"ü(
 
ÿ,0ÿr  c                  C   s    t ttj} t| | kstd S rj   )r   rk   r   ZIntegersr(   rK   )ZcondrM   rM   rN   Útest_issue_25115  s    r  c                  C   s"  t ddd\} }}}t ddd\}}t||k||k  ¡ tjksDtt||k||k ¡ tjksdtt||k| | k ¡ tjkstt||k| | k  ¡ tjks¬tt| | k||k  ¡ tjksÐtt| | k| | k ¡ tjksøtt| | k||k ¡ tjkstt| | k| | k  ¡ tjksHtt||k||k  ¡ tjksjtt||k||k ¡ tjkstt||k| | k ¡ tjks²tt||k| | k  ¡ tjksØtt| | k||k  ¡ tjksþtt| | k||k ¡ tjks$tt| | k| | k ¡ tjksNtt| | k| | k  ¡ tjksxtt||k ||k ¡ tjkstt||k||k ¡ tjksŒtt| | k||k ¡ tjksâtt| | k ||k ¡ tjkstt||k | | k ¡ tjks.tt| | k| | k ¡ tjksXtt||k| | k ¡ tjks~tt| | k | | k ¡ tjksštt||k ||k ¡ tjksÊtt||k||k ¡ tjksìtt| | k||k ¡ tjkstt| | k ||k ¡ tjks8tt||k | | k ¡ tjks^tt||k| | k ¡ tjkstt| | k| | k ¡ tjks®tt| | k | | k ¡ tjksØtt||k| |k ||k ¡ tjks tt||k||k  ¡ tjks"tt||kt|| ¡ ||kksHtt||kt|| ¡ t||kspttt|||dkd|k |dk||k  ¡ t|||dk@ |dk@ ||k@ ksÂttt||||k| |k ||k  ¡ ||k||kB | |k B ksttt||||k| |k ||k||k  ¡ t||||k@ | |k @ ksNttt|||dkd|k |dk||k  ¡ t|||dk@ |dk@ ||k@ ks tt||t||@ ||k@ ||k@  ¡ t||t||@ ||k@ ksêttt||t||  ¡ tt|d	t|d	ks"tt	||k||k ¡ t
||ksHtt|dk|d
k t|| ¡ tjksrtt||kt|d	 ¡ t|d	kt|d	ks€ttt
|dt
|d ¡ tjksÊttt|dt
d| ¡ t|dksôttt|dt
d| ¡ t
|dkstd S )Núw x y zT©Úrealúd eFrP   rR   r   r   r   )r
   r   r   r   r.   rK   r   r/   r   r   r   )rs   rk   rl   rr   r   r_   rM   rM   rN   Útest_relational_simplification$  sx      $$$(&*""&&&&**""&&&*&*""&&&&**("&(( ÿ
"ÿ
(ÿ
( ÿ
&ÿ
8&*2&*r
  c                  C   s   t ddd} t| dk | dk ¡ tjks,tt| dk | dk ¡ tjksLtt| dk | dk ¡ tjksltt| dk| dk ¡ tjkstd S )Nrk   Tr  rP   r   )r
   r   r   r   r.   rK   r   r/   ©rk   rM   rM   rN   Útest_issue_8373f  s
       r  c                  C   s4   t ddd} tt| dt| d ¡ tjks0td S )Nrk   Tr  rP   rR   )r
   r   r   r   r   r/   rK   r  rM   rM   rN   Útest_issue_7950n  s    r  c            	      C   s>  dd } t ddd\}}}}t ddd\}}tt||||k||k ||k||k tt|||dkd	|k |d
k||k tt|||dkd	|k |d
k||k t||kt||ttt||||k||k t||k||k tt|||dkd	|k |dk||k t||t||@ ||k@ ||k@ f}|D ]}| || ¡  q$d S )Nc           	      S   s~   | j }t|}ttttt|d  || |}|D ]@}tt||}|  |¡}| |¡}||ks8t	d 
| ||¡q8d S )NrP   zHOriginal: {}
and simplified: {}
do not evaluate to the same value for {})Zfree_symbolsrÍ   rå   rü   rF   rì   Údictr²   r   rK   Úformat)	ÚoriginalÚ
simplifiedÚsymbrï   Ú	valuelistÚvaluesÚsublistÚoriginalvalueÚsimplifiedvaluerM   rM   rN   Ú(test_simplification_numerically_functionu  s    &

  þz\test_relational_simplification_numerically.<locals>.test_simplification_numerically_functionr  Tr  r	  FrP   rR   r   r   )r
   r   r   r   r   )	r  rs   rk   rl   rr   r   r_   ZexpressionsZ
expressionrM   rM   rN   Ú*test_relational_simplification_numericallys  s     $$$*$ÿ"ú	ÿr  c               	   C   s  ddl m}  ddlm}m}m} | d}| d}| d}|||g}t| gt| gt| gg}t	t
tt	tddd d}	d	d
 |	D }	|D ]r\}
}|D ]d}|
|d j }|d }|	D ]D}tt||}| |¡}| |¡}||ksºtd |d ||¡qºqqd S )Nr   ©ÚWild)Ú_simplify_patterns_andÚ_simplify_patterns_orÚ_simplify_patterns_xorr[   r\   r]   rÓ   r   c                 S   s*   g | ]"}t d d |D s"t |s|qS )c                 s   s   | ]}|d  V  qdS ©rR   NrM   ©rV   rs   rM   rM   rN   rœ     s     zQtest_relational_simplification_patterns_numerically.<locals>.<listcomp>.<genexpr>©Úany©rV   rÛ   rM   rM   rN   Ú
<listcomp>  s       zGtest_relational_simplification_patterns_numerically.<locals>.<listcomp>rP   úGOriginal: {}
and simplified: {}
do not evaluate to the same value for{})Ú
sympy.corer  Úsympy.logic.boolalgr  r  r  r   r   r   rå   rü   rF   rì   rÙ   r  r²   ÚxreplacerK   r  )r  r  r  r  r[   r\   r]   r  Úpatternlistsr  rØ   ÚpatternlistÚpatternr  r  r  r  r  r  rM   rM   rN   Ú3test_relational_simplification_patterns_numerically  s2    
þ 

  þr,  c                  C   sT   t d} | dk| dk B | dk| dk @ B  ¡ | dk| dk B | dk| dk @ B ksPtd S )Nrï   r   r   )r
   r   rK   )rï   rM   rM   rN   Útest_issue_16803­  s    "ÿr-  c                      s   t ttti tt t dkt t dk   ¡s0ttt t dk t t dk   ¡rTttt fdd tt fdd tt fdd d S )Nr   c                      s    t tt dk tt dk   ¡S ©Nr   )r   rk   rl   r   rM   ©rõ   rM   rN   rS   ž  rT   z"test_issue_17530.<locals>.<lambda>c                      s    t tt dktt dk   ¡S r.  ©r   rk   rl   r   rM   r/  rM   rN   rS   ¹  rT   c                      s    t tt dktt dk   ¡S r.  r0  rM   r/  rM   rN   rS   º  rT   )	rk   r   rl   r   r   rK   r   rC   rY   rM   rM   r/  rN   Útest_issue_17530Ž  s    $$r1  c                   C   sÜ   t ddgddgkstt ddddgddddgks8tt ddddgddddgksXtt ddddgddddgksxtt ddddgddddgkstt ddddgddddgksžtt ddddgddddgksØtd S )NrP   r   )r8   rK   rM   rM   rM   rN   Útest_anf_coeffsœ  s         r2  c                  C   s   t d\} }t| gddgdks$tt| gddgdks<tt| gddgt| dddks^tt| |gddddgtdt| |ddkstd S )NrÁ   rP   Tr   FrŠ   )r
   r9   rK   r   r   rÂ   rM   rM   rN   Útest_ANFformÇ  s    "ÿr3  c                  C   sP   t d\} }td| |gt| |ks(ttddg| |gtt|| ksLtd S )NrÁ   r   rP   r   )r
   r:   r   rK   r   rÂ   rM   rM   rN   Útest_bool_mintermÐ  s    r4  c                  C   sT   t d\} }td| |gtt| |ks,ttddg| |gtt|| ksPtd S )NrÁ   rR   r   rP   )r
   r;   r   r   rK   rÂ   rM   rM   rN   Útest_bool_maxtermÖ  s     r5  c                  C   sF   t d\} }td| |g|ks"ttddg| |gt| |ksBtd S )NrÁ   rP   )r
   r<   rK   r   rÂ   rM   rM   rN   Útest_bool_monomialÜ  s    r6  c                   C   s@   t dddgdddgdkstt dddgdddgdks<td S )Nr   rP   rR   r   )r=   rK   rM   rM   rM   rN   Útest_check_pairâ  s    r7  c                  C   s\   t t@ tt @ B t t  @ B } tt @ tt @ B t  t @ B }t| dd}|| |fksXtd S r­   )rJ   rL   rI   r+   rK   )ro   Zres1ÚresultrM   rM   rN   Útest_issue_19114ç  s    r9  c                  C   s   t ttttgddddddddd	d
ddg} tt @ tt@ t@ B tt @ t @ B tt @ t @ B tt @ t @ B }| |ks|td S )NrP   rR   r   r·   r   é   é   é	   r   é   é   r   )r   r[   r\   r]   r   rK   )r8  ÚexpectedrM   rM   rN   Útest_issue_20870ï  s    *$ÿÿr@  c                   C   sZ   t dddgtttgttttttks.tt dddgtttgttttksVtd S ©Nr   rP   r   )r>   rk   rl   rr   r   r   rK   rM   rM   rM   rN   Útest_convert_to_varsSOPö  s    .rB  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 rA  )r?   rk   rl   rr   r   r   rK   rM   rM   rM   rN   Útest_convert_to_varsPOSû  s    *rC  c                     sz   t d\ } }}tt dks(tt | @ |@ | B A B dksLttt ddksbttt fdd d S )Nza:erR   r<  Tr   c                      s   t   S rj   )rA   rM   ©r[   r\   rM   rN   rS     rT   z%test_gateinputcount.<locals>.<lambda>)r
   rA   r   rK   rC   rY   )r]   r   r_   rM   rD  rN   Útest_gateinputcount   s
    $rE  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 r.  )r   rk   rK   r   r.   rl   r   r   r   r   rñ   rð   r/   r  rM   rM   rM   rN   Útest_refine  s:      "&"&*0""rF  c               	   C   sð   ddl m}  ddlm} | d}| d}| d}|||g}t| gg}tttttddd d}d	d
 |D }|D ]r\}}	|	D ]d}
||
d j	 }|
d }|D ]D}t
t||}| |¡}| |¡}||ks¢td |
d ||¡q¢qqxd S )Nr   r  )Ú_simplify_patterns_and3r[   r\   r]   rÓ   r   c                 S   s*   g | ]"}t d d |D s"t |s|qS )c                 s   s   | ]}|d  V  qdS r  rM   r   rM   rM   rN   rœ   7  s     z[test_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>.<genexpr>r!  r#  rM   rM   rN   r$  7  s       zQtest_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>rP   r%  )r&  r  r'  rG  r   rå   rü   rF   rì   rÙ   r  r²   r(  rK   r  )r  rG  r[   r\   r]   r  r)  r  rØ   r*  r+  r  r  r  r  r  r  rM   rM   rN   Ú=test_relational_threeterm_simplification_patterns_numerically-  s,    
 

  þrH  c                  C   sJ   t tttttt} t| t s$tt| j	tttttthksFtd S rj   )
r   r   r[   r]   r   r\   rg   rK   rü   rÙ   r  rM   rM   rN   Útest_issue_25451E  s    rI  N)¶Zsympy.assumptions.askr   Zsympy.assumptions.refiner   Zsympy.core.numbersr   Zsympy.core.relationalr   r   r   Zsympy.core.singletonr   Zsympy.core.symbolr	   r
   Zsympy.functionsr   Z(sympy.functions.elementary.trigonometricr   r   Zsympy.sets.setsr   r   Zsympy.sets.containsr   Zsympy.simplify.simplifyr   r'  r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   Zsympy.assumptions.cnfrB   Zsympy.testing.pytestrC   rD   rE   Ú	itertoolsrF   rG   rH   rI   rJ   rL   rh   r[   r\   r]   r   r_   rs   rk   rl   rr   rO   rd   re   ri   rp   rq   rt   ru   rw   rx   ry   rz   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r¡   r¢   r£   r€   r©   rª   r¬   rµ   rž   r¹   rº   rÀ   rÃ   rÄ   rÅ   rÆ   rÈ   rÊ   rË   rÒ   rÖ   r×   rÜ   rÝ   rÞ   rß   rà   râ   rã   ræ   rî   rö   r÷   rû   rÿ   r   r  r  r
  r  r  r  r,  r-  r1  r2  r3  r4  r5  r6  r7  r9  r@  rB  rC  rE  rF  rH  rI  rM   rM   rM   rN   Ú<module>   sÎ   Ä		u			. 
	
B
	
	%