
    g              	          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          \  ZUZVZWZX ed          \	  ZYZZZ[Z\Z]Z^Z_Z`Zad Zbd Zcd Zdd Zed Zfd Zgd Zhd Zid Zjd Zkd Zld Zmd Znd Zod  Zpd! Zqd" Zrd# Zsd$ Ztd% Zud& Zv	 d' Zwd( Zxd) Zyd* Zzd+ Z{d, Z|d- Z}d. Z~d/ Zd0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? ZeOd@             ZdA ZdB ZdC ZdD ZdE ZdF ZdG ZdH ZdI ZdJ ZdK ZdL ZdM ZdN ZdO ZdP ZdQ ZdR ZdS ZePdT             ZdU ZdV ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde ZdfS )g    )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                     t           t          z  t          t           t                    k    sJ t           t          z  t          t           t                    k    sJ t           t          z  t          z  t          t          t           t                    t                    k    sJ t           t          z	  t          t           t                    k    sJ t           t          z  t          t          t                     k    sJ t            t          t                     k    sJ t           t          z  t          t           t                    k    sJ dS )z)Test that |, & are overloaded as expectedN)ABr   r   Cr   r   r        Z/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/logic/tests/test_boolalg.pytest_overloadingrQ   !   s     q5C1IIq5Bq!HHEQ;"SAYY******6WQ]]""""6WQ]]""""2Q<<<<q5C1IIrO   c            
         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 sJ t          dd          t          u sJ t          dt                    t          k    sJ t          dt                    t          u sJ t          ddd          t          u sJ t          ddt                    t          k    sJ t          ddt                    t          u sJ t          dt                    t          k    sJ t	          t
          d            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 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                  ,    t          dt                    S N   )r   rK   rN   rO   rP   <lambda>ztest_And.<locals>.<lambda>;   s    c!Qii rO   c                      h | ]}t          | S rN   )r   .0is     rP   	<setcomp>ztest_And.<locals>.<setcomp>A   s    777CG777rO   r   )r   r/   rK   r0   rD   	TypeError	canonicalrL   rH   r   abr   ceglgeles        rP   test_Andrh   -   s{   55D====q66Q;;;;t99u::tT??d""""tUu$$$$ue%%%%tQ<<1ua==E!!!!tT4  D((((tT1""""tUA%''''q!99>>>>
9''(((q1ua1f&&&&	AAq!+!+----q5!a%aa/LAq"bq!RB

****77\1Qr"+66777CAJJ<GGGGs2a88R1XX&&Bq!HHbAhh(?(?@@EIIIIIIrO   c                  t   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 sJ t          dd          t          u sJ t          dt                    t          u sJ t          dt                    t          k    sJ t          ddd          t          u sJ t          ddt                    t          u sJ t          ddt                    t          k    sJ t          dt                    t          u sJ t	          t
          d            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 )NTFrS   c                  ,    t          dt                    S rU   )r   rK   rN   rO   rP   rW   ztest_Or.<locals>.<lambda>S   s    bAhh rO   )r   r0   rK   r/   rD   r]   r^   rL   rb   s        rP   test_Orrk   E   s   445====a55A::::d88te99dD>>T!!!!dE??d""""eUu$$$$dA;;$eQ<<1dE5!!T))))dE1%%%%eUA!####a88t
9&&'''a!eQ!V$$$$	AAa""""q5!a%aa/LAq"baBr!Ryy((((((rO   c                  &   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 sJ t          d          t          u sJ t          dd          t          u sJ t          dd          t          u sJ t          dd          t          u sJ t          dt                    t           k    sJ t          dt                    t          k    sJ t          ddd          t          u sJ t          ddt                    t           k    sJ t          ddt                    t          k    sJ t          t          t          t                    t                     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                    cxk    rt          ddt                    k    sn J t          dk    } t          | | j                  t          dd          cxk    rt          dd          k    sn J d S NTFrS   r   )	r   r0   rK   r/   rL   
isinstancerM   Dr^   )rc   s    rP   test_Xorrp   [   s   55E>>>>q66Q;;;;q!99tQ??d""""q!Q1""""tUE1a((SAYYJ6666t99u::tT??e####tUt####ue%%%%tQ<<A2ua==AtUE""d****tUA1"$$$$ueQ1$$$$c!Qii%%%%%q!SAYY3q!Q??2222q!SAYY3q!99,,,,q1ua1fa  C1aLL@@@@C1aLL@@@@@@	AAq!+#a))8888s1ayy88888888rO   c                      t           t          z  } |                     t                    t           t          z  t            t           z  z  k    sJ d S N)xyrewriter   exprs    rP   test_rewrite_as_Andrx   t   s?    q5D<<QA27 3333333rO   c                      t           t          z  } |                     t                    t           t           z  t          t            z  z  k    sJ d S rr   )rs   rt   ru   r   rv   s    rP   test_rewrite_as_Orrz   y   s?    q5D<<QB1r62222222rO   c                      t           t          z  t          t           z  z  } |                     t                    t           t          z   t          t           z   z   k    sJ d S rr   )rt   zwru   r   rv   s    rP   test_rewrite_as_Nandr~   ~   sO    Ea1"fD<<QU8QBi#7!8888888rO   c                      t           t          t           z  z  } |                     t                    t            t          t           z   z   k    sJ d S rr   )r|   rt   r}   ru   r   rv   s    rP   test_rewrite_as_Norr      sE    QB<D<<1"aRy. 1111111rO   c                  "   t          t          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                  "    t          dd          S NTF)r   rN   rO   rP   rW   ztest_Not.<locals>.<lambda>   s    c$.. rO   TFr   rS   rV   )rD   r]   r   r0   r/   rN   rO   rP   test_Notr      s    
9..///t99u::q66T>>>>q66U????q66U??????rO   c                     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 sJ t          dd          t          u sJ t          dt                    t           k    sJ t          dt                    t          u sJ t          ddd          t          u sJ t          ddt                    t           k    sJ t          ddt                    t          u sJ d S r   )r   r0   rK   r/   rN   rO   rP   	test_Nandr      s:   66U????77qb====::;;$du$$$$e$$$$u%%%%a==QBq>>T!!!!dD!!U****dA1"$$$$eQ4''''''rO   c                     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 sJ t          dd          t          u sJ t          dt                    t          u sJ t          dt                    t           k    sJ t          ddd          t          u sJ t          ddt                    t          u sJ t          ddt                    t          u sJ d S r   )r   r/   rK   r0   rN   rO   rP   test_Norr      s6   55D====q66aR<<<<t99u::tT??e####tUu$$$$ue$$$$tQ<<5    ua==QBtT4  E))))tT1&&&&tUA%''''''rO   c                     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          t          u sJ t          d          t          u sJ t          dd          t          u sJ t          dd          t          u sJ t          dd          t          u sJ t          dt                    t          k    sJ t          dt                    t           k    sJ t          ddd          t          u sJ t          ddt                    t          k    sJ t          ddt                    t           k    sJ d S r   )r    r/   rK   r0   rN   rO   rP   	test_Xnorr      s   66T>>>>77qb====1::au$$$$1aA1"$$$$::;;$dt####e%%%%u%%%%a==Aq>>aReU##u,,,,eQ1$$$$ua  QB&&&&&&rO   c                     t          t          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 sJ t          dd          t          u sJ t          dd          t          u sJ t
          t          z	  t          t
          z  k    sJ t
          dk     t
          dk    z	  t
          dk    k    sJ t
          dk     t          j        t
          k    z	  t          u sJ t
          t
          z	  t          u sJ d S )Nc                  B    t          t          t          t                    S rr   )r   rK   rL   rM   rN   rO   rP   rW   ztest_Implies.<locals>.<lambda>   s    wq!Q// rO   TFr   rS   )	rD   
ValueErrorr   r/   r0   rK   rL   r	   OnerN   rO   rP   test_Impliesr      s=   
://0004$&&&&45((((5$4''''5%  D((((1a==D    1a==D    1a==E!!!!6Q!VEqAv16****Equqy!T))))6T>>>>>>rO   c                      t          t          t                    t          t          t                    cxk    r$t          t          t          t                    k    sn J t                      t          u sJ t          t          t                    t          t                    cxk    r	t          u sn J t          dd          t          dd          cxk    r	t          u sn J t          dd          t          dd          cxk    r	t          u sn J t          t          d          t          k    sJ t          t          d          t          t                    k    sJ t          t          t          d          t          t          z  k    sJ t          t          t          d          t           t           z  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          cxk    rt          dd          k    sn J t          t          t          t                    t          t          t                              t          u sJ d S rm   )
r   rK   rL   r/   r0   r   rM   r	   r   r   rN   rO   rP   test_Equivalentr      s   az!Q//FFFF:aA3F3FFFFFFF<<4az!}}4444444444dD!!Zu%=%=EEEEEEEEEEdE""j&=&=FFFFFFFFFFa!####a3q66))))aD!!QU****aE""qbA2g----aq    as1vv%%%%aAq))**jAq9I9I1.M.MMMMMa!eQ!V$$----a!eQ!VQ''50000a!eQ!VQ''50000a!eQUQY'':a+;+;OOOOz!Q?O?OOOOOOOhq!nnhq!nn55======rO   c                      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)rA   r/   r0   rN   rO   rP   test_Exclusiver      s|    UE5))T1111T5%((D0000T4''50000T4&&%//////rO   c                  L   t          t          t          t                                                  t          t          t                    t          t                                        du sJ t          t          t                                        t          t          z	  t          t          z	  z            du sJ t          t           z  t           t          z  z                      t           t           z  t          t          z  z            du sJ t          t          z	                      t           t           z	            du sJ t          t          t          z	  z	                      t          t          t          z	  z	            du sJ t          t          d            d S )NTFc                  b    t           t          z                      t           t          k              S rr   )rK   rL   equalsrN   rO   rP   rW   ztest_equals.<locals>.<lambda>   s    Qq1u(=(= rO   )
r   r   rK   rL   r   r   r   rM   rD   NotImplementedErrorrN   rO   rP   test_equalsr      s/   r!Qxx==CFFCFF 3 344<<<<a""AFqAv#6774????!VQ''!qbQU(;<<DDDDF??A2!8$$----!q&M!!!Q-00E9999
 = =>>>>>rO   c                  F%   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    sJ t          t          t          t          t          g|                    t          t	          t          t          t                    t          t                              t          t          t                                        k    sJ t          t          t          t          g| |z             t          u sJ t          t          t          t          g| |z             t          u sJ t          t                      t                      t                      g| |z             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    sJ t          t          t          t          t          g|          t          t	          t          t                    t                    t                    k    sJ dt          dt          digdg ddg}t          t          t          t          t          g|          t	          t          t          t                    t          t          t                    t          t                                        k    sJ t          t          t          t          t          g|          t          t	          t          t                    t                    t                    k    sJ t          dt          didgg dg}g dgt          t          fd           t          t          fd           t          t          d            t          t          t	          t          t                               }t#          t          t          t           z  z            |k    sJ t#          t          t          z  t          t           z  z            |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    sJ t#          t          t)          t          t                    t                               t          t)          t          t                    t                     k    sJ t#          t	          t          t)          t          d          t                    t          t)          t          d          t                                         t          t)          t          d          t	          t          t                               k    sJ t           t           z  t           z  t           t           z  t          z  z  }t          t          |          }t#          |          t          t           z  t           z  k    sJ t          t          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          \	  }}}}}}	}
}}||z  |z  |z  |z  |	z  |
z  |z  |z  ||z  |z  |z  |z  |	z  |
z  |z  | z  z  }t#          |          |k    sJ t#          ||z  |z  |z  ||z            ||z  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    sJ t          t          d            t          t          gdggdgg          t          u sJ t          t          gdggdgg          t          u sJ t          t          gg g           t.          u sJ t          t          d             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          z  t          t           z  z            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          t1          t          d          t1          t          t                                        t          t1          t          d          t1          t          d                    k    sJ t          t1          t          dz
  d          t1          t          t                                                              t          t1          t          d          t1          t          d                    k    sJ t          t3          t          dz
  d          t3          t          t                                                              t          t3          t          d          t3          t          t                              k    sJ t          t1          t          dz
  d          t3          t          t                                                              t          t1          t          d          t3          t          d                    k    sJ t          t1          t          dz
  d          t1          t          t          t          z             t1          t          t          z   d                                                    t          t1          t          d          t1          t          d#          t1          t          d                    k    sJ t          t1          t          dz
  d          t1          t          dz   d                                                    t1          t          d          k    sJ t          t3          t          dz
  d          t3          t          dz   d                                                    t3          t          d          k    sJ t          t1          t          dz
  d          t1          t          dz   d                                                    d!k    sJ t          t3          t          dz
  d          t3          t          dz   d                                                    t          t3          t          d          t3          t          d                    k    sJ t+          t5          t          t                               d"k    sJ d$S )%z1
    Test working of simplification methods.
    r   r   rS   r   rS   rS   rS   r   r   )rS   rS   r   )r   r   r   r   rS   r   rS   r   rS   rS   rS   rS   r   r   r   rS   r   r   rS   rS   r   rS   rS   rS   rS   r   rS   rS   rS   rS   rS   rS   )r   r   r   r   )r   r   rS   r   r   rS   r   rS   )rS               )r   rV      rS   r   r   r   c                  T    t          t          t          t          t          g           S rr   )r   r}   rs   rt   r|   mintermss   rP   rW   z-test_simplification_boolalg.<locals>.<lambda>$      w1a|X>> rO   c                  T    t          t          t          t          t          g           S rr   r   r}   rs   rt   r|   r   s   rP   rW   z-test_simplification_boolalg.<locals>.<lambda>%  r   rO   c                  T    t          t          t          t          t          gdg          S )Nabcdefgr   rN   rO   rP   rW   z-test_simplification_boolalg.<locals>.<lambda>'  s    gq!QlYK@@ rO   rV   r   c                  N    t          t          t          t          z  z  d          S )Nblabla)form)r)   rK   rL   rM   rN   rO   rP   rW   z-test_simplification_boolalg.<locals>.<lambda>8  s    ~a1q5kIII rO   za b c d e f g h j)dontcarec                  8    t          t          gdggdgg          S NrS   )r   rs   rN   rO   rP   rW   z-test_simplification_boolalg.<locals>.<lambda>M      wsaSEQC599 rO   c                  8    t          t          gdggdgg          S r   )r   rs   rN   rO   rP   rW   z-test_simplification_boolalg.<locals>.<lambda>R  r   rO   FTN)r   rs   rt   r|   r   r   r   r   r/   r
   r}   rD   r   r]   rK   rL   rM   r)   r   r   r   r   r   r0   r   r   r   )set1set2	dontcaresansr`   rc   r_   ra   dfrd   hjrw   r   s                 @rP   test_simplification_boolalgr      s    IIyyy)))YYY7DIIyyy)))YYY7DAq!9d##r#c!ffa..#c!ffa..'I'IIIIIw1ay$''((Bs3q663q66""C1II..//0 0 0 0Aq!9dTk**d2222Aq!9dTk**d2222EGGUWWegg.t<<DDDDlllLLL,,,H|||\\\:IAq!h	22
3q!99c#a&&#a&&))**	+ 	+ 	+ 	+Aq!Q<955RA]]A9N9NNNNN   H		IAq!h	22
3q!99c#a&&#a&&))**	+ 	+ 	+ 	+Aq!Q<955RA]]A9N9NNNNN<<<LLLHLLL!$IAq!h	22
3q!99c#a&&#a&&))**	+ 	+ 	+ 	+Aq!Q<955RA]]A9N9NNNNNAq!Q< HLLL!$IAq!h	22
3q!99c#a&&#a&&))**	+ 	+ 	+ 	+Aq!Q<955RA]]A9N9NNNNN Aq!a HI		{H
:>>>>???
:>>>>???
9@@AAA aAq

C!q1u+&&#----1q5QU+,,3333'!Q--((Bs1vvqMM9999*Q**++
3q!99c#a&&#a&&))**+ + + +#hq!nna0011S!Q5K5KKKKK#hq!nna0011S!Q5K5KKKKK#hq!nna0011S!Q5K5KKKKK"S!Q33S!Q5K5KLLMMx1~~r!Qxx(() ) ) )
qbA21"r'A+&AAq		A!QB!++++
:IIJJJBqAvs1q5!}}--..16::::BqAvs1q5!}}--..16::::BqAvs1q5!}}--..16:::: !((; < <Aq!Q1aAq519q=1q 1$q(1,	A	AA!A%*+D $4'''' 1q5A+/QU<<<AEEEE 1a&Aq6(
#
#CAq6QF8$$++++Aq6QF8$$++++
:99:::A3!u%%----A3!u%%----A3B5((((
:99:::A3!u%%----A3!u%%----A3B5(((( QUq1u%&&#aAq*:*:::::C3q66NN##u,,,,Bq#a&&MM""d****C1a"Q((++,,Bq!HHbAhh0G0GGGGGr!a%||R1XX&&//11SAq2a885L5LLLLLr!a%||R1XX&&//11SAq2a885L5LLLLLr!a%||R1XX&&//11SAq2a885L5LLLLLr!a%||R1q5\\2a!eQ<<88AA 
 
Aq2a99bAhh//0 0 0 0r!a%||RAq\\**3355AqAAAAr!a%||RAq\\**3355AqAAAAr!a%||RAq\\**3355>>>>r!a%||RAq\\**33 
 
Aq2a88$$% % % %CA2JJ4''''''rO   c            
      d   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    sJ t          t          t
          t          t          gg dg          t          t          t          t          gg dg                    dk    sJ t          t
          t          t          gg dg dg          }t          t          t          t          gg dg d	g          }t          ||          |t          t          t          t          ifk    sJ t          t          t
          t                    t          t
          t                               dk    sJ t          t          t
          t                    t          t
          t                              J t          t          t
          t                    t          t
          t          t                              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   r}   rs   rt   r|   r   r   r   r`   ra   r   )r   	function1	function2s      rP   test_bool_mapr   i  s   
 lllLLL,,,HCAKK##Aq6{2222GQ1aL(33Q1aL(335 5	RA]]Bs1vvqMM1	-	-1aAq!Q/GHI I I I GQ1I			{33Q1I			{335 58=> > > >Aq	IIIyyy#9::IAq	IIIyyy#9::IIy))	Q1aL!" " " "C1IIAq		z**e3333C1IIr!Qxx((000C1IIs1a||,,444C1aLL3q!Q<<-00E9999C1aOOc!Q1oo%566%??????rO   c                  ~   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    sJ dS )zBTest that mixing symbols with boolean values
    works as expectedTFN)r   rK   r0   r   r/   rN   rO   rP   test_bool_symbolr     s     q$<<1q$""""q%==E!!!!q$%''''a;;$a<<1rO   c                  R   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    sJ dt          k    du sJ t          j        du sJ t
          t          z  j        sJ t
          t          z  j        sJ t
           j        sJ t
          t          z  j        sJ t
          j        t          t
          t                    k    sJ t          t
          t                    sJ d S rm   )rn   r   r/   r0   
is_BooleanrK   rL   rN   rO   rP   test_is_booleanr     s+   dG$$----dG$$,,,,99999999I%::::::::J5    ?d""""EEB?E<:a111111a!!!!!!!rO   c                  
   t           t          z                      t           d          t          k    sJ t           t          z                      t           d          t          u sJ t           t          z                      t          d          t           k    sJ t           t          z                      t          d          t          u sJ t           t          z                      t           dt          di          t          u sJ t           t          z                      t           d          t          u sJ t           t          z                      t           d          t          k    sJ t           t          z                      t          d          t          u sJ t           t          z                      t          d          t           k    sJ t           t          z                      t           dt          di          t          u sJ d S r   )rK   rL   subsr0   r/   rN   rO   rP   	test_subsr     st   E<<4  A%%%%E<<5!!U****E<<4  A%%%%E<<5!!U****E<<D!T*++t3333E<<4  D((((E<<5!!Q&&&&E<<4  D((((E<<5!!Q&&&&E<<D!T*++t333333rO   c                      t          t          t          d                    \  } }| |z  || z  k    sJ | |z  || z  k    sJ dS )z$Test for commutativity of And and OrzA,BN)mapr   r   )rK   rL   s     rP   test_commutativer     sI    w''DAqq5AE>>>>q5AE>>>>>>rO   c                  j    t           t          z  t          z  t           t          t          z  z  k    sJ dS )zTest for associativity of AndNrK   rL   rM   rN   rO   rP   test_and_associativityr     s+     EQ;!q1u+%%%%%%rO   c                  j    t           t          z  t          z  t           t          t          z  z  k    sJ d S rr   r   rN   rO   rP   test_or_assicativityr     s)    UaKQ!a%[))))))rO   c                  6    t                      } |   | k    sJ d S rr   )r   )r_   s    rP   test_double_negationr     s     		AR5A::::::rO   c            	         t          t          t          t          d                    t           t          z  k    sJ t          t          t          t          t                    z	  z	            t          t          t          t                    t          t                              t          t                              k    sJ t          t          t          t          t          t                              t           t          z  t           t          z  z  t           t          z  z  t           t          z  z  k    sJ d S )NFevaluate)	r%   r   rK   rL   rM   r   r   r   ro   rN   rO   rP   test_eliminate_implicationsr     s    !'!Q"?"?"?@@aR1HLLLL!	a3q66k !"SVVSVV"4"4c!ff==> > > >!*Q1a"8"899
aQBFrAv&1"q&12 2 2 2 2 2rO   c                     t          t          t          z  t          z            t          t          t          hk    sJ t          t          t          z  t          z            t          t          z  t          hk    sJ t          t                    t          hk    sJ t          d          dhk    sJ t          d          dhk    sJ d S r   )r!   rK   rL   rM   rN   rO   rP   test_conjunctsr     s    QUQYAq!9,,,,a!eq[!!a!eQZ////Q<<A3T??tf$$$$Uw&&&&&&rO   c                     t          t          t          z  t          z            t          t          t          hk    sJ t          t          t          z  t          z            t          t          z  t          z  hk    sJ t          t                    t          hk    sJ t          d          dhk    sJ t          d          dhk    sJ d S r   )r"   rK   rL   rM   rN   rO   rP   test_disjunctsr     s    QUQYAq!9,,,,a!eq[!!q1uk]2222Q<<A3T??tf$$$$Uw&&&&&&rO   c            	         t          t          t          t          t                    t
                              t          t          t          t
                    t          t          t
                              k    sJ t          t          t          t          t          t
                                        t          t          t          t                    t          t          t
                              k    sJ t          t          t          t          t          t
                                        t          t          t          t                    t          t          t
                              k    sJ d S rr   )	r$   r   r   rK   rL   rM   r#   r8   r   rN   rO   rP   test_distributer     s    !"SAYY"2"233s2a88R1XX7N7NNNNN!#aAq"2"233r#a))SAYY7O7OOOOO"3q#a))#4#455SAYYAq		9R9RRRRRRRrO   c                     t          d          \  } }}t          t          | |                    t          | |          k    sJ t          t          | |                    t	          | |t          | |                    k    sJ t          t          t          | |          t          | |          |                    t	          | d| |z  d          k    sJ t          t          t          | |          t          | |          t          | |          t          | |                              dk    sJ t          t          | t          |          t          | |          t          | |          t          ||                              t	          dt          ||          t          | ||          d          k    sJ t          t	          | |                    t	          | |          k    sJ t          t          |                     t	          | dd          k    sJ t          t          | |                    t	          dt          | |          d          k    sJ t          t          | |                    t	          | |dt          | |          d          k    sJ t          t          | |                    t	          | dt          | |          d          k    sJ t          t          | |                    t	          | |dd          k    sJ t          t          | |z  | |z	            d          t	          dt          t          | |          t          | |                    d          k    sJ t          t          | |z  | |z            d          t	          dt          t	          | |          t          | |                    d          k    sJ t          | | |z  | z   z            dk    sJ d S )Nx,y,zTFremove_true)deep)r   r6   r   r   r   r   r   r   r    r   r   )rs   rt   r|   s      rP   test_to_anfr     s   gGAq!#a))Aq		))))"Q((s1aQ333333"WQ]]C1IIq11224QE2223 3 3 3"T!QZZQDAJJ1FFGG4OOOO"QAAa#a))T!QZZ@@AAc!QiiQ15AAAB B B B#a))Aq		))))#a&&>>SDe<<<<<<<$q!**T3q!99%!H!H!HHHHH#a))Aq$Aq		u M M MMMMM'!Q--  C4Q$N$N$NNNNN*Q""##s1a5'I'I'IIIII$q1ua1f%%E222c"Q((GAqMM22FFFG G G G#a!eQU##%000bQC1II..EBBBC C C C !A
m#$$------rO   c            	         t          t                    t          u sJ t          t                    t          u sJ t          t                    t          k    sJ t          t          t           z  t          z            t          u sJ t          t          t           z  t          z            t          u sJ t          t          t          z	            t           t          z  k    sJ t          t          t          t          t                              t           t          z  t           t          z  z  t           t          z  z  k    sJ t          t          t          z  t          z            t          t          z  t          z  t           t           z  t          z  z  t          t           z  t           z  z  t           t          z  t           z  z  k    sJ t          t          t          t          t                              t           t          z  t          t          z  z  k    sJ t          t          t          t          z  t          z                      t           t           z  t           z  k    sJ t          t          t          t          z  t          z                      t           t           z  t           z  k    sJ t          t          t          t          z	                      t          t           z  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          z  t          z                      t           t          z  t          z  t          t           z  t          z  z  t          t          z  t           z  z  t           t           z  t           z  z  k    sJ t          t          t          t          t          t                                        t           t           z  t          t           z  z  k    sJ t          t          t          z	  t          t          z	  z            t          t           z  t           t          z  z  k    sJ t          t          t          z	  t          t          z	  z  d          t           t           z  t          z  t          z  t          t           z  t           t          z  z  z  k    sJ t          t          dd                                           t          k    sJ t          t          dd                                           t           k    sJ t          t          d            d S )NFrS   r   c                  f    t          t          dk     dgt                                                    S r   )r   rK   rL   r*   rN   rO   rP   rW   ztest_to_nnf.<locals>.<lambda>  s$    c!a%!a007799 rO   )r*   r/   r0   rK   rL   r   rM   r   r   r   r   rD   r]   rN   rO   rP   test_to_nnfr     s   $<<4%==E!!!!!99>>>>!qb&1*%%%%!qb&1*&&&&!q&>>aR!V####*Q1%%&&A26qb1f*=!a*HHHHH!a%!)	
QrQBw{#qA2v{3rAv{CD D D D#aA,,QBFq1u#55555#a!eai..!!aR1"Wr\1111#a!eai..!!aR1"Wr\1111#a1f++!qb&((((#jAq))**++s2aA;;A2rA2/O/OOOOO#a!eai..!!
a!QB
#q1urz2qbA2glCD D D D#c!Qll##$$!qbQ!V(<<<<<16a1f%&&1r6qb1f*=====16a1f%u--
qb1qa1"f!a012 2 2 2q!Q<<  A%%%%q!Q<<  QB&&&& 999:::::rO   c                  ,   t          t          t          z             t          t	          t                    t	          t                              k    sJ t          t
          t          z  t          z            t          t          t
          t                    t          t          t                              k    sJ t          t
          t          z	            t
           t          z  k    sJ t          t
          t          t          z  z	            t
           t          z  t
           t          z  z  k    sJ t          t
          t          t          z  z  t
           t          t          z  z  z  d          t          t          z  k    sJ t          t
          t          z            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          z                      t
           t          z  t
           t          z  z  t           t           z  t
          z  z  k    sJ t          t          t
          t          t          z            d          t          t          t	          t                    t
                    t          t	          t                    t
                    t          t          t          t	          t
                                        k    sJ t          t
          dz             t
          dz   k    sJ d S NTrS   )r+   rL   rM   r   r   rK   r   r   rN   rO   rP   test_to_cnfr     sJ   AE(s3q663q662222221q5A+#bAhh1a"9"99999!q&>>qbAX%%%%!A,QBFrAv#66666!q1u+a!e,d33q1u<<<<!a%==C1II%%%%*Q""##s2aQ=="QA--'H'HHHHH*QA&&''
aQBFrQBw{+, , , ,*QA&&--Bs1vvqMM2c!ffa=="Q3q66*:*:;;< < < <!a%==AE!!!!!!rO   c                  ,   t          d          \  } }}}}}}}}}	}
}}}}| |z  |z  |z  |z  |z  |z  |z  |z  | |z  |z  |z  |z  |z  |z  |	z  |z  z  | |
z  |z  |z  |z  |z  |z  |z  |z  z  t          t                              sJ t          t          fd           t          t          t          ft          t          f          D ]D\  }} || ||||||||	  	        t          t          fd            |dd          k    sJ Ed S )Nzx1:16c                  &    t           d          S NTr   r+   eqs   rP   rW   z"test_issue_18904.<locals>.<lambda>3  s    vb4888 rO   c                  &    t           d          S r   r   r   s   rP   rW   z"test_issue_18904.<locals>.<lambda>6  s    6"t#<#<#< rO   T)r   force)	r   r'   r+   rD   r   zipr   r   r,   )x1x2x3x4x5x6x7x8x9x10x11x12x13x14x15r   tr   s                    @rP   test_issue_18904r
  -  sz   GNwGWGWDBBBBBS#sCGbL2"R'",r1B6
r'B,
b
 2
%
*S
02
58
s(R-#

"S
(3
.
4r
9<B &**
:8888999S"I/00 6 61Qr2r2r2r2r22z<<<<===qd$///2555556 6rO   c                      t          t          t          dk    t          dk    t          dk     z  z                      sJ d S )NrV      )r'   r+   r`   r_   rN   rO   rP   test_issue_9949r  :  s:    &!b&QUq1u$55667777777rO   c                     t          j        t          j        t          t          z                       t          t          t          z             k    sJ t          j        t          j        t          t          z  t          z                      t          t          t          z  t          z            k    sJ t          j        t          j        t          t          z	                      t          t          t          z	            k    sJ t          j        t          j        t          t          t          z  z	                      t          t          t          t          z  z	            k    sJ t          j        t          j        t          t          t          z  z  t           t          t          z  z  z                      t          t          t          t          z  z  t           t          t          z  z  z            k    sJ t          j        t          j        t          t          z                      t          t          t          z            k    sJ d S rr   )rC   
CNF_to_cnfto_CNFrL   rM   r+   rK   rN   rO   rP   test_to_CNFr  >  s   >#*q1uX..//6AE(3C3CCCCC>#*a!eq[1122fa!eq[6I6IIIII>#*Q!V,,--Q????>#*Q1q5\2233vaAEl7K7KKKKK>#*Q!a%[A2Q<%?@@AAVAQRUVQVK[\Z\`ade`eZfLfEgEggggg>#*QU++,,q1u======rO   c                     t          t          t          z             t          t	          t                    t	          t                              k    sJ t          t
          t          t          z  z            t          t          t
          t                    t          t
          t                              k    sJ t          t
          t          z	            t
           t          z  k    sJ t          t
          t          t          z  z	            t
           t          t          z  z  k    sJ t          t
          t          z            t
          t          z  k    sJ t          t          t
          t                    d          t          t          t
          t                    t          t	          t
                    t	          t                                        k    sJ t          t          t
          t          t          z            d          t          t          t
          t          t                    t          t	          t
                    t	          t                              t          t	          t
                    t	          t                                        k    sJ t          t
          dz             t
          dz   k    sJ d S r   )r,   rL   rM   r   r   rK   r   r   rN   rO   rP   test_to_dnfr  G  s   AE(s3q663q66222222!q1u+"SAYYAq		":":::::!q&>>qbAX%%%%!A,QB1q5>1111!a%==AE!!!!*Q""D))
3q!99c#a&&#a&&))**+ + + +*QA&&--
3q!Q<<SVVSVV,,c#a&&#a&&.A.ABBC C C C!a%==AE!!!!!!rO   c                  D   t          t          t          d                    \  } }}fd t          | |z  || z  g| ||g                     ddgddgg          k    sJ  t          | |z  ||  z  g| ||g                     ddgddgg          k    sJ d S )Nr   c                 `    	 t          fd| D                       S # t          $ r | cY S w xY w)Nc              3   .   K   | ]} |          V  d S rr   rN   )rZ   rs   sorted_recursives     rP   	<genexpr>z=test_to_int_repr.<locals>.sorted_recursive.<locals>.<genexpr>Z  s/      ;;!**1--;;;;;;rO   )sortedr]   )argr  s    rP   r  z*test_to_int_repr.<locals>.sorted_recursiveX  sO    	;;;;s;;;;;; 	 	 	JJJ	s    --rS   rV   r   r   )r   r   r   r-   )rs   rt   r|   r  s      @rP   test_to_int_reprr  U  s    '77++,,GAq!     KQAAq	BBCC1a&1a&)**+ + + +KQQB!QCCDD1a&1b'*++, , , , , ,rO   c            
         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 sJ t          t          | |t          | |                              du sJ t          t          t          |           |                    du sJ d S )Nx,yTF)r   r7   r/   r0   r   r   r   r   rs   rt   s     rP   test_is_anfr   d  s    5>>DAq$<<4%==D    !99#a))$$$$#aC1II&&''4////#aBq!HH%%&&%////#c!ffa..!!U******rO   c                  @   t          t                    du sJ t          t                    du sJ t          t                     du sJ t          t          t          z            du sJ t          t          t          z  t           t          z  z  t           t          z  z  t           t           z  z  d          du sJ t          t          t          z  t           t           z  z            du sJ t          t	          t          t          t                                        du sJ t          t          t          z            du sJ t          t          t          z  t           t          z  z  t           t          z  z  t           t           z  z  d          du sJ d S r   )r&   r/   rK   rL   r   r   rN   rO   rP   test_is_nnfr"  o  sZ   $<<4!991"::!a%==D    1q5aR!V$Q/A27;UCCtKKKK1q5aR1"W%&&$....#bAhh--  E))))!a%==E!!!!1q5aR!V$Q/A27;TBBeKKKKKKrO   c                     t          t                    du sJ t          t          t          z  t          z            du sJ t          t          t          z  t          z            du sJ t          t          t          z  t          z            du sJ t          t          t          z  t          z            du sJ t          t          t          z   t          z            du sJ d S r   )r'   rs   rt   r|   rN   rO   rP   test_is_cnfr$  {      !99!a%!)$$$$!a%!)$$$$1q5A+$&&&&1q5A+%''''AE(Q,5((((((rO   c                     t          t                    du sJ t          t          t          z  t          z            du sJ t          t          t          z  t          z            du sJ t          t          t          z  t          z            du sJ t          t          t          z  t          z            du sJ t          t          t          z   t          z            du sJ d S r   )r(   rs   rt   r|   rN   rO   rP   test_is_dnfr'    r%  rO   c                     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    sJ d} t          | ||          |k    sJ d}t          t          | |          ||          |k    sJ t          t          | d          t          |d          d          t          u sJ t          t          | |          t          t                    k    sJ t          t          ||           t          k    sJ t          dt          t                    t          k    sJ t          dt          t                    t          k    sJ t          t          d            t          t          d            t          t          d            t          t          d	            t          ddd          t          j        u sJ t	          t          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    sJ t          t          t          j        t                    t          t                    t          t          t          t                    k    sJ t          t          t          d          t          t                    t          k    sJ t          t          t          d          t          t                    t          k    sJ t          t          t          d          t          t                    t          k    sJ t          t          t          d          t          t                    t          k    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 S )NzA:CTFrS   r   c                  8    t          dt          t                    S rU   )r   rs   rt   rN   rO   rP   rW   ztest_ITE.<locals>.<lambda>  s    c!Qll rO   c                  .    t          dg t                    S r   r   rt   rN   rO   rP   rW   ztest_ITE.<locals>.<lambda>      c!Rmm rO   c                  .    t          ddt                    S )NrS   rN   r+  rN   rO   rP   rW   ztest_ITE.<locals>.<lambda>  r,  rO   c                  .    t          dt          g           S r   r+  rN   rO   rP   rW   ztest_ITE.<locals>.<lambda>  s    c!Qmm rO   r   c                  V    t          t          dk    t          t          t                    S r   )r   rs   rt   r|   rN   rO   rP   rW   ztest_ITE.<locals>.<lambda>  s    s1q5!Q22 rO   )r   r   r0   r/   rn   r   r   rs   r   rt   rD   r]   r	   r   r   r|   r   r   r   s      rP   test_ITEr0    s   ennGAq!tUD!!U****tT5!!T))))udE""e++++ueT""d****c!QllC(((((Aq!Q<<1Aq!Q<<1As1ayy!Q1$$$$r!U||SD\\511U::::q!Q<<3q66!!!!q!Q<<1q!Q<<1q!Q<<1
9**+++
9++,,,
9++,,,
9++,,,q!Q<<16!!!!c!QE222C88888r!T{{Aq!!SAq\\1111r!U||Q""c1"amm3333r!T{{Aq!!S!Q]]2222r!U||Q""c!Qll2222r!'1~~q!$$Aq!4444r!'1~~q!$$QB15555r!&!}}a##sA2q!}}4444r!'1~~q!$$Aq!4444 r!QxxA!####r!QxxA!####r!QxxA!####r!QxxA!####r!QxxA##Aq))Q....r!QxxA##Aq))Q....
:2233333rO   c                  8   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	          j        t                              du sJ t          t          t	          j        t                                        du sJ t          t          t          t                              du sJ t          t          t	          j        t                    t	          j        t                                        du sJ t          t          dk               sJ t          t          t          z   dk               rJ d S )NTFr   )
r2   rK   r   rL   r   zeror   r   rs   rt   rN   rO   rP   test_is_literalr3    s[   dt####e$$$$a==D    qb>>T!!!!bAhh5((((afQii  D((((c!&))nn%%----bAhh5((((c!&))QVAYY//00E9999a!e!a%!)$$$$$$$rO   c                     dt           z  t           dz  cxk    rt           k    sn J dt           z  t           dz  cxk    rdk    sn J t           t          z  t          t           t                    k    sJ dt           z  t           dz  cxk    rdk    sn J dt           z  t           dz  cxk    rt           k    sn J t           t          z  t          t           t                    k    sJ t            t	          t                     k    sJ dt           z	  t           dz  cxk    rt           k    sn J dt           z	  t           dz  cxk    rdk    sn J t           dz	  dt           z  cxk    rdk    sn J t           dz	  dt           z  cxk    rt            k    sn J t           t          z	  t          t           z  cxk    rt          t           t                    k    sn J dt           z  t           dz  cxk    rt            k    sn J dt           z  t           dz  cxk    rt           k    sn J t           t          z  t          t           t                    k    sJ d S r   )rK   rL   r   r   r   r   r   rN   rO   rP   test_operatorsr5    so   !8q4x$$$$1$$$$$$19E	****U******q5C1II!8q4x''''4''''''19E	&&&&Q&&&&&&q5Bq!HH2Q<<<<19T	&&&&Q&&&&&&A:e++++t++++++9	))))T)))))):!))))r))))))6Q!V,,,,wq!}},,,,,,!8q4x%%%%A2%%%%%%19E	&&&&Q&&&&&&q5C1IIrO   c                  &   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    rJ t          dk    rJ t           t          k    rJ t          t                     t          d          k    sJ t          t                    t          d          k    sJ t	          t           dh          t	          t          dh          cxk    rdk    sn J t          t           t                    sJ t          t          t                    sJ t          t           t                    rJ t          t          t                    rJ t          t                     t          u sJ t          d          t          u 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| |z  t          u sJ || z  t          u sJ |dur||z  t          u sJ | dur| | z  t           u sJ t          | |          t           u sJ t          ||           t           u sJ t          ||          t          u sJ t          | |           t           u sJ t          | t                    t           u sJ t          |t                    t          k    sJ | du r|du s| |z  t           u sJ || z  t           u sJ |dur||z  t          u sJ | dur| | z  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| |z  t           u sJ || z  t           u sJ |dur||z  t          u sJ | dur| | z  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           u sJ t          | |          t          u sJ t          ||           t          u sJ t          ||          t           u sJ t          | |           t          u sJ t          | t                    t          u sJ t          |t                    t           k    sJ t!          | |          t          u 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 s8| |z	  t          u sJ || z  t          u sJ || z	  t           u sJ | |z  t           u sJ |dur||z	  t           u sJ ||z  t           u sJ | dur| | z	  t           u sJ | | z  t           u sJ t#          | |          t          u sJ t#          ||           t          u sJ t#          ||          t           u sJ t#          | |           t           u sJ t#          | t                    t          k    sJ t#          |t                    t           k    sJ t#          t          |           t          k    sJ t#          t          |          t           k    sJ t%          | | |           t           u 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'          d t          j         t          j        fD                       sJ d S )NTFrS   c              3   F   K   | ]}|                     d d          |u V  dS )rS   rV   Nr   rY   s     rP   r  z"test_true_false.<locals>.<genexpr>_  s5      @@qzz!Q1$@@@@@@rO   )r/   r	   r0   hashlenrn   r1   boolr   rI   r   rs   r   r   r   r   r   r   r   all)TFs     rP   test_true_falser>    s	   16>>>>AGtKKK4<<<<E>>>>::d####;;$u++%%%%d|UEN 3 38888q888888dK(((((e[)))))
 $%%%%%%&&&&&
 t99t99u::u::5E>>>>6T>>>>tuen55 ]% ]%11ayyE!!!!1ayyE!!!!1ayyE!!!!1ayyD    1ayyA~~~~1ayyE!!!!T		a5jjq5E>>>>q5E>>>>E>>q5E>>>>D==q5D====!Qxx4!Qxx4!Qxx5    !Qxx4!Qxx4!Qxx1}}}}T		a5jjq5D====q5D====E>>q5E>>>>D==q5D====1ayyD    1ayyD    1ayyE!!!!1ayyE!!!!1ayyQB1ayyA~~~~T		a5jjq5D====q5D====E>>q5E>>>>D==q5E>>>>AqzzT!!!!AqzzT!!!!AqzzT!!!!AqzzU""""AqzzaRAqzzT!!!!1ayyE!!!!1ayyE!!!!1ayyD    1ayyE!!!!1ayyE!!!!1ayyQBq!}}%%%%q!}}$$$$q!}}$$$$q!}}$$$$q!}}!!!!q!}}$$$$q!}}$$$$q!}}""""T		a5jj6U????6U????6T>>>>6T>>>>E>>6T>>>>6T>>>>D==6T>>>>6T>>>>!Q5((((!Q5((((!Q4''''!Q4''''!Q1$$$$!QA2%%%%!Q1$$$$!QA2%%%%1a||t####1a||t####1a||u$$$$1a||u$$$$1a||t####1a||u$$$$1a||t####1a||u$$$$$@@qvqw.?@@@@@@@@@@rO   c                     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                    z   k    sJ t          t          dk                                              t          t           d          k    sJ t          t          t          dk    t          dk                                                         t          t          t           d          t          dt                              k    sJ t          j                    t          j        k    sJ t          j                    t          j        u sJ t                                          t          j        k    sJ t          t          t          dk     t          dk              t          dk                                               t          j        t           d          k    sJ t          t          dk     t!          t                    dk                                               t          dk                                     k    sJ t#          t$          d            t'          dt)          dt          z            dz  t!          dt          z            dz  z                                            t          j        u sJ d S )	Nr   FrS   rV   r   c                  V    t          t                    dk                                     S r   )r   rs   as_setrN   rO   rP   rW   z"test_bool_as_set.<locals>.<lambda>o  s    Q!(;(;(=(= rO   r   )r   rt   rB  r   r   r   rs   r   r   r   r/   r	   UniversalSetr0   EmptySetopenr   rD   r   r   r   rN   rO   rP   test_bool_as_setrF  b  s   qAvua1f%%,,..(1b//AAAAqAvqBw&&((HROO;;;;a1fa2g%%''8RC+<+<x2+NNNNNq1u::(B3"2"22222s1q5!a%  !!((**hsAB001 1 1 1;==AN****<>>QZ''''88::''''r!a%QQ''..00HM2#q4I4IIIIIq1uc!ffqj!!((**q1unn.>.>>>>>
 = =>>>b#ac((A+c!A#hhk)**1133qzAAAAAArO   c            	         t          d          \  } }t          | dk    |dk                                              t          dt                    t          dt                    z  k    sJ t          | dk    |dk                                              t          j        t          j        z  t          t           ddd          t          t           ddd          z  z
  k    sJ d S )Nr  r   T)r   r   rB  r   r   r   r	   Realsr  s     rP   test_multivariate_bool_as_setrI  t  s    5>>DAqqAvqAv%%''8Ar??8Ar??+JJJJJa1fa1f$$&&!'!'/"at$$Xrc1dD%A%AA+B B B B B B BrO   c                     t          dd          } | t           k    | t          k    f}t          | }|j        t          u rHt	          |j                  t	          |          |                    t          j                  z
  k    sJ n|dk    sJ t          | }|j        t          u rt	          |j                  dk    sJ d S |dk    sJ d S )Nrs   T)extended_realrV   )
r   r   r   funcr9  argscountr	   r/   r   )rs   rM  vs      rP   test_all_or_nothingrP  }  s    4(((A8Q"WDT
Av}}16{{c$ii$**QV*<*<<<<<<<Dyyyy
D	Av||16{{aDyyyyyyrO   c                  b    t           j        t           k    sJ t          j        t          k    sJ d S rr   )r/   r^   r0   rN   rO   rP   test_canonical_atomsrR    s.    >T!!!!?e######rO   c                  b    t           j        t          k    sJ t          j        t           k    sJ d S rr   )r/   negatedr0   rN   rO   rP   test_negated_atomsrU    s.    <5    =D      rO   c                  X   t          t          dk    t          t          k                                               t	          dt          d          k    sJ t          t          dk    t          t          k                                               t	          dt                    k    sJ t          t          k                                     t	          t           t                    k    sJ t          t           k                                    t	          t           t                    k    sJ d S )NrV   T)	left_openrS   )r   rs   r   rB  r   rN   rO   rP   test_issue_8777rX    s    q1ua"f$$&&(1bD*I*I*IIIIIqAvq2v%%''8Ar??::::F??"b 1 11111G2#r!2!2222222rO   c                  @   t          t          t           t          k     t          dk              t          dt          k    t          t          k                                                         t          t           d          t          dt                    z   k    sJ d S )Nr@  rV   )r   r   r   rs   rB  r   rN   rO   rP   test_issue_8975rZ    s{    c2#'17##SaR%8%899@@BB"bHQOO+, , , , , ,rO   c                  ^    t          g d          dk    sJ t          d          dk    sJ d S )N)rS   r   rS   r   r   rS   r   R   0010101000111001i9*  )r3   rN   rO   rP   test_term_to_integerr^    sB    00011R7777-..%777777rO   c                  P   t          d          \  } }}}| |z  |z  | |z  z  }|                    | |z  |          ||z  |z  k    sJ |                    | |z  |z  |          | |z  |z  k    sJ | |z  |z  | |z  z  }|                    | |z  |          ||z  |z  k    sJ |                    | |z  |z  |          | |z  |z  k    sJ | |z  |z  | |z  z  }|                    | |z  |          ||z  |z  k    sJ |                    | |z  |z  |          | |z  |z  k    sJ d S )Nza b c d)r   r   )r_   r`   ra   r   r   s        rP   test_issue_21971r`    sm   ##JAq!Q	A	AEA66!a%q1uqy((((66!a%!)Q1q519,,,,	
Qq1uA66!a%A{****66!a%!)QAEQ;....	
Qq1uA66!a%A{****66!a%!)QAEQ;......rO   c                  R   t          t          t          t          t                    t          t          gd                    g dk    sJ t          t          t          t          z  t          t          gd                    g dk    sJ t          t          t          t          z	  t          t          g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   rS   T)listr4   r   rs   rt   rN   rO   rP   test_truth_tablerd    s4   C1II1vU;;;<<###$ $ $ $AEAq677788!!!" " " "AFQF%88899!!!" " " "C1II1v..//a&%Aq65/QFE?aVTNKL L L L L LrO   c                     t           j        t           j        fD ]1t          t          fd           t          t          fd           t          t          fd           t          t          fd           t           j        t           j        t          fD ]t          d          D ]} t          t          fd           t          t          fd           t          t          fd           t          t          fd	           t          t          fd
           t          t          fd           c3d S )Nc                  
     
 S rr   rN   r	  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  	    1" rO   c                  
      S rr   rN   rg  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  rh  rO   c                  "    t                     S rr   )absrg  s   rP   rW   z!test_issue_8571.<locals>.<lambda>      #a&& rO   c                  "    t                     S rr   )intrg  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  rl  rO   rV   c                       z   S rr   rN   or	  s   rP   rW   z!test_issue_8571.<locals>.<lambda>      !a% rO   c                       z
  S rr   rN   rp  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  rr  rO   c                       z  S rr   rN   rp  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  rr  rO   c                       z  S rr   rN   rp  s   rP   rW   z!test_issue_8571.<locals>.<lambda>      !A# rO   c                       z  S rr   rN   rp  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  rv  rO   c                       z  S rr   rN   rp  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  s    !Q$ rO   )	r	   r/   r0   rD   r]   Zeror   rs   range)_rq  r	  s    @@rP   test_issue_8571r|    sT   fag  y****%%%y****%%%y....)))y....)))&!%# 	 	A1XX  y-----000y-----000y-----000y+++++...y+++++...y,,,,,///!11	 rO   c                  @   t          dd          } t          dd          \  }}| ||  |z  dz   z  z   ||  |z  dz   z  z  dk     }|t          j        usJ |                                t          j        u sJ |dk                                    t          j        u sJ d S )NnT)negativezp q)positiverS   r   )r   r	   r0   expandr/   )r~  pqrs       rP   test_expand_relationalr    s    d###A54(((DAq
a!Al
Q1q\	*Q	.AAG88::    E>>qv%%%%%%rO   c                  b    t           j        j        dk    sJ t           j        j        dk    sJ d S )NT)r	   r/   is_Atomr0   rN   rO   rP   test_issue_12717r    s2    6>T!!!!7?d""""""rO   c                     t          dd          } t          d dt          j        d| fD                       sJ t          dd          }t          d d	t          j        d
|fD                       sJ t          d t
          t
          d
k     fD                       sJ dt          d          t
          dz   g fD ]t          t          fd           d S )NnzT)nonzeroc              3   L   K   | ]}t          |          t          j        u V   d S rr   )r5   r	   r/   rY   s     rP   r  z"test_as_Boolean.<locals>.<genexpr>  s/      FF1z!}}&FFFFFFrO   rS   r|   )r2  c              3   L   K   | ]}t          |          t          j        u V   d S rr   )r5   r	   r0   rY   s     rP   r  z"test_as_Boolean.<locals>.<genexpr>  s/      HHAz!}}'HHHHHHrO   Fr   c              3   <   K   | ]}t          |          |k    V  d S rr   r5   rY   s     rP   r  z"test_as_Boolean.<locals>.<genexpr>  s-      66az!}}!666666rO   rV   c                  "    t                     S rr   r  )r[   s   rP   rW   z!test_as_Boolean.<locals>.<lambda>  s    *Q-- rO   )r   r;  r	   r/   r0   rs   rD   r]   )r  r|   r[   s     @rP   test_as_Booleanr    s    	t	$	$	$BFFqvq"0EFFFFFFFF$AHH%!Q1GHHHHHHHH66Aq1u:666666661q1ub! 1 1y////00001 1rO   c                     t          t          dk     t          t                    j        t          t          hk    sJ t
          t          fD ]n}  | t          d          j        t                      k    sJ  | t          d          j        t          hk    sJ  | t          d          j        t          hk    sJ ot          j	        j        t                      k    sJ t          j
        j        t                      k    sJ t          j        t          hk    sJ t          t          t          t          d          t          t          d                    j        t          t          hk    sJ t          j        t                    j        t                      k    sJ t          j        t          d          j        t                      k    sJ t          j        t                    j        t          hk    sJ t          j        t          d          j        t          hk    sJ t          j        t                    j        t                      k    sJ d S )NrS   TF)r   rs   rt   r|   binary_symbolsr   r   setr	   r/   r0   r   r   primeltis_truer   )r   s    rP   test_binary_symbolsr    s   q1ua*q!f4444"X 1 1qAww%....qDzz(QC////qE{{)aS000006 CEE))))7!SUU****s""""q"Q,,1a))8QFBBBB71::$----41::$----9Q<<&1#----44=='A3....71::$------rO   c                      t          t          t                                        t                    t	          dt          t          d          fd          k    sJ d S )Nr   F)rS   T)r   rs   rt   diffr   r   rN   rO   rP   test_BooleanFunction_diffr    sD    q!99>>!	1bEll*;Y G GGGGGGGrO   c                     t          d          \  } }}}}}}}||z  |z  | z  ||z  | z  | z  z  ||z  | z  | z  z  ||z  | z  | z  z  ||z  | z  | z  z  ||z  | z  | z  z  ||z  | z  | z  z  ||z  | z  | z  z  ||z  |z  | z  z  ||z  | z  | z  z  ||z  |z  | z  | z  z  ||z  |z  | z  | z  z  ||z  |  z  | z  | z  z  ||z  |  z  | z  | z  z  | |z  |z  |z  | z  | z  z  }||z  |z  | z  ||z  |z  | z  z  ||z  | z  | z  z  ||z  | z  | z  z  ||z  | z  | z  z  ||z  | z  | z  z  ||z  | z  | z  z  ||z  | z  | z  z  ||z  |z  | z  | z  z  ||z  |  z  | z  | z  z  | |z  |z  |z  | z  | z  z  }	||z  |z  ||z  |z  z  ||z  |z  z  ||z  |z  z  ||z  |z  z  ||z  |z  z  ||z  | z  | z  z  | | z  | z  | z  z  || z  | z  | z  | z  z  | |z  | z  | z  | z  | z  z  || z  | z  | z  | z  | z  z  ||z  |z  |  z  | z  | z  | z  z  }
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           z  t
          t          z  t           z  z  k    sJ t          t          t          t
          t          g||          t          t           z  t
          t          z  t           z  z  k    sJ d S )NzA B C D E F G Hdnfcnf)r   rS   r   r   r   )r   rS   rS   r   r   r   r   rS   r   r   r   rS   r   r   rS   )rS   rS   r   r   rS   rS   r   rS   )r   r)   r   r}   rs   rt   r|   )rK   rL   rM   ro   Er=  GHr  soldnfsolcnfr   r   s                rP   test_issue_14700r    s   $%677Aq!Q1a
a%!)qb.QUaRZ1"_	-Q!qb	A
a%1"*r/
!eqbjA2o
/23a%1"*r/
C
a%1"*r/
!eqbjA2o
/23a%!)qb.
B a%1"*r/
  !eai1"nr1
3 78!eai1"nr6I
K a%1"*r/QB
	
  $%q5A2:?aR#7	
9
 a%!)a-1"
r
!
#A 1uqyA2~!a%!)qb.1QUaRZ1"_E1urzQB #$q5A2:?4781urzQBH1urzQB #$q5A2:?4781uqyA2~7JL 1urzQB!#% )*A	A(:aR(?AF 1uqyQUQY'1q5195QC1uqyUQY(+,q5A2:?<rQBw!|qb "%&!Vqb[A2%5%:< 1urzQB!#qb(* ./!Vqb[A2-=-BaR-GI 1uqyA2~"aR'1",	.F
 !U##v----!U##v----lllLLL,,,lll,H|||\\\<<<HIAq!Q<**qA2v!a%1"*.EEEEEAq!Q<955	
aRAEQBJ           rO   c                  n    t          t          t          j                  } t	          |           | k    sJ d S rr   )r   rs   r	   Integersr)   )conds    rP   test_issue_25115r    s2    Aqz""D$4''''''rO   c                     t          dd          \  } }}}t          dd          \  }}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    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    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     ||k                                              t          j        k    sJ 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    z  |dk    z  ||k    z  k    sJ t          t          ||          ||k    | |k     ||k                                               ||k    ||k    z  | |k     z  k    sJ t          t          ||          ||k    | |k     ||k    ||k                                               t          ||          ||k    z  | |k     z  k    sJ t          t          ||          |dk    d|k     |dk    ||k                                               t          ||          |dk    z  |dk    z  ||k    z  k    sJ t          ||          t          ||          z  ||k    z  ||k    z                                  t          ||          t          ||          z  ||k    z  k    sJ 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 eFrS   rV   r   r   r   )
r   r   r   r	   r/   r   r0   r   r   r   )r}   rs   rt   r|   r   rc   s         rP   test_relational_simplificationr  $  s   ...JAq!Q5u%%%DAqa1fa!e%%''161111a1fa!e%%''161111a1fqbA2g''))QV3333a1fqbA2g''))QV3333qbQBhA''))QV3333qbQBhaR  ))++qv5555qbQBhA''))QV3333qbQBhaR  ))++qv5555a1fa!e%%''161111a1fa!e%%''161111a1fqbA2g''))QV3333a1fqbA2g''))QV3333qbQBhA''))QV3333qbQBhA''))QV3333qbQBhaR  ))++qv5555qbQBhaR  ))++qv5555a!eQ!V%%''161111a!eQ!V%%''161111qbA2gqAv''))QV3333qbA2gqAv''))QV3333a!eaRA2X''))QV3333qbA2graRx  ))++qv5555a!eaRA2X''))QV3333qbA2graRx  ))++qv5555a!eQ!V%%''161111a!eQ!V%%''161111qbA2gqAv''))QV3333qbA2gqAv''))QV3333a!eaRA2X''))QV3333a!eaRA2X''))QV3333qbA2graRx  ))++qv5555qbA2graRx  ))++qv5555 a1fa!eQ!V$$--//169999qAvq1u&&((AG3333a1fbAhh((**qAv6666qAvr!Qxx  ))++r!Qxx7777r!QxxaQQA66??AA	AqQ!V	Q	'1q5	13 3 3 3bAhhQAq1u--6688	
aAEa!e$% % % %r!QxxaQQA66??AA
1aAEa!e$% % % % r!QxxaQQA66??AA	AqQ!V	Q	'1q5	13 3 3 3q!HHr!Qxx16*a1f5??AA	AqBq!HH	Q	') ) ) )r!QxxAr##,,..#bAhh1a2I2IIIIIqAvqAv''))R1XX5555q1ua"fbAhh''0022ag====qAvr!Qxx  ))++s162a88/D/DDDDDbAhh1a!!**,,6666r!QxxAq""++--Aq9999bAhh1a!!**,,1a888888rO   c                     t          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    sJ t          | dk    | dk                                              t          j        k    sJ d S )Nrs   Tr  rS   r   )r   r   r   r	   r/   r   r0   rs   s    rP   test_issue_8373r  f  s    $Aa!eQV%%''161111a!eQ!V%%''161111q1ua1f&&((AG3333a1fa1f&&((AF222222rO   c                      t          dd          } t          t          | d          t          | d                                                    t          j        k    sJ d S )Nrs   Tr  rS   rV   )r   r   r   r   r	   r0   r  s    rP   test_issue_7950r  n  sS    $Ar!QxxAq""++--888888rO   c                  \   d } t          dd          \  }}}}t          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          ||          z  ||k    z  ||k    z  f}|D ] } | ||                                           !d S )Nc                    | j         }t          |          }t          t          t	          t          t          |dz
   |                    |z  |                              }|D ]n}t          t          ||                    }|                     |          }|                    |          }||k    sJ d	                    | ||                      od S )NrS   zHOriginal: {}
and simplified: {}
do not evaluate to the same value for {})
free_symbolsr9  rc  r  rG   rz  dictr   r   format)	original
simplifiedsymbr~  	valuelistvaluessublistoriginalvaluesimplifiedvalues	            rP   (test_simplification_numerically_functionz\test_relational_simplification_numerically.<locals>.test_simplification_numerically_functionu  s    $II\$uqsVQ/?/?*@*@*BAFFGGHH	 	9 	9F3tV,,--G$MM'22M(oog66O O333 66(J88 4333		9 	9rO   r  Tr  r  FrS   rV   r   r   )r   r   r   r   r   )	r  r}   rs   rt   r|   r   rc   expressions
expressions	            rP   *test_relational_simplification_numericallyr  s  s   
9 
9 
9 ...JAq!Q5u%%%DAqr!QxxaQQA>>r!QxxaQQA>>bAhhQAqAvq1u==qAvr!Qxx((c"Q((AFAE2a1fa!e3D3DEE"Q((AFAE17AEBBD Dq!HHr!Qxx'162a1f=K " H H
001;1D1D1F1F	H 	H 	H 	HH HrO   c                     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z  d                              }	d	 |	D             }	|D ]\  }
}|D ]} |
|d         j         }|d
         }|	D ]t}t          t          ||                    }|                    |          }|                    |          }||k    s%J d                    |d         ||                      ud S )Nr   Wild)_simplify_patterns_and_simplify_patterns_or_simplify_patterns_xorr_   r`   ra   r@  r   c                 b    g | ],}t          d  |D                       st          |          *|-S )c              3       K   | ]	}|d z  V  
dS rV   NrN   rZ   r}   s     rP   r  zQtest_relational_simplification_patterns_numerically.<locals>.<listcomp>.<genexpr>  &      ,>,>qQU,>,>,>,>,>,>rO   anyrZ   rO  s     rP   
<listcomp>zGtest_relational_simplification_patterns_numerically.<locals>.<listcomp>  ?    MMMq,>,>A,>,>,>)>)>Mc!ffMMMMrO   rS   GOriginal: {}
and simplified: {}
do not evaluate to the same value for{})
sympy.corer  sympy.logic.boolalgr  r  r  r   r   r   rc  r  rG   rz  rM  r  r   xreplacer  )r  r  r  r  r_   r`   ra   r  patternlistsr  rL  patternlistpatternr  r  r  r  r  r  s                      rP   3test_relational_simplification_patterns_numericallyr    s   6 6 6 6 6 6 6 6 6 6S		AS		AS		Aq!9D00223..001002235L Sd5Q<<&8&8&:A>>??@@IMMIMMMI) 
A 
Ak" 		A 		AGtWQZ_-H J# A As40011 ( 1 1' : :","5"5g">">$777 :
J@@ 8777	A		A
A 
ArO   c                      t          d          } | dk    | dk     z  | dk    | dk     z  z                                  | dk    | dk     z  | dk    | dk     z  z  k    sJ d S )Nr~  r   r   )r   r   )r~  s    rP   test_issue_16803r    s{    AUq1u!a%AE!23==??	
Q1q5a!eA./0 0 0 0 0 0rO   c                      t           t          t          t          i t          t           t          z   dk    t           t          z
  dk                                              sJ t          t           t          z   dk     t           t          z
  dk                                              rJ t          t           fd           t          t           fd           t          t           fd           d S )Nr   c                      t          t          t          z   dk     t          t          z
  dk                                              S Nr   )r   rs   rt   r   r  s   rP   rW   z"test_issue_17530.<locals>.<lambda>  s/    bQAEAI66;;A>> rO   c                      t          t          t          z   dk    t          t          z
  dk                                              S r  r   rs   rt   r   r  s   rP   rW   z"test_issue_17530.<locals>.<lambda>  /    c!a%!)QUQY77<<Q?? rO   c                      t          t          t          z   dk    t          t          z
  dk                                              S r  r  r  s   rP   rW   z"test_issue_17530.<locals>.<lambda>  r  rO   )rs   r   rt   r   r   r   rD   r]   r  s   @rP   test_issue_17530r    s    	
B2Aa!eaiQ##((+++++1q519a!eai((--a00000
9>>>>???
9????@@@
9????@@@@@rO   c                  d   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    sJ t          g d          g dk    sJ t          g d          g dk    sJ t          g d	          g d
k    sJ d S )NrS   r   r   r   rS   rS   rS   r   r  r  r   r  r   )r9   rN   rO   rP   test_anf_coeffsr    s    q!f!Q''''lll##|||3333lll##|||3333lll##|||3333lll##|||3333lll##|||3333lll##|||333333rO   c                  P   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          k    sJ t          | |gg d          t          dt          | |          d          k    sJ d S )Nr  rS   Tr   Fr   r  )r   r:   r   r   r  s     rP   test_ANFformr    s    5>>DAqA3A4''''A3A5((((A3A3q$E#B#B#BBBBBAq6<<<((D#a))///0 0 0 0 0 0rO   c                      t          d          \  } }t          d| |g          t          | |          k    sJ t          ddg| |g          t          t          |          |           k    sJ d S )Nr  r   rS   r   )r   r;   r   r   r  s     rP   test_bool_mintermr    so    5>>DAqAq6""c!Qii////AA''3s1vvq>>999999rO   c                      t          d          \  } }t          d| |g          t          t          |           |          k    sJ t          ddg| |g          t          t          |          |           k    sJ d S )Nr  rV   r   rS   )r   r<   r   r   r  s     rP   test_bool_maxtermr    su    5>>DAqAq6""bQmm3333AA''2c!ffa==888888rO   c                      t          d          \  } }t          d| |g          |k    sJ t          ddg| |g          t          | |          k    sJ d S )Nr  rS   )r   r=   r   r  s     rP   test_bool_monomialr    sa    5>>DAqQF##q((((!Q!Q((C1II555555rO   c                  n    t          g dg d          dk    sJ t          g dg d          dk    sJ d S )Nr   r   rV   r   r   )r>   rN   rO   rP   test_check_pairr    sN    yyy))),,1111yyy))),,222222rO   c                      t           t          z  t          t           z  z  t           t            z  z  } t          t           z  t          t           z  z  t            t           z  z  }t          | d          }|| |fv sJ d S r   )rL   rM   rK   r,   )rw   res1results      rP   test_issue_19114r    sq    Ea1"f!qb)DEa1"f!qb)DD4(((FdD\!!!!!!rO   c                  V   t          t          t          t          t          gg d          } t          t           z  t          t          z  t          z  z  t          t           z  t           z  z  t          t           z  t           z  z  t          t           z  t           z  z  }| |k    sJ d S )N)rS   rV   r   r  r         	   r         r   )r   r_   r`   ra   r   )r  expecteds     rP   test_issue_20870r    s    aAq\#K#K#KLLFaRAEAI&!qb&A2+6aR1"!"aR1".HXrO   c                  h   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   rS   r   )r?   rs   rt   r|   r   r   rN   rO   rP   test_convert_to_varsSOPr    sx    yyy1a)44SVVQA9O9OOOOOyyy1a)44QAGGGGGGrO   c                  N   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@   rs   rt   r|   r   r   rN   rO   rP   test_convert_to_varsPOSr    sr    yyy1a)441c!ffa8H8HHHHHyyy1a)44CFFAFFFFFFrO   c                  :   t          d          \  } }}t          t                              dk    sJ t          | z  |z  |z  z  z            dk    sJ t          t          d                    dk    sJ t          t          fd           d S )Nza:erV   r  Tr   c                  (    t           z            S rr   )rB   )r_   r`   s   rP   rW   z%test_gateinputcount.<locals>.<lambda>  s    nQqS11 rO   )r   rB   r   rD   r]   )ra   r   rc   r_   r`   s      @@rP   test_gateinputcountr     s    ENNMAq!Q#a))$$))))!a!eai1q51122a7777#a,,''1,,,,
91111122222rO   c                     t          t          dk     t          dk                rJ t          t          dk     t          dk               sJ t          t          dk     dt          k              t          j        u sJ t          t          dk     t          dk               t          dk     k    sJ t          t          dk    t          dk               rJ t          t          dk    t          dk              sJ t          t          dk    dt          k              t          j        u sJ t          t          dk    t          dk              t          dk    k    sJ t          t          dk    t          dk               rJ t          t          dk    t          dk              sJ t          t          dk    dt          k               t          j        u sJ t          t          dk    t          dk              t          dk    k    sJ t          t          dk    t          dk               rJ t          t          dk    t          dk              sJ t          t          dk    dt          k              t          j        u sJ t          t          dk    t          dk              t          dk    k    sJ t          t          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    sJ t          t          t          dk    t          dk              t          dk              t          dk    k    sJ t          t          t          dk    t          dk              t          dk    t          dk    z            t          j        u sJ t          t          j	        t                    t          j	        t                              t          j        u sJ t          t          j	        t                    t          j
        t                              t          j        u sJ t          t          j	        t                    t          j        t                              t          j	        t                    k    sJ d S r  )r   rs   r	   r/   rt   r   r   r   r   r  r  r0   r  rN   rO   rP   test_refiner    s   a!eq1uX&&&&&!a%!a%!!!!!!a%!a%!!QV++++!a%!a%!!a!e,,,,a1fQi(((((!q&AF$$$$$!q&AF$$....!q&AF$$a0000a!eq1uX&&&&&!a%1q5"""""!a%1q5""af,,,,!a%1q5""q1u----a1fQi(((((!q&AF$$$$$!q&AF$$....!q&AF$$a0000bAhh"Q((,,,,,"Q((bAhh((((("Q((bAhh((AF2222"Q((bAhh((Bq!HH4444bAhh"Q((,,,,,"Q((R1XX''161111"Q((bAhh((((("Q((bAhh((R1XX6666 #a!eQU##a!e--!a%8888#a!eQU##a!eA%67716AAAA !*Q--A//169999!*Q--A//17::::!*Q--++qz!}}<<<<<<rO   c                  n   ddl m}  ddlm}  | d          } | d          } | d          }|||g}t           |            gg}t          t          t          t          t          dd                    dz  d                              }d	 |D             }|D ]\  }}	|	D ]}
 ||
d         j	         }|
d
         }|D ]t}t          t          ||                    }|                    |          }|                    |          }||k    s%J d                    |
d         ||                      ud S )Nr   r  )_simplify_patterns_and3r_   r`   ra   r@  r   c                 b    g | ],}t          d  |D                       st          |          *|-S )c              3       K   | ]	}|d z  V  
dS r  rN   r  s     rP   r  z[test_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>.<genexpr>7  r  rO   r  r  s     rP   r  zQtest_relational_threeterm_simplification_patterns_numerically.<locals>.<listcomp>7  r  rO   rS   r  )r  r  r  r  r   rc  r  rG   rz  rM  r  r   r  r  )r  r  r_   r`   ra   r  r  r  rL  r  r  r  r  r  r  r  r  s                    rP   =test_relational_threeterm_simplification_patterns_numericallyr  -  s   ;;;;;;S		AS		AS		Aq!9D113345LSd5Q<<&8&8&:A>>??@@IMMIMMMI) 
A 
Ak" 		A 		AGtWQZ_-H J# A As40011 ( 1 1' : :","5"5g">">$777 :
J@@ 8777	A		A
A 
ArO   c                  L   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 rr   )	r   r   r_   ra   r   r`   rn   r  rM  r  s    rP   test_issue_25451r  E  sk    
3q!99bAhhAaqv;;3q!99bAhh///////rO   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   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   rB   sympy.assumptions.cnfrC   sympy.testing.pytestrD   rE   rF   	itertoolsrG   rH   rI   rK   rL   rM   ro   r_   r`   ra   r   rc   r}   rs   rt   r|   rQ   rh   rk   rp   rx   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'  r0  r3  r5  r>  rF  rI  rP  rR  rU  rX  rZ  r^  r`  rd  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  rN   rO   rP   <module>r#     s   # # # # # # + + + + + + ! ! ! ! ! ! 2 2 2 2 2 2 2 2 2 2 " " " " " " . . . . . . . . % % % % % % = = = = = = = = + + + + + + + + ( ( ( ( ( ( , , , , , ,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 & % % % % % 4 4 4 4 4 4 4 4 4 4 9 9 9 9 9 9 9 9 9 9WU^^
1a#GI.. 1aAq!Q	 	 	J J J0) ) ),9 9 924 4 4
3 3 3
9 9 9
2 2 2
  ( ( (( ( (' ' '$  > > >(0 0 0? ? ?r( r( r(j@ @ @2	 	 	" " "$
4 
4 
4  & & &* * *  2 2 2' ' '' ' 'S S S. . ..; ; ;8" " " 
6 
6 
68 8 8> > >" " ", , ,+ + +	L 	L 	L) ) )) ) )+4 +4 +4\% % %  &CA CA CALB B B$ B B B  $ $ $
! ! !
3 3 3, , ,
8 8 8
/ / /L L L  && & &# # #
1 1 1. . ."H H H     :( ( (@9 @9 @9D3 3 39 9 9
 H H H<A A A60 0 0A A A4 4 40 0 0: : :9 9 96 6 63 3 3
" " "  H H H
G G G
3 3 3"= "= "=JA A A00 0 0 0 0rO   