o
    oÇh¢¿  ã                	   @   sh  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; Zv	 d<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J t tB tt tksJ t t@ tB ttt ttks&J t t? tt tks1J t t> ttt ks<J t  tt ksEJ t tA tt tksPJ dS )z)Test that |, & are overloaded as expectedN)ÚAÚBr   r   ÚCr   r   r   © rL   rL   úr/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/logic/tests/test_boolalg.pyÚtest_overloading!   s    rN   c                  C   sÐ  t  tu sJ t ttksJ t dtu sJ t dtu sJ t ddtu s(J t ddtu s1J t ddtu s:J t dttksCJ t dttu sLJ t dddtu sVJ t ddttks`J t ddttu sjJ t dttkssJ ttdd  t tdk tdktu sJ tdk} t | | j| jksJ ttkttk ttkttkf\}}}}t ||||t ||ks¶J dd t||||fD t ||hksËJ t t t	t
dt	tdt tt
dt	tdtu sæJ d S )	NTFé   c                   S   ó
   t dtS ©Né   )r   rI   rL   rL   rL   rM   Ú<lambda>;   ó   
 ztest_And.<locals>.<lambda>c                 S   s   h | ]}t | qS rL   )r   ©Ú.0ÚirL   rL   rM   Ú	<setcomp>A   ó    ztest_And.<locals>.<setcomp>r   )r   r.   rI   r/   rC   Ú	TypeErrorÚ	canonicalrJ   rG   r   ÚaÚbr   Úc©ÚeÚgÚlÚgeÚlerL   rL   rM   Útest_And-   s*   $*:re   c                  C   sn  t  tu sJ t ttksJ t dtu sJ t dtu sJ t ddtu s(J t ddtu s1J t ddtu s:J t dttu sCJ t dttksLJ t dddtu sVJ t ddttu s`J t ddttksjJ t dttu ssJ ttdd  t tdk tdktu sJ tdk} t | | j| ksJ ttkttk ttkttkf\}}}}t ||||t ||ksµJ d S )NTFrO   c                   S   rP   rQ   )r   rI   rL   rL   rL   rM   rS   S   rT   ztest_Or.<locals>.<lambda>)r   r/   rI   r.   rC   rZ   r[   rJ   r_   rL   rL   rM   Útest_OrE   s&   $ rf   c                  C   s  t  tu sJ t ttksJ t tttu sJ t dtttu s"J t ttttttks.J t dddttt tt ks>J t dtu sFJ t dtu sNJ t ddtu sWJ t ddtu s`J t ddtu siJ t dtt kssJ t dttks|J t dddtu sJ t ddtt ksJ t ddttksJ tt ttt s¥J t ttt ttt ttttks·J t ttt ttt ttksÇJ t tdk tdktt ddt  krât ddtksåJ  J tdk} t | | jt dd  krÿt ddksJ  J d S ©NTFrO   r   )	r   r/   rI   r.   rJ   Ú
isinstancerK   ÚDr[   )r`   rL   rL   rM   Útest_Xor[   s,    $ <6rj   c                  C   s.   t tA } |  t¡t tB t  t B @ ksJ d S ©N)ÚxÚyÚrewriter   ©ÚexprrL   rL   rM   Útest_rewrite_as_Andt   ó   &rq   c                  C   s.   t tA } |  t¡t t @ tt  @ B ksJ d S rk   )rl   rm   rn   r   ro   rL   rL   rM   Útest_rewrite_as_Ory   rr   rs   c                  C   s<   t t@ tt @ B } |  t¡t t@  tt @  @  ksJ d S rk   )rm   ÚzÚwrn   r   ro   rL   rL   rM   Útest_rewrite_as_Nand~   s   *rv   c                  C   s4   t tt B @ } |  t¡t  tt B  B  ksJ d S rk   )rt   rm   ru   rn   r   ro   rL   rL   rM   Útest_rewrite_as_Nor   s   &rw   c                   C   sb   t tdd  tdtu sJ tdtu sJ tdtu sJ tdtu s'J tdtu s/J d S )Nc                   S   s
   t ddS ©NTF)r   rL   rL   rL   rM   rS      rT   ztest_Not.<locals>.<lambda>TFr   rO   rR   )rC   rZ   r   r/   r.   rL   rL   rL   rM   Útest_Not   s   ry   c                   C   sÞ   t  tu sJ t tt ksJ t dtu sJ t dtu s J t ddtu s)J t ddtu s2J t ddtu s;J t dtt ksEJ t dttu sNJ t dddtu sXJ t ddtt kscJ t ddttu smJ d S rx   )r   r/   rI   r.   rL   rL   rL   rM   Ú	test_Nand   s   rz   c                   C   sÜ   t  tu sJ t tt ksJ t dtu sJ t dtu s J t ddtu s)J t ddtu s2J t ddtu s;J t dttu sDJ t dtt ksNJ t dddtu sXJ t ddttu sbJ t ddttu slJ d S rx   )r   r.   rI   r/   rL   rL   rL   rM   Útest_Nor    s   r{   c                   C   s  t  tu sJ t tt ksJ t tttu sJ t dtttu s#J t tttttt ks0J t dtu s8J t dtu s@J t ddtu sIJ t ddtu sRJ t ddtu s[J t dttksdJ t dtt ksnJ t dddtu sxJ t ddttksJ t ddtt ksJ d S rx   )r   r.   rI   r/   rL   rL   rL   rM   Ú	test_Xnor¯   s   r|   c                   C   sê   t tdd  tddtu sJ tddtu sJ tddtu s"J tddtu s+J tdttu s4J tddtu s=J tddtu sFJ tt? tt> ksPJ tdk tdk? tdkks^J tdk tjtk? tu skJ tt? tu ssJ d S )Nc                   S   s   t tttS rk   )r   rI   rJ   rK   rL   rL   rL   rM   rS   Â   ó    ztest_Implies.<locals>.<lambda>TFr   rO   )	rC   Ú
ValueErrorr   r.   r/   rI   rJ   r   ÚOnerL   rL   rL   rM   Útest_ImpliesÁ   s   r   c                   C   s
  t ttt tt  krt tttksJ  J t  tu sJ t ttt t  kr/tu s2J  J t ddt dd  krCtu sFJ  J t ddt dd  krWtu sZJ  J t tdtkscJ t tdttksnJ t ttdtt@ kszJ t ttdt t @ ksJ t dttksJ t dtttksJ t tt ttt t tttks®J t tdk tdktu s»J t tdk tdkdtu sÉJ t tdk tdkdtu s×J t tdk tjtkt dd  krðt ddksóJ  J t t	ttt	tttu sJ d S rg   )
r   rI   rJ   r.   r/   r   rK   r   r   r   rL   rL   rL   rM   Útest_EquivalentÐ   s"   0&(($8$r   c                   C   sT   t dddtu s
J t dddtu sJ t dddtu sJ t dddtu s(J d S )NFT)r@   r.   r/   rL   rL   rL   rM   Útest_Exclusiveä   s   r   c                   C   sÒ   t ttt tt tt t¡du sJ ttt tt? tt? @ ¡du s'J tt B t tB @  t t @ tt@ B ¡du s@J tt?  t t ? ¡du sOJ ttt? ?  ttt? ? ¡du s`J tt	dd  d S )NTFc                   S   s   t t@  t tk¡S rk   )rI   rJ   ÚequalsrL   rL   rL   rM   rS   ñ   ó    ztest_equals.<locals>.<lambda>)
r   r   rI   rJ   r   r   r   rK   rC   ÚNotImplementedErrorrL   rL   rL   rM   Útest_equalsë   s   *$2"r   c               	      sæ	  g d¢g d¢g d¢g d¢g} g d¢g d¢g d¢g d¢g}t tttg| tttttttttks5J tt tttg|ttttttttttksRJ ttttg| | tu s`J t tttg| | tu snJ t t	 t	 t	 g| | tu sJ g d	¢g d
¢g d¢g d¢g d¢g g d¢g d¢g d¢g}t t
tttg |ttttttt
ttks¶J tt
tttg |tttt
ttksÌJ g d¢ g d¢}t t
tttg |ttttttt
ttksïJ tt
tttg |tttt
ttksJ dg d
¢dg d¢g d¢g dg d¢dg}t t
tttg |ttttttt
ttks6J tt
tttg |tttt
ttksMJ dtdtdig dg d¢dg}t t
tttg |ttttttt
ttksxJ tt
tttg |tttt
ttksJ tdtdidg g d¢g}g d¢g tt fdd tt fdd ttdd  ttttt}ttttB @ |ksÏJ ttt@ tt@ B |ksÞJ ttttttttksïJ tttttttttttttksJ ttttdttttdtksJ ttttdttttdtks2J tttttttttttksGJ tttttdttttdttttdtttkshJ t t @ t @ t t @ t@ B }tt|}t|tt @ t @ ksJ ttdd  ttttktttk tttkks©J ttttktttktttkksŸJ ttttktttk tttkksÓJ td\	}}}}}}	}
}}||@ |@ |@ |@ |	@ |
@ |@ |@ ||@ |@ |@ |@ |	@ |
@ |@ | @ B }t||ksJ t||@ |B |B ||@ d||B ks#J t ttgddgg}t ttgddgg|ks<J tttgddgg|ksKJ ttd d  t tgdggdggtu sbJ t tgdggdggtu srJ t tgg g tu s~J ttd!d  ttgdggdggtu sJ ttgdggdggtu s¥J ttgg g tu s±J ttt@ tt@ B tttttksÆJ tttttd"ksÔJ tttttd#ksâJ ttttdttttttdttdksýJ tttd dttt ¡ tttdttdksJ tttd dttt ¡ tttdtttks7J tttd dttt ¡ tttdttdksTJ tttd dtttt ttt d ¡ tttdttd$ttdks}J tttd dttd d ¡ ttdksJ tttd dttd d ¡ ttdks¯J tttd dttd d ¡ d"ksÅJ tttd dttd d ¡ tttdttdksäJ tttt d#ksñJ d%S )&z1
    Test working of simplification methods.
    ©r   r   rO   ©r   rO   rO   ©rO   r   r   )rO   rO   r   )r   r   r   ©r   rO   r   ©rO   r   rO   ©rO   rO   rO   ©r   r   r   rO   ©r   r   rO   rO   ©r   rO   rO   rO   ©rO   r   rO   rO   ©rO   rO   rO   rO   )r   r   r   r   )r   r   rO   r   ©r   rO   r   rO   )rO   é   é   é   é   )r   rR   é   rO   r   r   r   c                      ó   t ttttg S rk   )r   ru   rl   rm   rt   rL   ©ÚmintermsrL   rM   rS   $  r   z-test_simplification_boolalg.<locals>.<lambda>c                      r   rk   ©r   ru   rl   rm   rt   rL   r   rL   rM   rS   %  r   c                   S   s   t ttttgdgS )NÚabcdefgr   rL   rL   rL   rM   rS   '  rY   rR   r   c                   S   s   t tttB @ ddS )NÚblabla)Úform)r(   rI   rJ   rK   rL   rL   rL   rM   rS   8  rY   za b c d e f g h j)Údontcarec                   S   ó   t tgdggdggS ©NrO   )r   rl   rL   rL   rL   rM   rS   M  ó    c                   S   r    r¡   )r   rl   rL   rL   rL   rM   rS   R  r¢   FTéÿÿÿÿN)r   rl   rm   rt   r   r   r   r   r.   r	   ru   rC   r~   rZ   rI   rJ   rK   r(   r   r   r   r   r
   r/   r   r   r   )Úset1Úset2Ú	dontcaresÚansr]   r`   r\   r^   ÚdÚfra   ÚhÚjrp   rL   r   rM   Útest_simplification_boolalgô   sÂ   2 ÿ"ÿÿ,ÿ.ÿ
ÿ.
ÿ.

"
ÿ***$
ÿ"
***"$ÿ*    *6:::,
ÿ22, 
ÿr¬   c               
   C   sÜ  g d¢g d¢g d¢g d¢g d¢g} t tttttttifks"J 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sQJ t ttttgg d¢gttttgg d¢gdkslJ ttttgg d¢g d¢g}ttttgg d¢g d	¢g}t |||ttttifksJ t tttttt dks§J t t	ttt
ttd
u s¶J t t	ttt	tttd
u sÆJ t tttttttt dksØJ t tttttttttt dksìJ d
S )z,
    Test working of bool_map function.
    r   r   r   r   r   r   Fr   r   N)r-   r   r\   r   ru   rl   rm   rt   r   r   r   r]   r^   r   )r   Ú	function1Ú	function2rL   rL   rM   Útest_bool_mapi  s0   ÿ"ÿ2þÿÿÿ  $,r¯   c                   C   st   t tdtks	J t tddtksJ t tdtu sJ t tddtu s&J ttdtu s/J ttdtks8J dS )zBTest that mixing symbols with boolean values
    works as expectedTFN)r   rI   r/   r   r.   rL   rL   rL   rM   Útest_bool_symbol  s   r°   c                   C   sÞ   t dtdu s	J t ttdu sJ ddksJ dtksJ dtkdu s&J ddks,J dtks2J dtkdu s:J tjdu sAJ tt@ jsHJ ttB jsOJ t jsUJ ttA js\J tjt ttksfJ t ttsmJ d S rg   )rh   r   r.   r/   Ú
is_BooleanrI   rJ   rL   rL   rL   rM   Útest_is_boolean  s   r²   c                   C   s   t t@  t d¡tksJ t t@  t d¡tu sJ t t@  td¡t ks$J t t@  td¡tu s0J t t@  t dtdi¡tu s?J t tB  t d¡tu sKJ t tB  t d¡tksWJ t tB  td¡tu scJ t tB  td¡t ksoJ t tB  t dtdi¡tu s~J d S rx   )rI   rJ   Úsubsr/   r.   rL   rL   rL   rM   Ú	test_subs   s   "rŽ   c                  C   s>   t ttd\} }| |@ || @ ksJ | |B || B ksJ dS )z$Test for commutativity of And and OrzA,BN)Úmapr   r
   )rI   rJ   rL   rL   rM   Útest_commutative³  s   r¶   c                   C   s    t t@ t@ t tt@ @ ksJ dS )zTest for associativity of AndN©rI   rJ   rK   rL   rL   rL   rM   Útest_and_associativity»  s    rž   c                   C   s    t tB tB t ttB B ksJ d S rk   r·   rL   rL   rL   rM   Útest_or_assicativityÁ  s    r¹   c                  C   s   t  } |   | ksJ d S rk   )r   )r\   rL   rL   rM   Útest_double_negationÅ  s   rº   c                   C   s   t tttddt tB ksJ t tttt? ? ttttttttks*J t tttttt tB t tB @ t tB @ t tB @ ksIJ d S )NF©Úevaluate)	r$   r   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J t ttB t@ ttB thksJ t tthks(J t ddhks1J t ddhks:J d S rx   )r    rI   rJ   rK   rL   rL   rL   rM   Útest_conjunctsÔ  s
    rŸ   c                   C   sz   t ttB tB ttthksJ t ttB t@ ttB t@ hks J t tthks)J t ddhks2J t ddhks;J d S rx   )r!   rI   rJ   rK   rL   rL   rL   rM   Útest_disjunctsÜ  s
   "r¿   c                   C   s   t ttttttttttttksJ tttttttttttttks.J tttttttttttttksEJ d S rk   )	r#   r   r   rI   rJ   rK   r"   r7   r   rL   rL   rL   rM   Útest_distributeä  s   ..2rÀ   c               	   C   sz  t d\} }}tt| |t| |ksJ tt| |t| |t| |ks'J ttt| |t| ||t| d| |@ ddksAJ ttt| |t| |t| |t| |dksZJ tt| t	|t| |t| |t||tdt||t| ||ddksJ tt| |t| |ksJ tt	| t| dddksJ tt| |tdt| |ddks°J tt| |t| |dt| |ddksÅJ tt| |t| dt| |ddksÙJ tt
| |t| |dddksêJ tt| |B | |? ddtdtt| |t| |ddks
J tt| |A | |@ ddtdtt| |t| |ddks*J t| | |A | A  A dks;J d S )Núx,y,zTF©Úremove_true)Údeep)r
   r5   r   r   r   r   r   r   r   r   r   ©rl   rm   rt   rL   rL   rM   Útest_to_anfê  s.   $ÿ2(ÿ&*("
ÿ
ÿ&rÆ   c                   C   s  t ttu sJ t ttu sJ t ttksJ t tt B tB tu s%J t tt @ t@ tu s2J t tt? t tB ks?J t ttttt tB t tB @ t tB @ ksXJ t ttA tA ttB tB t t B tB @ tt B t B @ t tB t B @ ksJ t ttttt tB ttB @ ksJ t tttB tB t t @ t @ ksšJ t ttt@ t@ t t B t B ksœJ t ttt? tt @ ksÌJ t tttttt	t
tttt
t t t ksèJ t tttA tA t tB tB tt B tB @ ttB t B @ t t B t B @ ksJ t tttttt t B tt B @ ks+J t tt? tt? A tt @ t t@ B ksBJ t tt? tt? A dt t B tB tB tt @ t t@ B @ ksdJ ttdd  ¡ tksqJ ttdd  ¡ t ksJ ttdd  d S )NFrO   r   c                   S   s   t tdk dgt ¡ S r¡   )r   rI   rJ   r)   rL   rL   rL   rM   rS     r¢   ztest_to_nnf.<locals>.<lambda>)r)   r.   r/   rI   rJ   r   rK   r   r   r   r   rC   rZ   rL   rL   rL   rM   Útest_to_nnf  s4   2:ÿ&**8:
ÿ0.&
ÿrÇ   c                	   C   s   t ttB  tttttksJ t tt@ tB tttttttks'J t tt? t tB ks4J t ttt@ ? t tB t tB @ ksHJ t tttB @ t ttB @ B dttB ks^J t tt@ tttkskJ t ttttttttttttksJ t tttt@ t tB t tB @ t t B tB @ ks J t ttttB dttttttttttttttksÂJ t td td ksÎJ d S ©NTrO   )r*   rJ   rK   r   r   rI   r   r   rL   rL   rL   rM   Útest_to_cnf  s   $*(,0"ÿ*ÿrÉ   c                     s  t d\} }}}}}}}}}	}
}}}}| |@ |@ |@ |@ |@ |@ |@ |@ | |@ |@ |@ |@ |@ |@ |	@ |@ B | |
@ |@ |@ |@ |@ |@ |@ |@ B  tt sQJ tt fdd tttfttfD ]$\}}|| ||||||||	 tt fdd | ddd ksJ qcd S )Nzx1:16c                      ó   t  ddS ©NTr   ©r*   rL   ©ÚeqrL   rM   rS   3  r}   z"test_issue_18904.<locals>.<lambda>c                      rÊ   rË   rÌ   rL   rÍ   rL   rM   rS   6  r}   T)r   Úforce)	r
   r&   r*   rC   r~   Úzipr   r   r+   )Úx1Úx2Úx3Úx4Úx5Úx6Úx7Úx8Úx9Úx10Úx11Úx12Úx13Úx14Úx15r©   ÚtrL   rÍ   rM   Útest_issue_18904-  s   &""ÿ"þýrá   c                   C   s(   t ttdktdktdk @ B sJ d S )NéûÿÿÿrR   é   )r&   r*   r]   r\   rL   rL   rL   rM   Útest_issue_9949:  s   (rä   c                   C   s  t  t  ttB  ¡¡tttB  ksJ t  t  tt@ tB ¡¡ttt@ tB ks*J t  t  tt? ¡¡ttt? ks<J t  t  ttt@ ? ¡¡tttt@ ? ksRJ t  t  tttB @ t ttB @ B ¡¡ttttB @ t ttB @ B ksvJ t  t  tt@ ¡¡ttt@ ksJ d S rk   )rB   Ú
CNF_to_cnfÚto_CNFrJ   rK   r*   rI   rL   rL   rL   rM   Útest_to_CNF>  s   (,$,H(rç   c                   C   s8  t ttB  tttttksJ t tttB @ tttttttks'J t tt? t tB ks4J t ttt@ ? t tt@ B ksEJ t ttB ttB ksQJ t tttdtttttttttksjJ t tttt@ dtttttttttttttttksJ t td td ksJ d S rÈ   )r+   rJ   rK   r   r   rI   r   r   rL   rL   rL   rM   Ú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s,J  t| |B ||  B g| ||g ddgddggksIJ d S )NrÁ   c                    s0   zt  fdd| D W S  ty   |  Y S w )Nc                 3   s    | ]} |V  qd S rk   rL   )rV   rl   ©Úsorted_recursiverL   rM   Ú	<genexpr>Z  ó    z=test_to_int_repr.<locals>.sorted_recursive.<locals>.<genexpr>)ÚsortedrZ   )Úargré   rL   rM   rê   X  s
   ÿz*test_to_int_repr.<locals>.sorted_recursiverO   rR   r   r£   )rµ   r   r
   r,   rÅ   rL   ré   rM   Útest_to_int_reprU  s   ÿ ÿrï   c                  C   s¬   t d\} }ttdu sJ ttdu sJ t| du sJ tt| |du s)J tt| |t| |du s8J tt| |t| |du sGJ ttt| |du sTJ d S )Núx,yTF)r
   r6   r.   r/   r   r   r   r   ©rl   rm   rL   rL   rM   Útest_is_anfd  s   rò   c                   C   s  t tdu sJ t tdu sJ t t du sJ t tt@ du s#J t tt@ t t@ B t t@ B t t @ B ddu s>J t ttB t t B @ du sNJ t ttttdu s[J t ttA du seJ t tt@ t t@ B t t@ B t t @ B ddu sJ d S rx   )r%   r.   rI   rJ   r   r   rL   rL   rL   rM   Útest_is_nnfo  s   6 :ró   c                   C   s   t tdu sJ t ttB tB du sJ t tt@ t@ du s J t ttB t@ du s,J t tt@ tB du s8J t tt@  tB du sEJ d S rx   )r&   rl   rm   rt   rL   rL   rL   rM   Útest_is_cnf{  ó   rô   c                   C   s   t tdu sJ t ttB tB du sJ t tt@ t@ du s J t tt@ tB du s,J t ttB t@ du s8J t ttB  t@ du sEJ d S rx   )r'   rl   rm   rt   rL   rL   rL   rM   Útest_is_dnf  rõ   rö   c                  C   s  t d\} }}tdddtu sJ tdddtu sJ tdddtu s%J tdddtu s/J tt| ||ts:J d} t| |||ksFJ d} t| |||ksRJ d}tt| ||||ksaJ tt| dt|ddtu sqJ tt| |ttks}J tt|| tksJ tdtt	tksJ tdtt	t	ksJ t
tdd  t
tdd  t
td	d  t
td
d  tdddtju sÂJ ttdddddtsÏJ tttdt	tttt	tksàJ tttdt	ttt t	tksòJ tttdt	ttt t	tksJ tttdt	tttt	tksJ tttjtt	tttt	tks*J tttjtt	ttt t	tks>J tttjtt	ttt t	tksRJ tttjtt	tttt	tkseJ tttdt	ttkssJ tttdt	ttksJ tttdt	tt	ksJ tttdt	tt	ksJ tttdt	t td¡t	ks¯J tttdt	t td¡tksÁJ t
tdd  d S )NzA:CTFrO   r   c                   S   s   t dttS rQ   )r   rl   rm   rL   rL   rL   rM   rS      r}   ztest_ITE.<locals>.<lambda>c                   S   s   t dg tS r¡   ©r   rm   rL   rL   rL   rM   rS   ¡  r}   c                   S   s   t ddtS )NrO   rL   r÷   rL   rL   rL   rM   rS   ¢  r}   c                   S   s   t dtg S r¡   r÷   rL   rL   rL   rM   rS   £  r}   r»   c                   S   s   t tdktttS r¡   )r   rl   rm   rt   rL   rL   rL   rM   rS   ž  r   )r
   r   r/   r.   rh   r   r   rl   r   rm   rC   rZ   r   r   r   rt   r³   r~   r·   rL   rL   rM   Útest_ITE  sL    "$&$&((&$$rø   c                   C   sè   t ddu sJ t ddu sJ t tdu sJ t t du s!J t tttdu s,J t t t¡du s7J t tt t¡du sDJ t tttdu sOJ t tt t¡t t¡du s`J t tdk shJ t tt	 dk rrJ d S )NTFr   )
r1   rI   r   rJ   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J  J dt @ t d@   kr!dks$J  J t t@ tt tks/J dt B t dB   kr>dksAJ  J dt B t dB   krPt ksSJ  J t tB tt tks^J t  tt ksgJ dt ? t d>   krvt ksyJ  J dt ? t d>   krdksJ  J t d? dt >   krdksJ  J t d? dt >   kr­t  ks°J  J t t? tt >   krÂtt tksÅJ  J dt A t dA   krÕt  ksØJ  J dt A t dA   krçt ksêJ  J t tA tt tksõJ d S rx   )rI   rJ   r   r   r   r   r   rL   rL   rL   rM   Útest_operatorsÉ  s   $$$$$$$&*&$rû   c                  C   sú  t tj u sJ ttju sJ t dusJ tdusJ t sJ tr"J t dks(J tdks.J t dkr4J tdkr:J t tkr@J tt tdksJJ tttdksTJ tt dhttdh  krgdksjJ  J tt tsqJ tttsxJ tt trJ tttrJ tt tu sJ tdtu sJ ttt u sJ tdt u sŠJ t  tu s­J t t u sŽJ t	dt fdtfD ],\} }t
| |tu sËJ t
|| tu sÔJ t
||tu sÝJ t
| | t u sæJ t
| ttksïJ t
|ttu søJ | du r|du s| |@ tu sJ || @ tu sJ |dur"||@ tu s"J | dur0| | @ t u s0J t| |t u s:J t|| t u sDJ t||tu sNJ t| | t u sXJ t| tt u sbJ t|ttkslJ | du rv|du s| |B t u sJ || B t u sJ |dur||B tu sJ | dur€| | B t u s€J t| |t u s®J t|| t u sžJ t||tu sÂJ t| | tu sÌJ t| tt ks×J t|ttksáJ | du rë|du sý| |A t u sôJ || A t u sýJ |dur||A tu sJ | dur| | A tu sJ t| |t u s#J t|| t u s-J t||t u s7J t| | tu sAJ t| tt ksLJ t|tt u sVJ t| |tu s`J t|| tu sjJ t||t u stJ t| | tu s~J t| ttu sJ t|tt ksJ t| |tu sJ t|| t u s§J t||t u s±J t| | t u s»J t| ttksÅJ t|tt u sÏJ tt| t u sÙJ tt|t ksäJ | du rî|du s| |? tu s÷J || > tu s J || ? t u s	J | |> t u sJ |dur)||? t u s J ||> t u s)J | dur@| | ? t u s7J | | > t u s@J t| |tu sJJ t|| tu sTJ t||t u s^J t| | t u shJ t| ttksrJ t|tt ks}J tt| tksJ tt|t ksJ t| | | t u sJ t| | |t u sšJ t| || tu s³J t| ||tu sŸJ t|| | t u sÉJ t|| |tu sÔJ t||| t u sßJ t|||tu sêJ qœtdd tj tjfD sûJ d S )NTFrO   c                 s   s     | ]}|  d d¡|u V  qdS )rO   rR   Nr   rU   rL   rL   rM   rë   _  s    z"test_true_false.<locals>.<genexpr>)r.   r   r/   ÚhashÚlenrh   r0   Úboolr   rH   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J ttdktdk ¡ tddks%J ttdktdk ¡ tt dtdt ks=J ttdk ¡ tt dksMJ tttdktdk  ¡ t	tt dtdtkshJ t
 ¡ tjksqJ t ¡ tju szJ t ¡ tjksJ tttdk tdktdk  ¡ t t d¡ksJ ttdk ttdk  ¡ tdk  ¡ ks±J ttdd  td	tdt d tdt d   ¡ tju sÒJ d S )
Nr   FrO   rR   éþÿÿÿr   c                   S   s   t tdk  ¡ S r¡   )r   rl   Úas_setrL   rL   rL   rM   rS   o  s    z"test_bool_as_set.<locals>.<lambda>r£   )r   rm   r  r   r   r   rl   r   r   r   r.   r   ÚUniversalSetr/   ÚEmptySetÚopenr   rC   r   r   r   rL   rL   rL   rM   Útest_bool_as_setb  s   &$0 ÿ2*8r  c                  C   s   t d\} }t| dk|dk ¡ tdttdt ksJ t| dk|dk ¡ tjtj tt dddtt ddd  ks@J d S )Nrð   r   T)r
   r   r  r   r   r   r   Ú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u r*t|jt|| tj¡ ks)J n|dks0J t	| }|jt	u rDt|jdksBJ d S |dksJJ d S )Nrl   T)Úextended_realrR   )
r
   r   r   Úfuncrý   ÚargsÚcountr   r.   r   )rl   r  ÚvrL   rL   rM   Útest_all_or_nothing}  s   
$
r  c                   C   s    t jt ksJ tjtksJ d S rk   )r.   r[   r/   rL   rL   rL   rM   Útest_canonical_atoms  ó   r  c                   C   s    t jtksJ tjt ksJ d S rk   )r.   Únegatedr/   rL   rL   rL   rM   Útest_negated_atoms  r  r  c                   C   s   t tdkttk  ¡ tdtddksJ t tdkttk  ¡ tdtks&J ttk  ¡ tt tks4J tt k ¡ tt tksCJ d S )NrR   T)Ú	left_openrO   )r   rl   r   r  r   rL   rL   rL   rM   Útest_issue_8777  s   ($"r  c                   C   sJ   t tt tk tdktdtkttk  ¡ tt dtdt ks#J d S )Nr  rR   )r   r   r   rl   r  r   rL   rL   rL   rM   Útest_issue_8975  s   *ÿr  c                   C   s(   t g d¢dks
J t ddksJ d S )N)rO   r   rO   r   r   rO   r   éR   Ú0010101000111001i9*  )r2   rL   rL   rL   rM   Útest_term_to_integer¢  s   r  c                  C   s  t d\} }}}| |@ |@ | |@ B }| | |@ |¡||@ |B ks"J | | |@ |@ |¡| |@ |B ks4J | |B |B | |B @ }| | |B |¡||B |@ ksNJ | | |B |B |¡| |B |@ ks`J | |A |A | |A @ }| | |A |¡||A |@ kszJ | | |A |A |¡| |A |@ ksJ d S )Nza b c d)r
   r³   )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g d¢ksJ t tttB ttgddg d¢ks'J t ttt? ttgddg d¢ks:J t ttttttgddgdfddgdfddgdfddgdfgks^J d S )	NF)Úinput)FFFT)FTTT)TTFTr   rO   T)Úlistr3   r   rl   rm   rL   rL   rL   rM   Útest_truth_table¶  s   ÿÿÿ*ÿr  c                     s  t jt jfD ]x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 ]J tdD ]C} 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   q9q3qd S )Nc                      s    
 S rk   rL   rL   ©rà   rL   rM   rS   Ã  ó    z!test_issue_8571.<locals>.<lambda>c                      s     S rk   rL   rL   r  rL   rM   rS   Ä  r   c                      ó   t  S rk   )ÚabsrL   r  rL   rM   rS   Å  ó    c                      r!  rk   )ÚintrL   r  rL   rM   rS   Ç  r#  rR   c                      s     S rk   rL   rL   ©Úorà   rL   rM   rS   Ë  r#  c                      s     S rk   rL   rL   r%  rL   rM   rS   Ì  r#  c                      s     S rk   rL   rL   r%  rL   rM   rS   Í  r#  c                      s     S rk   rL   rL   r%  rL   rM   rS   Î  r#  c                      s     S rk   rL   rL   r%  rL   rM   rS   Ï  r#  c                      s     S rk   rL   rL   r%  rL   rM   rS   Ð  r#  )	r   r.   r/   rC   rZ   Ú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us+J | ¡ tju s4J |dk ¡ tju s?J d S )NÚnT)Únegativezp q)ÚpositiverO   r   )r
   r   r/   Úexpandr.   )r+  ÚpÚqÚrrL   rL   rM   Útest_expand_relationalÔ  s   ,r2  c                   C   s$   t jjdksJ t jjdksJ d S )NT)r   r.   Úis_Atomr/   rL   rL   rL   rM   Útest_issue_12717Ý  s   r4  c                     sŠ   t ddd} tdd dtjd| fD sJ t ddd}td	d d
tjd|fD s,J tdd ttdk fD s;J dtdtd g fD ] tt fdd qEd S )NÚnzT)Únonzeroc                 s   ó    | ]
}t |tju V  qd S rk   )r4   r   r.   rU   rL   rL   rM   rë   ä  ó    z"test_as_Boolean.<locals>.<genexpr>rO   rt   )rù   c                 s   r7  rk   )r4   r   r/   rU   rL   rL   rM   rë   æ  r8  Fr   c                 s   s    | ]	}t ||kV  qd S rk   ©r4   rU   rL   rL   rM   rë   ç  s    rR   c                      r!  rk   r9  rL   ©rW   rL   rM   rS   é  r#  z!test_as_Boolean.<locals>.<lambda>)r
   rÿ   r   r.   r/   rl   rC   rZ   )r5  rt   rL   r:  rM   Útest_as_Booleanâ  s     ÿr;  c                  C   s>  t tdk ttjtthksJ ttfD ]#} | tdjt ks J | tdjthks+J | tdjthks6J qtj	jt ks@J tj
jt ksIJ tjthksQJ ttttdttdjtthksdJ t t¡jt ksoJ t td¡jt ks{J t t¡jthksJ t td¡jthksJ t t¡jt ksJ d S )NrO   TF)r   rl   rm   rt   Úbinary_symbolsr   r   Úsetr   r.   r/   r   r   ÚprimeÚltÚis_truerÎ   )r©   rL   rL   rM   Útest_binary_symbolsì  s   &rA  c                   C   s,   t tt t¡tdttdfdksJ d S )Nr   F)rO   T)r   rl   rm   Údiffr   r   rL   rL   rL   rM   Útest_BooleanFunction_diffý  s   ,rC  c                  C   s  t d\} }}}}}}}||@ |@ | @ ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ |@ | @ B ||@ | @ | @ B ||@ |@ | @ | @ B ||@ |@ | @ | @ B ||@ |  @ | @ | @ B ||@ |  @ | @ | @ B | |@ |@ |@ | @ | @ B }||@ |@ | @ ||@ |@ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ | @ | @ B ||@ |@ | @ | @ B ||@ |  @ | @ | @ B | |@ |@ |@ | @ | @ B }	||B |B ||B |B @ ||B |B @ ||B |B @ ||B |B @ ||B |B @ ||B | B | B @ | | B | B | B @ || B | B | B | B @ | |B | B | B | B | B @ || B | B | B | B | B @ ||B |B |  B | B | B | B @ }
t|d|	ksšJ t|d|
ks²J g d¢g d¢g d¢g d¢g d¢g d	¢g}g d
¢g d¢g d¢g d¢g}tttttg|tt @ tt@ t @ B ksìJ tttttg||tt @ tt@ t @ B ksJ d S )NzA B C D E F G HÚdnfÚcnf)r   rO   r   r   r   )r   rO   rO   r   r   r   r   ©rO   r   r   r   ©rO   r   r   rO   )rO   rO   r   r   ©rO   rO   r   rO   )r
   r(   r   ru   rl   rm   rt   )rI   rJ   rK   ri   ÚEr  ÚGÚHr0  ÚsoldnfÚsolcnfr   rŠ   rL   rL   rM   Útest_issue_14700  s   8ÿÿÿþþþýýýüüû6ÿÿÿþþþýý.
ÿ
ÿÿþþý ý"üÿ0ÿrN  c                  C   s    t ttj} t| | ksJ d S rk   )r   rl   r   ÚIntegersr(   )ÚcondrL   rL   rM   Útest_issue_25115  s   rQ  c                  C   s  t ddd\} }}}t ddd\}}t||k||k  ¡ tjks"J t||k||k ¡ tjks2J t||k| | k ¡ tjksDJ t||k| | k  ¡ tjksVJ t| | k||k  ¡ tjkshJ t| | k| | k ¡ tjks|J t| | k||k ¡ tjksJ t| | k| | k  ¡ tjks¢J t||k||k  ¡ tjks²J t||k||k ¡ tjksÂJ t||k| | k ¡ tjksÔJ t||k| | k  ¡ tjksæJ t| | k||k  ¡ tjksøJ t| | k||k ¡ tjksJ t| | k| | k ¡ tjks J t| | k| | k  ¡ tjks5J t||k ||k ¡ tjksFJ t||k||k ¡ tjksWJ t| | k||k ¡ tjksjJ t| | k ||k ¡ tjks}J t||k | | k ¡ tjksJ t| | k| | k ¡ tjks¥J t||k| | k ¡ tjksžJ t| | k | | k ¡ tjksÍJ t||k ||k ¡ tjksÞJ t||k||k ¡ tjksïJ t| | k||k ¡ tjksJ t| | k ||k ¡ tjksJ t||k | | k ¡ tjks(J t||k| | k ¡ tjks;J t| | k| | k ¡ tjksPJ t| | k | | k ¡ tjkseJ t||k| |k ||k ¡ tjksyJ t||k||k  ¡ tjksJ t||kt|| ¡ ||kksJ t||kt|| ¡ t||ks±J tt|||dkd|k |dk||k  ¡ t|||dk@ |dk@ ||k@ ksÚJ tt||||k| |k ||k  ¡ ||k||kB | |k B ksûJ tt||||k| |k ||k||k  ¡ t||||k@ | |k @ ks J tt|||dkd|k |dk||k  ¡ t|||dk@ |dk@ ||k@ ksIJ t||t||@ ||k@ ||k@  ¡ t||t||@ ||k@ ksnJ tt||t||  ¡ tt|d	t|d	ksJ t||k||k ¡ t	||ksJ t|dk|d
k t|| ¡ tjks²J t||kt|d	 ¡ t|d	kt|d	ksËJ tt	|dt	|d ¡ tjksÞJ tt|dt	d| ¡ t|dksóJ tt|dt	d| ¡ t	|dksJ d S )Núw x y zT©Úrealúd eFrO   rR   r   r   r£   )
r
   r   r   r   r.   r   r/   r   r   r   )ru   rl   rm   rt   rš   r`   rL   rL   rM   Útest_relational_simplification$  sx     $$$($(  $$$&**""&&&*&*""&&&&**("&(( 
ÿ"
ÿ(
ÿ( 
ÿ&
ÿ8&*2&*.rV  c                  C   s   t ddd} t| dk | dk ¡ tjksJ t| dk | dk ¡ tjks&J t| dk | dk ¡ tjks6J t| dk| dk ¡ tjksFJ d S )Nrl   TrS  rO   r£   )r
   r   r   r   r.   r   r/   ©rl   rL   rL   rM   Útest_issue_8373f  s
      $rX  c                  C   s4   t ddd} tt| dt| d ¡ tjksJ d S )Nrl   TrS  rO   rR   )r
   r   r   r   r   r/   rW  rL   rL   rM   Útest_issue_7950n  s   (rY  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s<J d 	| ||¡qd S )NrO   zHOriginal: {}
and simplified: {}
do not evaluate to the same value for {})
Úfree_symbolsrý   r  r=  rF   r(  ÚdictrÐ   r³   Úformat)	ÚoriginalÚ
simplifiedÚsymbr+  Ú	valuelistÚvaluesÚsublistÚoriginalvalueÚsimplifiedvaluerL   rL   rM   Ú(test_simplification_numerically_functionu  s   &


þüz\test_relational_simplification_numerically.<locals>.test_simplification_numerically_functionrR  TrS  rU  FrO   rR   r   r£   )r
   r   r   r   r   )	re  ru   rl   rm   rt   rš   r`   ÚexpressionsÚ
expressionrL   rL   rM   Ú*test_relational_simplification_numericallys  s"   $$$*$ÿ"ú	ÿÿrh  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 ]9\}
}|D ]2}|
|d j }|d }|	D ]"}tt||}| |¡}| |¡}||ksJ d |d ||¡q]qNqHd S )Nr   ©ÚWild)Ú_simplify_patterns_andÚ_simplify_patterns_orÚ_simplify_patterns_xorr\   r]   r^   r  r   c                 S   ó*   g | ]}t d d |D st |s|qS )c                 s   ó    | ]}|d  V  qdS ©rR   NrL   ©rV   ru   rL   rL   rM   rë     rì   zQtest_relational_simplification_patterns_numerically.<locals>.<listcomp>.<genexpr>©Úany©rV   r  rL   rL   rM   Ú
<listcomp>  ó   * zGtest_relational_simplification_patterns_numerically.<locals>.<listcomp>rO   úGOriginal: {}
and simplified: {}
do not evaluate to the same value for{})Ú
sympy.corerj  Úsympy.logic.boolalgrk  rl  rm  r   r   r   r  r=  rF   r(  r  r[  rÐ   Úxreplacer\  )rj  rk  rl  rm  r\   r]   r^   r_  Úpatternlistsr`  r  ÚpatternlistÚpatternr]  r^  ra  rb  rc  rd  rL   rL   rM   Ú3test_relational_simplification_patterns_numerically  s4   
þ 

þüýÿ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s(J d S )Nr+  r   r   )r
   r   )r+  rL   rL   rM   Útest_issue_16803­  s   "ÿr  c                      s   t ttti tt t dkt t dk   ¡sJ tt t dk t t dk   ¡r*J 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   ©r1  rL   rM   rS   ž  ó     z"test_issue_17530.<locals>.<lambda>c                      ó    t tt dktt dk   ¡S r  ©r   rl   rm   r³   rL   r  rL   rM   rS   ¹  r  c                      r  r  r  rL   r  rL   rM   rS   º  r  )rl   r   rm   r   r³   r   rC   rZ   rL   rL   r  rM   Útest_issue_17530Ž  s   $$r  c                   C   s¬   t ddgddgksJ t g d¢g d¢ksJ t g d¢g d¢ks$J t g d¢g d¢ks0J t g d¢g d¢ks<J t g d¢g d¢ksHJ t g d	¢g d
¢ksTJ d S )NrO   r   r   r   ©rO   rO   rO   r   rG  rF  r   rH  r   )r8   rL   rL   rL   rM   Útest_anf_coeffsœ  s   r  c                  C   s   t d\} }t| gddgdksJ t| gddgdksJ t| gddgt| dddks/J t| |gg d¢tdt| |ddksDJ d S )Nrð   rO   Tr   FrÂ   r  )r
   r9   r   r   rñ   rL   rL   rM   Útest_ANFformÇ  s   "ÿr  c                  C   sP   t d\} }td| |gt| |ksJ tddg| |gtt|| ks&J d S )Nrð   r   rO   r   )r
   r:   r   r   rñ   rL   rL   rM   Útest_bool_mintermÐ  s   (r  c                  C   sT   t d\} }td| |gtt| |ksJ tddg| |gtt|| ks(J d S )Nrð   rR   r   rO   )r
   r;   r   r   rñ   rL   rL   rM   Útest_bool_maxtermÖ  s    (r  c                  C   sF   t d\} }td| |g|ksJ tddg| |gt| |ks!J d S )Nrð   rO   )r
   r<   r   rñ   rL   rL   rM   Útest_bool_monomialÜ  s   $r  c                   C   s8   t g d¢g d¢dksJ t g d¢g d¢dksJ d S )Nr   r   rR   r   r£   )r=   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v s,J d S rË   )rJ   rK   rI   r+   )rp   Úres1ÚresultrL   rL   rM   Útest_issue_19114ç  s   r  c                  C   sl   t ttttgg d¢} tt @ tt@ t@ B tt @ t @ B tt @ t @ B tt @ t @ B }| |ks4J d S )N)rO   rR   r   rã   r   é   é   é	   r   é   é   r   )r   r\   r]   r^   rš   )r  ÚexpectedrL   rL   rM   Útest_issue_20870ï  s   $ÿÿr  c                   C   sV   t g d¢tttgttttttksJ t g d¢tttgttttks)J d S ©Nr   )r   rO   r   )r>   rl   rm   rt   r   r   rL   rL   rL   rM   Útest_convert_to_varsSOPö  s   ,*r  c                   C   sR   t g d¢tttgtttttksJ t g d¢tttgttttks'J d S r  )r?   rl   rm   rt   r   r   rL   rL   rL   rM   Útest_convert_to_varsPOSû  s   (*r  c                     sz   t d\ } }}tt dksJ t | @ |@ | B A B dks&J tt ddks1J tt fdd d S )Nza:erR   r  Tr   c                      s   t   S rk   )rA   rL   ©r\   r]   rL   rM   rS     r}   z%test_gateinputcount.<locals>.<lambda>)r
   rA   r   rC   rZ   )r^   rš   r`   rL   r  rM   Útest_gateinputcount   s
   $r  c                   C   sf  t tdk tdk  rJ t tdk tdk sJ t tdk dtktju s%J t tdk tdk tdk ks4J t tdktdk r@J t tdktdksKJ t tdkdtktju sYJ t tdktdktdkkshJ t tdktdk rtJ t tdktdksJ t tdkdtk tju sJ t tdktdktdkksJ t tdktdk ršJ t tdktdks³J t tdkdtktju sÁJ t tdktdktdkksÐJ t ttdttd rÞJ t ttdttdsëJ t ttdtdttju sûJ t ttdttdttdksJ t ttdttd rJ t ttdtdttju s.J t ttdttds<J t ttdttdttdksOJ t ttdktdktdktdkksdJ t ttdktdktdktdk@ tju s|J t t 	t¡t 	t¡tju sJ t t 	t¡t 
t¡tju sJ t t 	t¡t t¡t 	t¡ks±J d S r  )r   rl   r   r.   rm   r   r   r   r   r-  r,  r/   rT  rL   rL   rL   rM   Útest_refine  s:    &"&*0""*r  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 ]9\}}	|	D ]2}
||
d j	 }|
d }|D ]"}t
t||}| |¡}| |¡}||kssJ d |
d ||¡qQqBq<d S )Nr   ri  )Ú_simplify_patterns_and3r\   r]   r^   r  r   c                 S   rn  )c                 s   ro  rp  rL   rq  rL   rL   rM   rë   7  rì   z[test_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>.<genexpr>rr  rt  rL   rL   rM   ru  7  rv  zQtest_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>rO   rw  )rx  rj  ry  r  r   r  r=  rF   r(  r  r[  rÐ   rz  r\  )rj  r  r\   r]   r^   r_  r{  r`  r  r|  r}  r]  r^  ra  rb  rc  rd  rL   rL   rM   Ú=test_relational_threeterm_simplification_patterns_numerically-  s.   
 

þüýÿr  c                  C   sJ   t tttttt} t| t sJ t| jtttttthks#J d S rk   )	r   r   r\   r^   r   r]   rh   r=  r  rW  rL   rL   rM   Útest_issue_25451E  s   &r  N)¶Úsympy.assumptions.askr   Úsympy.assumptions.refiner   Úsympy.core.numbersr   Úsympy.core.relationalr   r   r   Úsympy.core.singletonr   Úsympy.core.symbolr	   r
   Úsympy.functionsr   Ú(sympy.functions.elementary.trigonometricr   r   Úsympy.sets.setsr   r   Úsympy.sets.containsr   Úsympy.simplify.simplifyr   ry  r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   Úsympy.assumptions.cnfrB   Úsympy.testing.pytestrC   rD   rE   Ú	itertoolsrF   rG   rH   rI   rJ   rK   ri   r\   r]   r^   rš   r`   ru   rl   rm   rt   rN   re   rf   rj   rq   rs   rv   rw   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*  r2  r4  r;  rA  rC  rN  rQ  rV  rX  rY  rh  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rL   rL   rL   rM   Ú<module>   sÒ    Ä		u			. 
	
B
	
	%