
    sg              	          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 Zyf)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 y)z)Test that |, & are overloaded as expectedN)ABr   r   Cr   r   r        Q/var/www/html/venv/lib/python3.12/site-packages/sympy/logic/tests/test_boolalg.pytest_overloadingrQ   !   s     q5C1Iq5Bq!HEQ;"SAY****6WQ]"""6WQ]"""2Q<<q5C1I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kD  } t        | | j                        | j                  k(  sJ t        t        kD  t        t        k  t        t        k\  t        t        k  f\  }}}}t        ||||      t        ||      k(  sJ t        ||||f      D ch c]
  }t        |  c}t        ||      hk(  sJ t        t        t        t        d      t        t        d            t        t        t        d      t        t        d                  t        u sJ y c c}w )NTF   c                  "    t        dt              S N   )r   rK   rN   rO   rP   <lambda>ztest_And.<locals>.<lambda>;   s    c!Qi rO   r   )r   r/   rK   r0   rD   	TypeError	canonicalrL   rH   r   abr   c)eglgeleis         rP   test_Andrc   -   s   5D==q6Q;;t9u:tT?d"""tUu$$$ue%%%tQ<1ua=E!!!tT4 D(((tT1"""tUA%'''q!9>>
9'(q1ua1f&&&	AAq!++!++---q5!a%aa/LAq"bq!RB
***)1Qr"+67CG7CAJ<GGGs2a8R1X&Bq!HbAh(?@EIII 8s   %I(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        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kD  } t        | | j                        | k(  sJ t        t        kD  t        t        k  t        t        k\  t        t        k  f\  }}}}t        ||||      t        ||      k(  sJ y )NTFrS   c                  "    t        dt              S rU   )r   rK   rN   rO   rP   rW   ztest_Or.<locals>.<lambda>S   s    bAh rO   )r   r0   rK   r/   rD   rX   rY   rL   )r]   r^   r_   r`   ra   s        rP   test_Orrf   E   s   45==a5A::d8te9dD>T!!!dE?d"""eUu$$$dA;$eQ<1dE5!T)))dE1%%%eUA!###a8t
9&'a!eQ!V$$$	AAa"""q5!a%aa/LAq"baBr!Ry(((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J  J t        dkD  } t        | | j                        t        dd      cxk(  rt        dd      k(  sJ  J y NTFrS   r   )	r   r0   rK   r/   rL   
isinstancerM   DrY   )r]   s    rP   test_Xorrk   [   s.   5E>>q6Q;;q!9tQ?d"""q!Q1"""tUE1a(SAYJ666t9u:tT?e###tUt###ue%%%tQ<A2ua=AtUE"d***tUA1"$$$ueQ1$$$c!Qi%%%q!SAY3q!Q?222q!SAY3q!9,,,q1ua1fa C1aL@C1aL@@@@@	AAq!++#a)8s1ay88888rO   c                      t         t        z  } | j                  t              t         t        z  t          t         z  z  k(  sJ y N)xyrewriter   exprs    rP   test_rewrite_as_Andrs   t   s3    q5D<<QA27 3333rO   c                      t         t        z  } | j                  t              t         t         z  t        t          z  z  k(  sJ y rm   )rn   ro   rp   r   rq   s    rP   test_rewrite_as_Orru   y   s3    q5D<<QB1r62222rO   c                      t         t        z  t        t         z  z  } | j                  t              t         t        z   t        t         z   z   k(  sJ y rm   )ro   zwrp   r   rq   s    rP   test_rewrite_as_Nandry   ~   sC    Ea1"fD<<QU8QBi#7!8888rO   c                      t         t        t         z  z  } | j                  t              t          t        t         z   z   k(  sJ y rm   )rw   ro   rx   rp   r   rq   s    rP   test_rewrite_as_Norr{      s9    QB<D<<1"aRy. 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 y )Nc                      t        dd      S NTF)r   rN   rO   rP   rW   ztest_Not.<locals>.<lambda>   s    c$. rO   TFr   rS   rV   )rD   rX   r   r0   r/   rN   rO   rP   test_Notr      sa    
9./t9u:q6T>>q6U??q6U??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 y r~   )r   r0   rK   r/   rN   rO   rP   	test_Nandr      s    6U??7qb==:;$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 y r~   )r   r/   rK   r0   rN   rO   rP   test_Norr      s    5D==q6aR<<t9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 y r~   )r    r/   rK   r0   rN   rO   rP   	test_Xnorr      s>   6T>>7qb==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
        kD  z	  t        u sJ t
        t
        z	  t        u sJ y )Nc                  4    t        t        t        t              S rm   )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4$&&&45(((5$4'''5% D(((1a=D   1a=D   1a=E!!!6Q!VEqAv16***Equuqy!T)))6T>>rO   c                     t        t        t              t        t        t              cxk(  rt        t        t        t              k(  sJ  J t               t        u sJ t        t        t              t        t              cxk(  r	t        u sJ  J t        dd      t        dd      cxk(  r	t        u sJ  J t        dd      t        dd      cxk(  r	t        u sJ  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              k7  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        kD        t        dd      cxk(  rt        dd      k(  sJ  J t        t        t        t              t        t        t                    t        u sJ y rh   )
r   rK   rL   r/   r0   r   rM   r	   r   r   rN   rO   rP   test_Equivalentr      s*   az!Q/F:aA3FFFFFF<4az!}444444dD!Zu%=EEEEEEdE"j&=FFFFFFa!###a3q6)))aD!QU***aE"qbA2g---aq   as1v%%%aAq)*jAq9I1.MMMMa!eQ!V$---a!eQ!VQ'5000a!eQ!VQ'5000a!eQUUQY':a+;Oz!Q?OOOOOOhq!nhq!n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 y )NFT)rA   r/   r0   rN   rO   rP   test_Exclusiver      s^    UE5)T111T5%(D000T4'5000T4&%///rO   c                     t        t        t        t                    j	                  t        t        t              t        t                          du sJ t        t        t              j	                  t        t        z	  t        t        z	  z        du sJ t        t         z  t         t        z  z  j	                  t         t         z  t        t        z  z        du sJ t        t        z	  j	                  t         t         z	        du sJ t        t        t        z	  z	  j	                  t        t        t        z	  z	        du sJ t        t        d        y )NTFc                  P    t         t        z  j                  t         t        kD        S rm   )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!Qx=CFCF 34<<<a""AFqAv#674???!VQ''!qbQU(;<DDDF??A2!8$---!q&M!!!Q-0E999
 =>rO   c                     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        kD  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                    j+                         t        t1        t        d      t1        t        d            k(  sJ t        t3        t        dz
  d      t3        t        t                    j+                         t        t3        t        d      t3        t        t                    k(  sJ t        t1        t        dz
  d      t3        t        t                    j+                         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            j+                         t        t1        t        d      t1        t        d#      t1        t        d            k(  sJ t        t1        t        dz
  d      t1        t        dz   d            j+                         t1        t        d      k(  sJ t        t3        t        dz
  d      t3        t        dz   d            j+                         t3        t        d      k(  sJ t        t1        t        dz
  d      t1        t        dz   d            j+                         d!k(  sJ t        t3        t        dz
  d      t3        t        dz   d            j+                         t        t3        t        d      t3        t        d            k(  sJ t+        t5        t        t                     d"k(  sJ y$)%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                  D    t        t        t        t        t        g       S rm   )r   rx   rn   ro   rw   mintermss   rP   rW   z-test_simplification_boolalg.<locals>.<lambda>$      w1a|X> rO   c                  D    t        t        t        t        t        g       S rm   r   rx   rn   ro   rw   r   s   rP   rW   z-test_simplification_boolalg.<locals>.<lambda>%  r   rO   c                  D    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                  @    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 rO   za b c d e f g h j)dontcarec                  .    t        t        gdggdgg      S NrS   )r   rn   rN   rO   rP   rW   z-test_simplification_boolalg.<locals>.<lambda>M      wsaSEQC59 rO   c                  .    t        t        gdggdgg      S r   )r   rn   rN   rO   rP   rW   z-test_simplification_boolalg.<locals>.<lambda>R  r   rO   FTN)r   rn   ro   rw   r   r   r   r   r/   r
   rx   rD   r   rX   rK   rL   rM   r)   r   r   r   r   r   r0   r   r   r   )set1set2	dontcaresansr[   r]   rZ   r\   dfr^   hjrr   r   s                 @rP   test_simplification_boolalgr      s
    y)Y7Dy)Y7DAq!9d#r#c!fa.#c!fa.'IIIIw1ay$'(Bs3q63q6"C1I./0 0 0Aq!9dTk*d222Aq!9dTk*d222EGUWeg.t<DDDlL,H|\:IAq!h	2
3q!9c#a&#a&)*	+,	+Aq!Q<95RA]A9NNNN HIAq!h	2
3q!9c#a&#a&)*	+,	+Aq!Q<95RA]A9NNNN<LHL!$IAq!h	2
3q!9c#a&#a&)*	+,	+Aq!Q<95RA]A9NNNNAq!Q< HL!$IAq!h	2
3q!9c#a&#a&)*	+,	+Aq!Q<95RA]A9NNNN Aq!a HI{H
:>?
:>?
9@A aAq
C!q1u+&#---1q5QU+,333'!Q-(Bs1vqM999*Q*+
3q!9c#a&#a&)*+ + +#hq!na01S!Q5KKKK#hq!na01S!Q5KKKK#hq!na01S!Q5KKKK"S!Q3S!Q5KLMx1~r!Qx() ) )
qbA21"r'A+&AAq	A!QB!+++
:I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 1a&Aq6(
#CAq6QF8$+++Aq6QF8$+++
:9:A3!u%---A3!u%---A3B5(((
:9:A3!u%---A3!u%---A3B5((( QUq1u%&#aAq*::::C3q6N#u,,,Bq#a&M"d***C1a"Q(+,Bq!HbAh0GGGGr!a%|R1X&//1SAq2a85LLLLr!a%|R1X&//1SAq2a85LLLLr!a%|R1X&//1SAq2a85LLLLr!a%|R1q5\2a!eQ<8AA 
Aq2a9bAh/0 0 0r!a%|RAq\*335AqAAAr!a%|RAq\*335AqAAAr!a%|RAq\*335>>>r!a%|RAq\*33 
Aq2a8$% % %CA2J4'''rO   c            
         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k7  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 y
)z,
    Test working of bool_map function.
    r   r   r   r   r   r   Fr   r   N)r.   r   rZ   r   rx   rn   ro   rw   r   r   r   r[   r\   r   )r   	function1	function2s      rP   test_bool_mapr   i  s   
 lL,HCAK#Aq6{222GQ1aL(3Q1aL(35	RA]Bs1vqM1	-1aAq!Q/GHI I I GQ1I	{3Q1I	{358=> > >Aq	Iy#9:IAq	Iy#9:IIy)	Q1aL!" " "C1IAq	z*e333C1Ir!Qx(000C1Is1a|,444C1aL3q!Q<-0E999C1aOc!Q1o%5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 y)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                  6   t        dt              du sJ t        t        t              du sJ ddk(  sJ dt        k7  sJ dt        k(  du sJ ddk(  sJ dt        k7  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              k7  sJ t        t
        t              sJ y rh   )ri   r   r/   r0   
is_BooleanrK   rL   rN   rO   rP   test_is_booleanr     s   dG$---dG$,,,9999I%::::J5   ??d"""EEB???E<<:a1111a!!!rO   c                  \   t         t        z  j                  t         d      t        k(  sJ t         t        z  j                  t         d      t        u sJ t         t        z  j                  t        d      t         k(  sJ t         t        z  j                  t        d      t        u sJ t         t        z  j                  t         dt        di      t        u sJ t         t        z  j                  t         d      t        u sJ t         t        z  j                  t         d      t        k(  sJ t         t        z  j                  t        d      t        u sJ t         t        z  j                  t        d      t         k(  sJ t         t        z  j                  t         dt        di      t        u sJ y r~   )rK   rL   subsr0   r/   rN   rO   rP   	test_subsr     s2   E<<4 A%%%E<<5!U***E<<4 A%%%E<<5!U***E<<D!T*+t333E<<4 D(((E<<5!Q&&&E<<4 D(((E<<5!Q&&&E<<D!T*+t333rO   c                  p    t        t        t        d            \  } }| |z  || z  k(  sJ | |z  || z  k(  sJ y)z$Test for commutativity of And and OrzA,BN)mapr   r   )rK   rL   s     rP   test_commutativer     s>    w'DAqq5AE>>q5AE>>rO   c                  Z    t         t        z  t        z  t         t        t        z  z  k(  sJ y)zTest for associativity of AndNrK   rL   rM   rN   rO   rP   test_and_associativityr     s"     EQ;!q1u+%%%rO   c                  Z    t         t        z  t        z  t         t        t        z  z  k(  sJ y rm   r   rN   rO   rP   test_or_assicativityr     s     UaKQ!a%[)))rO   c                  *    t               } |   | k(  sJ y rm   )r   )rZ   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 y )NFevaluate)	r%   r   rK   rL   rM   r   r   r   rj   rN   rO   rP   test_eliminate_implicationsr     s    !'!Q"?@aR1HLLL!	a3q6k!"SVSV"4c!f=> > >!*Q1a"89
aQBFrAv&1"q&12 2 2rO   c                  B   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 y 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                  F   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 y r~   )r"   rK   rL   rM   rN   rO   rP   test_disjunctsr     s    QUQYAq!9,,,a!eq[!q1uk]222Q<A3T?tf$$$Uw&&&rO   c            	      8   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 y rm   )	r$   r   r   rK   rL   rM   r#   r8   r   rN   rO   rP   test_distributer     s    !"SAY"23s2a8R1X7NNNN!#aAq"23r#a)SAY7OOOO"3q#a)#45SAYAq	9R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 y )Nx,y,zTFremove_true)deep)r   r6   r   r   r   r   r   r   r    r   r   )rn   ro   rw   s      rP   test_to_anfr     s   gGAq!#a)Aq	)))"Q(s1aQ3333"WQ]C1Iq124QE23 3 3"T!QZQDAJ1FG4OOO"QAAa#a)T!QZ@Ac!QiQ15AB B B#a)Aq	)))#a&>SDe<<<<$q!*T3q!9%!HHHH#a)Aq$Aq	u MMMM'!Q- C4Q$NNNN*Q"#s1a5'IIII$q1ua1f%E2c"Q(GAqM2FG G G#a!eQU#%0bQC1I.EBC C C !A
m#$---rO   c            	      p	   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      j                         t        k(  sJ t        t        dd      j                         t         k(  sJ t        t        d        y )NFrS   r   c                  P    t        t        dk  dgt              j                         S r   )r   rK   rL   r*   rN   rO   rP   rW   ztest_to_nnf.<locals>.<lambda>  s    c!a%!a0779 rO   )r*   r/   r0   rK   rL   r   rM   r   r   r   r   rD   rX   rN   rO   rP   test_to_nnfr     sk   $<4%=E!!!!9>>!qb&1*%%%!qb&1*&&&!q&>aR!V###*Q1%&A26qb1f*=!a*HHHH!a%!)	
QrQBw{#qA2v{3rAv{CD D D#aA,QBFq1u#5555#a!eai.!aR1"Wr\111#a!eai.!aR1"Wr\111#a1f+!qb&(((#jAq)*+s2aA;A2rA2/OOOO#a!eai.!
a!QB
#q1urz2qbA2glCD D D#c!Ql#$!qbQ!V(<<<<16a1f%&1r6qb1f*====16a1f%u-
qb1qa1"f!a012 2 2q!Q< A%%%q!Q< QB&&& 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 y NTrS   )r+   rL   rM   r   r   rK   r   r   rN   rO   rP   test_to_cnfr     s   AE(s3q63q622221q5A+#bAh1a"9999!q&>qbAX%%%!A,QBFrAv#6666!q1u+a!e,d3q1u<<<!a%=C1I%%%*Q"#s2aQ="QA-'HHHH*QA&'
aQBFrQBw{+, , ,*QA&-Bs1vqM2c!fa="Q3q6*:;< < <!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 ]8  \  }} || ||||||||	      t        t        fd        |dd      k(  r8J  y )Nzx1:16c                      t         d      S NTr   r+   eqs   rP   rW   z"test_issue_18904.<locals>.<lambda>3  s    vb4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  -  s1   GNwGW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9S"I/0 61r2r2r2r2r2z<=d$/25556rO   c                  f    t        t        t        dkD  t        dkD  t        dk  z  z              sJ y )NrV      )r'   r+   r[   rZ   rN   rO   rP   test_issue_9949r	  :  s+    &!b&QUq1u$556777rO   c                  D   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 y rm   )rC   
CNF_to_cnfto_CNFrL   rM   r+   rK   rN   rO   rP   test_to_CNFr  >  sQ   >>#**q1uX./6AE(3CCCC>>#**a!eq[12fa!eq[6IIII>>#**Q!V,-Q???>>#**Q1q5\23vaAEl7KKKK>>#**Q!a%[A2Q<%?@AVAQRUVQVK[\Z\`ade`eZfLfEgggg>>#**QU+,q1u===rO   c                  R   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 y r   )r,   rL   rM   r   r   rK   r   r   rN   rO   rP   test_to_dnfr  G  se   AE(s3q63q62222!q1u+"SAYAq	"::::!q&>qbAX%%%!A,QB1q5>111!a%=AE!!!*Q"D)
3q!9c#a&#a&)*+ + +*QA&-
3q!Q<SVSV,c#a&#a&.ABC C C!a%=AE!!!rO   c                     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 y )Nr   c                 P    	 t        fd| D              S # t        $ r | cY S w xY w)Nc              3   .   K   | ]  } |        y wrm   rN   ).0rn   sorted_recursives     rP   	<genexpr>z=test_to_int_repr.<locals>.sorted_recursive.<locals>.<genexpr>Z  s     ;!*1-;s   )sortedrX   )argr  s    rP   r  z*test_to_int_repr.<locals>.sorted_recursiveX  s-    	;s;;; 	J	s    %%rS   rV   r   r   )r   r   r   r-   )rn   ro   rw   r  s      @rP   test_to_int_reprr  U  s    '77+,GAq! KQAAq	BC1a&1a&)*+ + +KQQB!QC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 y )Nx,yTF)r   r7   r/   r0   r   r   r   r   rn   ro   s     rP   test_is_anfr  d  s    5>DAq$<4%=D   !9#a)$$$#aC1I&'4///#aBq!H%&%///#c!fa.!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 y r~   )r&   r/   rK   rL   r   r   rN   rO   rP   test_is_nnfr  o  s   $<4!91":!a%=D   1q5aR!V$Q/A27;UCtKKK1q5aR1"W%&$...#bAh- E)))!a%=E!!!1q5aR!V$Q/A27;TBeKKKrO   c                  v   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 y r~   )r'   rn   ro   rw   rN   rO   rP   test_is_cnfr   {      !9!a%!)$$$!a%!)$$$1q5A+$&&&1q5A+%'''AE(Q,5(((rO   c                  v   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 y r~   )r(   rn   ro   rw   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              j!                  t        d      t        k(  sJ t        t        t        d      t        t              j!                  t        d      t        k(  sJ t        t"        d        y )NzA:CTFrS   r   c                  ,    t        dt        t              S rU   )r   rn   ro   rN   rO   rP   rW   ztest_ITE.<locals>.<lambda>  s    c!Ql rO   c                  $    t        dg t              S r   r   ro   rN   rO   rP   rW   ztest_ITE.<locals>.<lambda>      c!Rm 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m rO   r   c                  D    t        t        dkD  t        t        t              S r   )r   rn   ro   rw   rN   rO   rP   rW   ztest_ITE.<locals>.<lambda>  s    s1q5!Q2 rO   )r   r   r0   r/   ri   r   r   rn   r   ro   rD   rX   r	   r   r   rw   r   r   r   s      rP   test_ITEr,    s   enGAq!tUD!U***tT5!T)))udE"e+++ueT"d***c!QlC(((Aq!Q<1Aq!Q<1As1ay!Q1$$$r!U|SD\51U:::q!Q<3q6!!!q!Q<1q!Q<1q!Q<1
9*+
9+,
9+,
9+,q!Q<166!!!c!QE2C888r!T{Aq!SAq\111r!U|Q"c1"am333r!T{Aq!S!Q]222r!U|Q"c!Ql222r!''1~q!$Aq!444r!''1~q!$QB1555r!&&!}a#sA2q!}444r!''1~q!$Aq!444 r!QxA!###r!QxA!###r!QxA!###r!QxA!###r!QxA##Aq)Q...r!QxA##Aq)Q...
:23rO   c                     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 y )NTFr   )
r2   rK   r   rL   r   zeror   r   rn   ro   rN   rO   rP   test_is_literalr/    s   dt###e$$$a=D   qb>T!!!bAh5(((affQi D(((c!&&)n%---bAh5(((c!&&)QVVAY/0E999a!e!a%!)$$$$rO   c                  
   dt         z  t         dz  cxk(  r
t         k(  sJ  J dt         z  t         dz  cxk(  rdk(  sJ  J t         t        z  t        t         t              k(  sJ dt         z  t         dz  cxk(  rdk(  sJ  J dt         z  t         dz  cxk(  r
t         k(  sJ  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J  J dt         z	  t         dz  cxk(  rdk(  sJ  J t         dz	  dt         z  cxk(  rdk(  sJ  J t         dz	  dt         z  cxk(  rt          k(  sJ  J t         t        z	  t        t         z  cxk(  rt        t         t              k(  sJ  J dt         z  t         dz  cxk(  rt          k(  sJ  J dt         z  t         dz  cxk(  r
t         k(  sJ  J t         t        z  t        t         t              k(  sJ y r~   )rK   rL   r   r   r   r   r   rN   rO   rP   test_operatorsr1    s   !8q4x$1$$$$$19E	*U*****q5C1I!8q4x'4'''''19E	&Q&&&&&q5Bq!H2Q<<19T	&Q&&&&&A:e+t+++++9	)T))))):!)r)))))6Q!V,wq!},,,,,!8q4x%A2%%%%%19E	&Q&&&&&q5C1I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J  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 s4| |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 rJ  t'        d t        j                   t        j                  fD              sJ y )NTFrS   c              3   D   K   | ]  }|j                  d d      |u   yw)rS   rV   Nr   r  rb   s     rP   r  z"test_true_false.<locals>.<genexpr>_  s      @qzz!Q1$@s    )r/   r	   r0   hashlenri   r1   boolr   rI   r   rn   r   r   r   r   r   r   r   all)TFs     rP   test_true_falser;    s   166>>AGGtK494<<E>>:d###;$u+%%%d|UEN 38q88888dK(((e[)))
 $%%%%&&&
 t9t9u:u:5E>>6T>>tuen5 ]%11ayE!!!1ayE!!!1ayE!!!1ayD   1ayA~~1ayE!!!T	a5jq5E>!>q5E>!>E>q5E>!>D=q5D= =!Qx4!Qx4!Qx5   !Qx4!Qx4!Qx1}}T	a5jq5D= =q5D= =E>q5E>!>D=q5D= =1ayD   1ayD   1ayE!!!1ayE!!!1ayQB1ayA~~T	a5jq5D= =q5D= =E>q5E>!>D=q5E>!>AqzT!!!AqzT!!!AqzT!!!AqzU"""AqzaRAqzT!!!1ayE!!!1ayE!!!1ayD   1ayE!!!1ayE!!!1ayQBq!}%%%q!}$$$q!}$$$q!}$$$q!}!!!q!}$$$q!}$$$q!}"""T	a5j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$$${]%~ @qvvqww.?@@@@rO   c                     t        t        dk  dt        dk\        j                         t        dt              k(  sJ t        t        dk  t        dk\        j                         t        dd      k(  sJ t        t        dk\  t        dk        j                         t        t         d      t        dt              z   k(  sJ t        t        dkD        j                         t        t         d      k(  sJ t        t        t        dkD  t        dk              j                         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        j                         t        j                  k(  sJ t        t        t        dk  t        dkD        t        dk        j                         t        j                  t         d      k(  sJ t        t        dk  t!        t              dk        j                         t        dk  j                         k(  sJ t#        t$        d        t'        dt)        dt        z        dz  t!        dt        z        dz  z        j                         t        j                  u sJ y )	Nr   FrS   rV   r   c                  B    t        t              dk  j                         S r   )r   rn   as_setrN   rO   rP   rW   z"test_bool_as_set.<locals>.<lambda>o  s    Q!(;(;(= rO   r   )r   ro   r?  r   r   r   rn   r   r   r   r/   r	   UniversalSetr0   EmptySetopenr   rD   r   r   r   rN   rO   rP   test_bool_as_setrC  b  s   qAvua1f%,,.(1b/AAAqAvqBw&&(HRO;;;a1fa2g%%'8RC+<x2+NNNNq1u:(B3"2222s1q5!a% !((*hsAB01 1 1;;=ANN***<<>QZZ'''88:'''r!a%QQ'..0HMM2#q4IIIIq1uc!fqj!((*q1unn.>>>>
 =>b#ac(A+c!A#hk)*113qzzAAArO   c            	         t        d      \  } }t        | dk\  |dk\        j                         t        dt              t        dt              z  k(  sJ t        | dk\  |dk\        j                         t        j                  t        j                  z  t        t         ddd      t        t         ddd      z  z
  k(  sJ y )Nr  r   T)r   r   r?  r   r   r   r	   Realsr  s     rP   test_multivariate_bool_as_setrF  t  s    5>DAqqAvqAv%%'8Ar?8Ar?+JJJJa1fa1f$$&!''!''/"at$Xrc1dD%AA+B B B BrO   c                     t        dd      } | t         k\  | t        k  f}t        | }|j                  t        u rCt	        |j
                        t	        |      |j                  t        j                        z
  k(  s	J |dk(  sJ t        | }|j                  t        u rt	        |j
                        dk(  sJ y |dk(  sJ y )Nrn   T)extended_realrV   )
r   r   r   funcr6  argscountr	   r/   r   )rn   rJ  vs      rP   test_all_or_nothingrM  }  s    4(A8Q"WDT
Avv}166{c$i$**QVV*<<<<<Dyy
D	Avv|166{aDyyrO   c                  h    t         j                  t         k(  sJ t        j                  t        k(  sJ y rm   )r/   rY   r0   rN   rO   rP   test_canonical_atomsrO    s&    >>T!!!??e###rO   c                  h    t         j                  t        k(  sJ t        j                  t         k(  sJ y rm   )r/   negatedr0   rN   rO   rP   test_negated_atomsrR    s&    <<5   ==D   rO   c                     t        t        dkD  t        t        k        j                         t	        dt        d      k(  sJ t        t        dk\  t        t        k        j                         t	        dt              k(  sJ t        t        k  j                         t	        t         t              k(  sJ t        t         kD  j                         t	        t         t              k(  sJ y )NrV   T)	left_openrS   )r   rn   r   r?  r   rN   rO   rP   test_issue_8777rU    s    q1ua"f$$&(1bD*IIIIqAvq2v%%'8Ar?:::F??"b 1111G2#r!2222rO   c                      t        t        t         t        k  t        dk        t        dt        k  t        t        k              j	                         t        t         d      t        dt              z   k(  sJ y )Nr=  rV   )r   r   r   rn   r?  r   rN   rO   rP   test_issue_8975rW    s[    c2#'17#SaR%89@@B"bHQO+, , ,rO   c                  H    t        g d      dk(  sJ t        d      dk(  sJ y )N)rS   r   rS   r   r   rS   r   R   0010101000111001i9*  )r3   rN   rO   rP   test_term_to_integerr[    s*    01R777-.%777rO   c                  
   t        d      \  } }}}| |z  |z  | |z  z  }|j                  | |z  |      ||z  |z  k(  sJ |j                  | |z  |z  |      | |z  |z  k(  sJ | |z  |z  | |z  z  }|j                  | |z  |      ||z  |z  k(  sJ |j                  | |z  |z  |      | |z  |z  k(  sJ | |z  |z  | |z  z  }|j                  | |z  |      ||z  |z  k(  sJ |j                  | |z  |z  |      | |z  |z  k(  sJ y )Nza b c d)r   r   )rZ   r[   r\   r   r   s        rP   test_issue_21971r]    s@   #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                     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 y )	NF)input)FFFT)FTTT)TTFTr   rS   T)listr4   r   rn   ro   rN   rO   rP   test_truth_tablera    s    C1I1vU;<#$ $ $AEAq678!" " "AFQF%89!" " "C1I1v./a&%Aq65/QFE?aVTNKL L LrO   c                  \   t         j                  t         j                  fD ]  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  	 y )Nc                  
     S rm   rN   r  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  	    1" rO   c                  
      S rm   rN   rd  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  re  rO   c                      t               S rm   )absrd  s   rP   rW   z!test_issue_8571.<locals>.<lambda>      #a& rO   c                      t               S rm   )intrd  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  ri  rO   rV   c                       z   S rm   rN   or  s   rP   rW   z!test_issue_8571.<locals>.<lambda>      !a% rO   c                       z
  S rm   rN   rm  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  ro  rO   c                       z  S rm   rN   rm  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  ro  rO   c                       z  S rm   rN   rm  s   rP   rW   z!test_issue_8571.<locals>.<lambda>      !A# rO   c                       z  S rm   rN   rm  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  rs  rO   c                       z  S rm   rN   rm  s   rP   rW   z!test_issue_8571.<locals>.<lambda>  s    !Q$ rO   )	r	   r/   r0   rD   rX   Zeror   rn   range)_rn  r  s    @@rP   test_issue_8571ry    s    ffagg y*%y*%y.)y.)&&!%%# 	A1X y-0y-0y-0y+.y+.y,/!1	rO   c                  2   t        dd      } t        dd      \  }}| ||  |z  dz   z  z   ||  |z  dz   z  z  dk  }|t        j                  usJ |j                         t        j                  u sJ |dkD  j                         t        j                  u sJ y )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AGG88:   E>>qvv%%%rO   c                      t         j                  j                  dk(  sJ t         j                  j                  dk(  sJ y )NT)r	   r/   is_Atomr0   rN   rO   rP   test_issue_12717r    s.    66>>T!!!77??d"""rO   c                  p   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        y )NnzT)nonzeroc              3   R   K   | ]  }t        |      t        j                  u  ! y wrm   )r5   r	   r/   r4  s     rP   r  z"test_as_Boolean.<locals>.<genexpr>  s     F1z!}&F   %'rS   rw   )r.  c              3   R   K   | ]  }t        |      t        j                  u  ! y wrm   )r5   r	   r0   r4  s     rP   r  z"test_as_Boolean.<locals>.<genexpr>  s     HAz!}'Hr  Fr   c              3   8   K   | ]  }t        |      |k(    y wrm   r5   r4  s     rP   r  z"test_as_Boolean.<locals>.<genexpr>  s     6az!}!6s   rV   c                      t               S rm   r  )rb   s   rP   rW   z!test_as_Boolean.<locals>.<lambda>  s    *Q- rO   )r   r8  r	   r/   r0   rn   rD   rX   )r  rw   rb   s     @rP   test_as_Booleanr    s    	t	$BFqvvq"0EFFFF$AH%!Q1GHHHH6Aq1u:66661q1ub! 1y/01rO   c                     t        t        dk  t        t              j                  t        t        hk(  sJ t
        t        fD ]h  }  | t        d      j                  t               k(  sJ  | t        d      j                  t        hk(  sJ  | t        d      j                  t        hk(  rhJ  t        j                  j                  t               k(  sJ t        j                  j                  t               k(  sJ t        j                  t        hk(  sJ t        t        t        t        d      t        t        d            j                  t        t        hk(  sJ t        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 y )NrS   TF)r   rn   ro   rw   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"X 1Aw%%...Dz((QC///E{))aS0001 66  CE)))77!!SU***s"""q"Q,1a)88QFBBB771:$$---441:$$---99Q<&&1#---444=''A3...771:$$---rO   c                      t        t        t              j                  t              t	        dt        t        d      fd      k(  sJ y )Nr   F)rS   T)r   rn   ro   diffr   r   rN   rO   rP   test_BooleanFunction_diffr    s1    q!9>>!	1bEl*;Y GGGGrO   c                  8   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 y )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   rx   rn   ro   rw   )rK   rL   rM   rj   Er:  GHr  soldnfsolcnfr   r   s                rP   test_issue_14700r    s   $%6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---lL,l,H|\<HIAq!Q<*qA2v!a%1"*.EEEEAq!Q<95	
aRAEQBJ     rO   c                  `    t        t        t        j                        } t	        |       | k(  sJ y rm   )r   rn   r	   Integersr)   )conds    rP   test_issue_25115r    s%    Aqzz"D$4'''rO   c                     t        dd      \  } }}}t        dd      \  }}t        ||k\  ||k        j                         t        j                  k(  sJ t        ||k\  ||kD        j                         t        j                  k(  sJ t        ||k\  | | kD        j                         t        j                  k(  sJ t        ||k\  | | k        j                         t        j                  k(  sJ t        | | k  ||k        j                         t        j                  k(  sJ t        | | k  | | kD        j                         t        j                  k(  sJ t        | | k  ||kD        j                         t        j                  k(  sJ t        | | k  | | k        j                         t        j                  k(  sJ t        ||k  ||k        j                         t        j                  k(  sJ t        ||k  ||kD        j                         t        j                  k(  sJ t        ||k  | | kD        j                         t        j                  k(  sJ t        ||k  | | k        j                         t        j                  k(  sJ t        | | k\  ||k        j                         t        j                  k(  sJ t        | | k\  ||kD        j                         t        j                  k(  sJ t        | | k\  | | kD        j                         t        j                  k(  sJ t        | | k\  | | k        j                         t        j                  k(  sJ t        ||k  ||k\        j                         t        j                  k(  sJ t        ||kD  ||k\        j                         t        j                  k(  sJ t        | | kD  ||k\        j                         t        j                  k(  sJ t        | | k  ||k\        j                         t        j                  k(  sJ t        ||k  | | k        j                         t        j                  k(  sJ t        | | kD  | | k        j                         t        j                  k(  sJ t        ||kD  | | k        j                         t        j                  k(  sJ t        | | k  | | k        j                         t        j                  k(  sJ t        ||k  ||k        j                         t        j                  k(  sJ t        ||kD  ||k        j                         t        j                  k(  sJ t        | | kD  ||k        j                         t        j                  k(  sJ t        | | k  ||k        j                         t        j                  k(  sJ t        ||k  | | k\        j                         t        j                  k(  sJ t        ||kD  | | k\        j                         t        j                  k(  sJ t        | | kD  | | k\        j                         t        j                  k(  sJ t        | | k  | | k\        j                         t        j                  k(  sJ t        ||k\  | |k  ||k        j                         t        j                  k(  sJ t        ||k\  ||k        j                         t        j                  k(  sJ t        ||k\  t        ||            j                         ||k\  k(  sJ t        ||k\  t        ||            j                         t        ||      k(  sJ t        t        ||      |dk\  d|k  |dk\  ||k        j                         t        ||      |dk\  z  |dk\  z  ||kD  z  k(  sJ t        t        ||      ||k\  | |k  ||k        j                         ||k\  ||kD  z  | |k  z  k(  sJ t        t        ||      ||k\  | |k  ||k\  ||k        j                         t        ||      ||kD  z  | |k  z  k(  sJ t        t        ||      |dk\  d|k  |dk\  ||k        j                         t        ||      |dk\  z  |dk\  z  ||kD  z  k(  sJ t        ||      t        ||      z  ||k\  z  ||k\  z  j                         t        ||      t        ||      z  ||k\  z  k(  sJ t        t        ||      t        ||             j                         t        t        |d	      t        |d	            k(  sJ t        ||k\  ||k        j                         t        ||      k(  sJ t        |dkD  |d
k  t        ||            j                         t        j                  k(  sJ t        ||k\  t        |d	            j                         t        |d	k\  t        |d	            k(  sJ t        t        |d      t        |d            j                         t        j                  k(  sJ t        t        |d      t        d|            j                         t        |d      k(  sJ t        t        |d      t        d|            j                         t        |d      k(  sJ y )Nw x y zTreald eFrS   rV   r   r   r   )
r   r   r   r	   r/   r   r0   r   r   r   )rx   rn   ro   rw   r   r]   s         rP   test_relational_simplificationr  $  s	   .JAq!Q5u%DAqa1fa!e%%'166111a1fa!e%%'166111a1fqbA2g'')QVV333a1fqbA2g'')QVV333qbQBhA'')QVV333qbQBhaR ))+qvv555qbQBhA'')QVV333qbQBhaR ))+qvv555a1fa!e%%'166111a1fa!e%%'166111a1fqbA2g'')QVV333a1fqbA2g'')QVV333qbQBhA'')QVV333qbQBhA'')QVV333qbQBhaR ))+qvv555qbQBhaR ))+qvv555a!eQ!V%%'166111a!eQ!V%%'166111qbA2gqAv'')QVV333qbA2gqAv'')QVV333a!eaRA2X'')QVV333qbA2graRx ))+qvv555a!eaRA2X'')QVV333qbA2graRx ))+qvv555a!eQ!V%%'166111a!eQ!V%%'166111qbA2gqAv'')QVV333qbA2gqAv'')QVV333a!eaRA2X'')QVV333a!eaRA2X'')QVV333qbA2graRx ))+qvv555qbA2graRx ))+qvv555 a1fa!eQ!V$--/166999qAvq1u&&(AGG333a1fbAh((*qAv666qAvr!Qx ))+r!Qx777r!QxaQQA6??A	AqQ!V	Q	'1q5	13 3 3bAhQAq1u-668	
aAEa!e$% % %r!QxaQQA6??A
1aAEa!e$% % % r!QxaQQA6??A	AqQ!V	Q	'1q5	13 3 3q!Hr!Qx16*a1f5??A	AqBq!H	Q	') ) )r!QxAr#,,.#bAh1a2IIIIqAvqAv'')R1X555q1ua"fbAh'002agg===qAvr!Qx ))+s162a8/DDDDbAh1a!**,666r!QxAq"++-Aq999bAh1a!**,1a888rO   c                     t        dd      } t        | dk  | dkD        j                         t        j                  k(  sJ t        | dk  | dk\        j                         t        j                  k(  sJ t        | dk  | dk\        j                         t        j                  k(  sJ t        | dk  | dk\        j                         t        j                  k(  sJ y )Nrn   Tr  rS   r   )r   r   r   r	   r/   r   r0   rn   s    rP   test_issue_8373r  f  s    $Aa!eQV%%'166111a!eQ!V%%'166111q1ua1f&&(AGG333a1fa1f&&(AFF222rO   c                      t        dd      } t        t        | d      t        | d            j                         t        j
                  k(  sJ y )Nrn   Tr  rS   rV   )r   r   r   r   r	   r0   r  s    rP   test_issue_7950r  n  s<    $Ar!QxAq"++-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 ]  } | ||j	                                 y )Nc                 X   | j                   }t        |      }t        t        t	        t        t        |dz
   |            |z  |                  }|D ]V  }t        t        ||            }| j                  |      }|j                  |      }||k(  r@J dj                  | ||              y )NrS   zHOriginal: {}
and simplified: {}
do not evaluate to the same value for {})
free_symbolsr6  r`  r  rG   rw  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    $$I\$uqsVQ/?*@*BAFGH	 	9F3tV,-G$MM'2M(oog6O O3 9 66(J893		9rO   r  Tr  r  FrS   rV   r   r   )r   r   r   r   r   )	r  rx   rn   ro   rw   r   r]   expressions
expressions	            rP   *test_relational_simplification_numericallyr  s  sc   
9 .JAq!Q5u%DAqr!QxaQQA>r!QxaQQA>bAhQAqAvq1u=qAvr!Qx(c"Q(AFAE2a1fa!e3DE"Q(AFAE17AEBDq!Hr!Qx'162a1f=K " H
01;1D1D1F	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 
cg c]"  }
t        d	 |
D              st        |
      r!|
$ }	}
|D ]  \  }}|D ]w  } ||d   j                   }|d
   }|	D ]Y  }t        t!        ||            }|j#                  |      }|j#                  |      }||k(  r@J dj%                  |d   ||              y  y c c}
w )Nr   Wild)_simplify_patterns_and_simplify_patterns_or_simplify_patterns_xorrZ   r[   r\   r=  r   c              3   &   K   | ]	  }|d z    ywrV   NrN   r  rx   s     rP   r  zFtest_relational_simplification_patterns_numerically.<locals>.<genexpr>       ,>qQU,>   rS   GOriginal: {}
and simplified: {}
do not evaluate to the same value for{})
sympy.corer  sympy.logic.boolalgr  r  r  r   r   r   r`  r  rG   rw  anyrJ  r  r   xreplacer  )r  r  r  r  rZ   r[   r\   r  patternlistsr  rL  rI  patternlistpatternr  r  r  r  r  r  s                       rP   3test_relational_simplification_patterns_numericallyr    sf   6 6S	AS	AS	Aq!9D023.010235L Sd5Q<&8&:A>?@I%Mq,>A,>)>c!fMIM) 
Ak" 		AGWQZ__-H J# As401 ( 1 1' :","5"5g">$7 A :
J@A7	A		A
A Ns   "D</D<c                      t        d      } | dkD  | dk  z  | dkD  | dk  z  z  j                         | dkD  | dk  z  | dkD  | dk  z  z  k(  sJ y )Nr{  r   r   )r   r   )r{  s    rP   test_issue_16803r    sg    AUq1u!a%AE!23==?	
Q1q5a!eA./0 0 0rO   c                      t         t        t        t        i t        t         t        z   dkD  t         t        z
  dk        j	                         sJ t        t         t        z   dk  t         t        z
  dk        j	                         rJ t        t         fd       t        t         fd       t        t         fd       y )Nr   c                  r    t        t        t        z   dk  t        t        z
  dk        j                         S Nr   )r   rn   ro   r   r  s   rP   rW   z"test_issue_17530.<locals>.<lambda>  s)    bQAEAI6;;A> rO   c                  r    t        t        t        z   dkD  t        t        z
  dk        j                         S r  r   rn   ro   r   r  s   rP   rW   z"test_issue_17530.<locals>.<lambda>  )    c!a%!)QUQY7<<Q? rO   c                  r    t        t        t        z   dkD  t        t        z
  dk        j                         S r  r  r  s   rP   rW   z"test_issue_17530.<locals>.<lambda>  r  rO   )rn   r   ro   r   r   r   rD   rX   r  s   @rP   test_issue_17530r    s    	
B2Aa!eaiQ#((+++1q519a!eai(--a000
9>?
9?@
9?@rO   c                     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 y )NrS   r   r   r   rS   rS   rS   r   r  r  r   r  r   )r9   rN   rO   rP   test_anf_coeffsr    s    q!f!Q'''l#|333l#|333l#|333l#|333l#|333l#|333rO   c                     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 y )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Aq6<(D#a)/0 0 0rO   c                      t        d      \  } }t        d| |g      t        | |      k(  sJ t        ddg| |g      t        t        |      |       k(  sJ y )Nr  r   rS   r   )r   r;   r   r   r  s     rP   test_bool_mintermr    sU    5>DAqAq6"c!Qi///AA'3s1vq>999rO   c                      t        d      \  } }t        d| |g      t        t        |       |      k(  sJ t        ddg| |g      t        t        |      |       k(  sJ y )Nr  rV   r   rS   )r   r<   r   r   r  s     rP   test_bool_maxtermr    sY    5>DAqAq6"bQm333AA'2c!fa=888rO   c                      t        d      \  } }t        d| |g      |k(  sJ t        ddg| |g      t        | |      k(  sJ y )Nr  rS   )r   r=   r   r  s     rP   test_bool_monomialr    sK    5>DAqQF#q(((!Q!Q(C1I555rO   c                  X    t        g dg d      dk(  sJ t        g dg d      dk(  sJ y )Nr   r   rV   r   r   )r>   rN   rO   rP   test_check_pairr    s,    y),111y),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 y r   )rL   rM   rK   r,   )rr   res1results      rP   test_issue_19114r    sb    Ea1"f!qb)DEa1"f!qb)DD4(FdD\!!!rO   c                  &   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 y )N)rS   rV   r   r  r         	   r         r   )r   rZ   r[   r\   r   )r  expecteds     rP   test_issue_20870r    sv    aAq\#KLFaRAEAI&!qb&A2+6aR1"!"aR1".HXrO   c                     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 y Nr   )r   rS   r   )r?   rn   ro   rw   r   r   rN   rO   rP   test_convert_to_varsSOPr     sS    y1a)4SVQA9OOOOy1a)4QAGGGrO   c                     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 y r  )r@   rn   ro   rw   r   r   rN   rO   rP   test_convert_to_varsPOSr    sO    y1a)41c!fa8HHHHy1a)4CFA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       y )Nza:erV   r  Tr   c                       t         z        S rm   )rB   )rZ   r[   s   rP   rW   z%test_gateinputcount.<locals>.<lambda>  s    nQqS1 rO   )r   rB   r   rD   rX   )r\   r   r]   rZ   r[   s      @@rP   test_gateinputcountr     s|    ENMAq!Q#a)$)))!a!eai1q5112a777#a,'1,,,
91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        kD        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kD  t        dkD         rJ t        t        dkD  t        dkD        sJ t        t        dkD  dt        k        t        j                  u sJ t        t        dkD  t        dkD        t        dkD  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kD  t        dkD        t        dkD        t        dkD  k(  sJ t        t        t        dkD  t        dkD        t        dkD  t        dkD  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 y r  )r   rn   r	   r/   ro   r   r   r   r   r}  r|  r0   r  rN   rO   rP   test_refiner    s   a!eq1uX&&&!a%!a%!!!!a%!a%!QVV+++!a%!a%!a!e,,,a1fQi(((!q&AF$$$!q&AF$...!q&AF$a000a!eq1uX&&&!a%1q5"""!a%1q5"aff,,,!a%1q5"q1u---a1fQi(((!q&AF$$$!q&AF$...!q&AF$a000bAh"Q(,,,"Q(bAh((("Q(bAh(AFF222"Q(bAh(Bq!H444bAh"Q(,,,"Q(R1X'166111"Q(bAh((("Q(bAh(R1X666 #a!eQU#a!e-!a%888#a!eQU#a!eA%67166AAA !**Q-A/166999!**Q-A/177:::!**Q-+qzz!}<<<rO   c                  J   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 cg c]"  }t        d	 |D              st        |      r!|$ }}|D ]  \  }	}
|
D ]w  } |	|d   j                   }|d
   }|D ]Y  }t        t        ||            }|j                  |      }|j                  |      }||k(  r@J dj                  |d   ||              y  y c c}w )Nr   r  )_simplify_patterns_and3rZ   r[   r\   r=  r   c              3   &   K   | ]	  }|d z    ywr  rN   r  s     rP   r  zPtest_relational_threeterm_simplification_patterns_numerically.<locals>.<genexpr>7  r  r  rS   r  )r  r  r  r	  r   r`  r  rG   rw  r  rJ  r  r   r  r  )r  r	  rZ   r[   r\   r  r  r  rL  rI  r  r  r  r  r  r  r  r  s                     rP   =test_relational_threeterm_simplification_patterns_numericallyr  -  sC   ;S	AS	AS	Aq!9D1345LSd5Q<&8&:A>?@I%Mq,>A,>)>c!fMIM) 
Ak" 		AGWQZ__-H J# As401 ( 1 1' :","5"5g">$7 A :
J@A7	A		A
A Ns   0"D D c                     t        t        t        t              t	        t        t
                    } t        | t               sJ t        | j                        t        t        t              t	        t        t
              hk(  sJ y rm   )	r   r   rZ   r\   r   r[   ri   r  rJ  r  s    rP   test_issue_25451r  E  sQ    
3q!9bAhAaqvv;3q!9bAh////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   rj   rZ   r[   r\   r   r]   rx   rn   ro   rw   rQ   rc   rf   rk   rs   ru   ry   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r   r#  r,  r/  r1  r;  rC  rF  rM  rO  rR  rU  rW  r[  r]  ra  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  rN   rO   rP   <module>r     s   # + ! 2 2 " . % = + ( ,
 
 
 
 
 
 
 
 
 
 
 
 
 & 4 4 9 9U^
1a#I. 1aAq!Q	J0),924
3
9
2
(('$>(0?r(j@2	"$
4&*2''S..;8" 
68>",+	L))+4\%&CALB$ B B$
!
3,
8
/L&&#
1."H :(@9D39
 H H<A60A40:963
"H
G
3"=JA00rO   