
    MZdƾ              	          d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
lmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH d dlImJZJ d dlKmLZLmMZMmNZN d dlOmPZPmQZQmRZR  ed      \  ZSZTZUZV ed      \	  ZWZXZYZZZ[Z\Z]Z^Z_d Z`d Zad Zbd Zcd Zdd Zed Zfd Zgd Zhd Zid Zjd Zkd Zld Zmd Znd  Zod! Zpd" Zqd# Zrd$ Zsd% Zt	 d& Zud' Zvd( Zwd) Zxd* Zyd+ Zzd, Z{d- Z|d. Z}d/ Z~d0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> ZeMd?        Zd@ ZdA ZdB ZdC ZdD ZdE ZdF ZdG ZdH ZdI ZdJ ZdK ZdL ZdM ZdN ZdO ZdP ZdQ ZeNdR        ZdS ZdT ZdU ZdV ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zyc)d    )Q)refine)oo)EqualityEqNe)S)Dummysymbols)	Piecewise)cossin)IntervalUnionsimplify)/AndBoolean
EquivalentITEImpliesNandNorNotOrPOSformSOPformXorXnor	conjuncts	disjunctsdistribute_or_over_anddistribute_and_over_oreliminate_implicationsis_nnfis_cnfis_dnfsimplify_logicto_nnfto_cnfto_dnfto_int_reprbool_maptruefalseBooleanAtom
is_literalterm_to_integertruth_table
as_Booleanto_anfis_anfdistribute_xor_over_and
anf_coeffsANFformbool_mintermbool_maxtermbool_monomial_check_pair_convert_to_varsSOP_convert_to_varsPOS	Exclusivegateinputcount)CNF)raisesXFAILslow)combinationspermutationsproductzA:Dza:e w:zc                     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        @/usr/lib/python3/dist-packages/sympy/logic/tests/test_boolalg.pytest_overloadingrP       s     q5C1Iq5Bq!HEQ;"SAY****6WQ]"""6WQ]"""2Q<<q5C1IrN   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        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   rJ   rM   rN   rO   <lambda>ztest_And.<locals>.<lambda>:   s    c!Qi rN   c                  0    t        t        dk  t              S rT   rV   rM   rN   rO   rW   ztest_And.<locals>.<lambda>;   s    c!a%m rN   r   )r   r.   rJ   r/   rC   	TypeError	canonicalrK   rG   r   abr   c)eglgeleis         rO   test_Andrd   ,   s   5D==q6Q;;t9u:tT?d"""tUu$$$ue%%%tQ<1ua=E!!!tT4 D(((tT1"""tUA%'''q!9>>
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   6I9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        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 )NTFrR   c                  "    t        dt              S rT   r   rJ   rM   rN   rO   rW   ztest_Or.<locals>.<lambda>S   s    bAh rN   c                  0    t        t        dk  t              S rT   rg   rM   rN   rO   rW   ztest_Or.<locals>.<lambda>T   s    bQl rN   )r   r/   rJ   r.   rC   rY   rZ   rK   )r^   r_   r`   ra   rb   s        rO   test_Orri   E   s   45==a5A::d8te9dD>T!!!dE?d"""eUu$$$dA;$eQ<1dE5!T)))dE1%%%eUA!###a8t
9&'
9*+a!eQ!V$$$	AAa"""q5!a%aa/LAq"baBr!Ry(((rN   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 NTFrR   r   )	r   r/   rJ   r.   rK   
isinstancerL   DrZ   )r^   s    rO   test_Xorrn   \   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8rN   c                      t         t        z  } | j                  t              t         t        z  t          t         z  z  k(  sJ y N)xyrewriter   exprs    rO   test_rewrite_as_Andrv   u   s3    q5D<<QA27 3333rN   c                      t         t        z  } | j                  t              t         t         z  t        t          z  z  k(  sJ y rp   )rq   rr   rs   r   rt   s    rO   test_rewrite_as_Orrx   z   s3    q5D<<QB1r62222rN   c                      t         t        z  t        t         z  z  } | j                  t              t         t        z   t        t         z   z   k(  sJ y rp   )rr   zwrs   r   rt   s    rO   test_rewrite_as_Nandr|      sC    Ea1"fD<<QU8QBi#7!8888rN   c                      t         t        t         z  z  } | j                  t              t          t        t         z   z   k(  sJ y rp   )rz   rr   r{   rs   r   rt   s    rO   test_rewrite_as_Norr~      s9    QB<D<<1"aRy. 1111rN   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   rM   rN   rO   rW   ztest_Not.<locals>.<lambda>   s    c$. rN   TFr   rR   rU   )rC   rY   r   r/   r.   rM   rN   rO   test_Notr      sa    
9./t9u:q6T>>q6U??q6U??rN   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   r/   rJ   r.   rM   rN   rO   	test_Nandr      s    6U??7qb==:;$du$$$e$$$u%%%a=QBq>T!!!dD!U***dA1"$$$eQ4'''rN   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.   rJ   r/   rM   rN   rO   test_Norr      s    5D==q6aR<<t9u:tT?e###tUu$$$ue$$$tQ<5   ua=QBtT4 E)))tT1&&&tUA%'''rN   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.   rJ   r/   rM   rN   rO   	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&&&rN   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 rp   )r   rJ   rK   rL   rM   rN   rO   rW   ztest_Implies.<locals>.<lambda>   s    wq!Q/ rN   TFr   rR   )	rC   
ValueErrorr   r.   r/   rJ   rK   r	   OnerM   rN   rO   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>>rN   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 rk   )
r   rJ   rK   r.   r/   r   rL   r	   r   r   rM   rN   rO   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===rN   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)r@   r.   r/   rM   rN   rO   test_Exclusiver      s^    UE5)T111T5%(D000T4'5000T4&%///rN   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 rp   )rJ   rK   equalsrM   rN   rO   rW   ztest_equals.<locals>.<lambda>   s    Qq1u(= rN   )
r   r   rJ   rK   r   r   r   rL   rC   NotImplementedErrorrM   rN   rO   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
 =>rN   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*        j,                  u 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 t1        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        t3        t        d      t3        t        t                          t        t3        t        d      t3        t        d            k(  sJ t        t3        t        dz
  d      t3        t        t                    j/                         t        t3        t        d      t3        t        d            k(  sJ t        t5        t        dz
  d      t5        t        t                    j/                         t        t5        t        d      t5        t        t                    k(  sJ t        t3        t        dz
  d      t5        t        t                    j/                         t        t3        t        d      t5        t        d            k(  sJ t        t3        t        dz
  d      t3        t        t        t        z         t3        t        t        z   d            j/                         t        t3        t        d      t3        t        d#      t3        t        d            k(  sJ t        t3        t        dz
  d      t3        t        dz   d            j/                         t3        t        d      k(  sJ t        t5        t        dz
  d      t5        t        dz   d            j/                         t5        t        d      k(  sJ t        t3        t        dz
  d      t3        t        dz   d            j/                         d!k(  sJ t        t5        t        dz
  d      t5        t        dz   d            j/                         t        t5        t        d      t5        t        d            k(  sJ y$)%z1
    Test working of simplification methods.
    r   r   rR   r   rR   rR   rR   r   r   )rR   rR   r   )r   r   r   r   rR   r   rR   r   rR   rR   rR   rR   r   r   r   rR   r   r   rR   rR   r   rR   rR   rR   rR   r   rR   rR   rR   rR   rR   rR   )r   r   r   r   )r   r   rR   r   r   rR   r   rR   )rR               )r   rU      rR   r   r   r   c                  D    t        t        t        t        t        g       S rp   )r   r{   rq   rr   rz   mintermss   rO   rW   z-test_simplification_boolalg.<locals>.<lambda>%      w1a|X> rN   c                  D    t        t        t        t        t        g       S rp   r   r{   rq   rr   rz   r   s   rO   rW   z-test_simplification_boolalg.<locals>.<lambda>&  r   rN   c                  D    t        t        t        t        t        gdg      S )Nabcdefgr   rM   rN   rO   rW   z-test_simplification_boolalg.<locals>.<lambda>(  s    gq!QlYK@ rN   rU   r   c                  @    t        t        t        t        z  z  d      S )Nblabla)form)r(   rJ   rK   rL   rM   rN   rO   rW   z-test_simplification_boolalg.<locals>.<lambda>:  s    ~a1q5kI rN   za b c d e f g h j)dontcarec                  .    t        t        gdggdgg      S NrR   )r   rq   rM   rN   rO   rW   z-test_simplification_boolalg.<locals>.<lambda>O      wsaSEQC59 rN   c                  .    t        t        gdggdgg      S r   )r   rq   rM   rN   rO   rW   z-test_simplification_boolalg.<locals>.<lambda>T  r   rN   FTN)r   rq   rr   rz   r   r   r   r   r.   r
   r{   rC   r   rY   rJ   rK   rL   r(   r   r   r   r	   r/   r   r   r   r   )set1set2	dontcaresansr\   r^   r[   r]   dfr_   hjru   r   s                 @rO   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1QWW<<<#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$% % %rN   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   r[   r   r{   rq   rr   rz   r   r   r   r\   r]   r   )r   	function1	function2s      rO   test_bool_mapr   j  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%???rN   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   rJ   r/   r   r.   rM   rN   rO   test_bool_symbolr     s     q$<1q$"""q%=E!!!q$%'''a;$a<1rN   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 rk   )rl   r   r.   r/   
is_BooleanrJ   rK   rM   rN   rO   test_is_booleanr     s   dG$---dG$,,,9999I%::::J5   ??d"""EEB???E<<:a1111a!!!rN   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   )rJ   rK   subsr/   r.   rM   rN   rO   	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3rN   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   )rJ   rK   s     rO   test_commutativer     s>    w'DAqq5AE>>q5AE>>rN   c                  Z    t         t        z  t        z  t         t        t        z  z  k(  sJ y)zTest for associativity of AndNrJ   rK   rL   rM   rN   rO   test_and_associativityr     s"     EQ;!q1u+%%%rN   c                  Z    t         t        z  t        z  t         t        t        z  z  k(  sJ y rp   r   rM   rN   rO   test_or_assicativityr     s     UaKQ!a%[)))rN   c                  *    t               } |   | k(  sJ y rp   )r   )r[   s    rO   test_double_negationr     s    	AR5A::rN   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   rJ   rK   rL   r   r   r   rm   rM   rN   rO   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 2rN   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    rJ   rK   rL   rM   rN   rO   test_conjunctsr     s    QUQYAq!9,,,a!eq[!a!eQZ///Q<A3T?tf$$$Uw&&&rN   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!   rJ   rK   rL   rM   rN   rO   test_disjunctsr     s    QUQYAq!9,,,a!eq[!q1uk]222Q<A3T?tf$$$Uw&&&rN   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 rp   )	r#   r   r   rJ   rK   rL   r"   r7   r   rM   rN   rO   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RrN   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 y )Nx,y,zTFremove_true)deep)r   r5   r   r   r   r   r   r   r   r   r   )rq   rr   rz   s      rO   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rN   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 )NFrR   r   c                  P    t        t        dk  dgt              j                         S r   )r   rJ   rK   r)   rM   rN   rO   rW   ztest_to_nnf.<locals>.<lambda>  s    c!a%!a0779 rN   )r)   r.   r/   rJ   rK   r   rL   r   r   r   r   rC   rY   rM   rN   rO   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:rN   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 NTrR   )r*   rK   rL   r   r   rJ   r   r   rM   rN   rO   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!!!rN   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   rO   rW   z"test_issue_18904.<locals>.<lambda>2  s    vb48 rN   c                      t         d      S r   r   r   s   rO   rW   z"test_issue_18904.<locals>.<lambda>5  s    6"t#< rN   T)r   force)	r   r&   r*   rC   r   zipr   r   r+   )x1x2x3x4x5x6x7x8x9x10x11x12x13x14x15r   tr   s                    @rO   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6rN   c                  f    t        t        t        dkD  t        dkD  t        dk  z  z              sJ y )NrU      )r&   r*   r\   r[   rM   rN   rO   test_issue_9949r  9  s+    &!b&QUq1u$556777rN   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 rp   )rB   
CNF_to_cnfto_CNFrK   rL   r*   rJ   rM   rN   rO   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===rN   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+   rK   rL   r   r   rJ   r   r   rM   rN   rO   test_to_dnfr  F  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!!!rN   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rp   rM   ).0rq   sorted_recursives     rO   	<genexpr>z=test_to_int_repr.<locals>.sorted_recursive.<locals>.<genexpr>Y  s     ;!*1-;s   )sortedrY   )argr  s    rO   r  z*test_to_int_repr.<locals>.sorted_recursiveW  s-    	;s;;; 	J	s    %%rR   rU   r   r   )r   r   r   r,   )rq   rr   rz   r  s      @rO   test_to_int_reprr  T  s    '77+,GAq! KQAAq	BC1a&1a&)*+ + +KQQB!QCD1a&1b'*+, , ,rN   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   r6   r.   r/   r   r   r   r   rq   rr   s     rO   test_is_anfr  c  s    5>DAq$<4%=D   !9#a)$$$#aC1I&'4///#aBq!H%&%///#c!fa.!U***rN   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.   rJ   rK   r   r   rM   rN   rO   test_is_nnfr!  n  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KrN   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&   rq   rr   rz   rM   rN   rO   test_is_cnfr#  z      !9!a%!)$$$!a%!)$$$1q5A+$&&&1q5A+%'''AE(Q,5(((rN   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'   rq   rr   rz   rM   rN   rO   test_is_dnfr&    r$  rN   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        d        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:CTFrR   r   c                  ,    t        dt        t              S rT   r   rq   rr   rM   rN   rO   rW   ztest_ITE.<locals>.<lambda>  s    c!Ql rN   c                  $    t        dg t              S r   r   rr   rM   rN   rO   rW   ztest_ITE.<locals>.<lambda>      c!Rm rN   c                  $    t        ddt              S )NrR   rM   r+  rM   rN   rO   rW   ztest_ITE.<locals>.<lambda>  r,  rN   c                  $    t        dt        g       S r   r+  rM   rN   rO   rW   ztest_ITE.<locals>.<lambda>  s    c!Qm rN   r   c                  :    t        t        dkD  t        t              S r   r)  rM   rN   rO   rW   ztest_ITE.<locals>.<lambda>  s    c!a%A. rN   c                  D    t        t        dkD  t        t        t              S r   )r   rq   rr   rz   rM   rN   rO   rW   ztest_ITE.<locals>.<lambda>  s    s1q5!Q2 rN   )r   r   r/   r.   rl   r   r   rq   r   rr   rC   rY   r	   r   r   rz   r   r   r   s      rO   test_ITEr1    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
9./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3rN   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   )
r1   rJ   r   rK   r   zeror   r   rq   rr   rM   rN   rO   test_is_literalr4    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%!)$$$$rN   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   )rJ   rK   r   r   r   r   r   rM   rN   rO   test_operatorsr6    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rN   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 )NTFrR   c              3   D   K   | ]  }|j                  d d      |u   yw)rR   rU   Nr   r  rc   s     rO   r  z"test_true_false.<locals>.<genexpr>_  s      @qzz!Q1$@s    )r.   r	   r/   hashlenrl   r0   boolr   rH   r   rq   r   r   r   r   r   r   r   all)TFs     rO   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.?@@@@rN   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   FrR   rU   r   c                  B    t        t              dk  j                         S r   )r   rq   as_setrM   rN   rO   rW   z"test_bool_as_set.<locals>.<lambda>o  s    Q!(;(;(= rN   r   )r   rr   rD  r   r   r   rq   r   r   r   r.   r	   UniversalSetr/   EmptySetopenr   rC   r   r   r   rM   rN   rO   test_bool_as_setrH  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ArN   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   rD  r   r   r   r	   Realsr  s     rO   test_multivariate_bool_as_setrK  t  s    5>DAqqAvqAv%%'8Ar?8Ar?+JJJJa1fa1f$$&!''!''/"at$Xrc1dD%AA+B B B BrN   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 )Nrq   T)extended_realrU   )
r   r   r   funcr;  argscountr	   r.   r   )rq   rO  vs      rO   test_all_or_nothingrR  }  s    4(A8Q"WDT
Avv}166{c$i$**QVV*<<<<<Dyy
D	Avv|166{aDyyrN   c                  h    t         j                  t         k(  sJ t        j                  t        k(  sJ y rp   )r.   rZ   r/   rM   rN   rO   test_canonical_atomsrT    s&    >>T!!!??e###rN   c                  h    t         j                  t        k(  sJ t        j                  t         k(  sJ y rp   )r.   negatedr/   rM   rN   rO   test_negated_atomsrW    s&    <<5   ==D   rN   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 )NrU   T)	left_openrR   )r   rq   r   rD  r   rM   rN   rO   test_issue_8777rZ    s    q1ua"f$$&(1bD*IIIIqAvq2v%%'8Ar?:::F??"b 1111G2#r!2222rN   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 )NrB  rU   )r   r   r   rq   rD  r   rM   rN   rO   test_issue_8975r\    s[    c2#'17#SaR%89@@B"bHQO+, , ,rN   c                  H    t        g d      dk(  sJ t        d      dk(  sJ y )N)rR   r   rR   r   r   rR   r   R   0010101000111001i9*  )r2   rM   rN   rO   test_term_to_integerr`    s*    01R777-.%777rN   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   )r[   r\   r]   r   r   s        rO   test_issue_21971rb    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;...rN   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   rR   T)listr3   r   rq   rr   rM   rN   rO   test_truth_tablerf    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rN   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 rp   rM   r  s   rO   rW   z!test_issue_8571.<locals>.<lambda>  	    1" rN   c                  
      S rp   rM   ri  s   rO   rW   z!test_issue_8571.<locals>.<lambda>  rj  rN   c                      t               S rp   )absri  s   rO   rW   z!test_issue_8571.<locals>.<lambda>      #a& rN   c                      t               S rp   )intri  s   rO   rW   z!test_issue_8571.<locals>.<lambda>  rn  rN   rU   c                       z   S rp   rM   or  s   rO   rW   z!test_issue_8571.<locals>.<lambda>      !a% rN   c                       z
  S rp   rM   rr  s   rO   rW   z!test_issue_8571.<locals>.<lambda>  rt  rN   c                       z  S rp   rM   rr  s   rO   rW   z!test_issue_8571.<locals>.<lambda>  rt  rN   c                       z  S rp   rM   rr  s   rO   rW   z!test_issue_8571.<locals>.<lambda>      !A# rN   c                       z  S rp   rM   rr  s   rO   rW   z!test_issue_8571.<locals>.<lambda>  rx  rN   c                       z  S rp   rM   rr  s   rO   rW   z!test_issue_8571.<locals>.<lambda>  s    !Q$ rN   )	r	   r.   r/   rC   rY   Zeror   rq   range)_rs  r  s    @@rO   test_issue_8571r~    s    ffagg y*%y*%y.)y.)&&!%%# 	A1X y-0y-0y-0y+.y+.y,/!1	rN   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)positiverR   r   )r   r	   r/   expandr.   )r  pqrs       rO   test_expand_relationalr    s    d#A54(DAq
a!Al
Q1q\	*Q	.AAGG88:   E>>qvv%%%rN   c                      t         j                  j                  dk(  sJ t         j                  j                  dk(  sJ y )NT)r	   r.   is_Atomr/   rM   rN   rO   test_issue_12717r    s.    66>>T!!!77??d"""rN   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rp   )r4   r	   r.   r9  s     rO   r  z"test_as_Boolean.<locals>.<genexpr>  s     F1z!}&F   %'rR   rz   )r3  c              3   R   K   | ]  }t        |      t        j                  u  ! y wrp   )r4   r	   r/   r9  s     rO   r  z"test_as_Boolean.<locals>.<genexpr>  s     HAz!}'Hr  Fr   c              3   8   K   | ]  }t        |      |k(    y wrp   r4   r9  s     rO   r  z"test_as_Boolean.<locals>.<genexpr>  s     6az!}!6s   rU   c                      t               S rp   r  )rc   s   rO   rW   z!test_as_Boolean.<locals>.<lambda>  s    *Q- rN   )r   r=  r	   r.   r/   rq   rC   rY   )r  rz   rc   s     @rO   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1rN   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 )NrR   TF)r   rq   rr   rz   binary_symbolsr   r   setr	   r.   r/   r   r   primeltis_truer   )r   s    rO   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:$$---rN   c                      t        t        t              j                  t              t	        dt        t        d      fd      k(  sJ y )Nr   F)rR   T)r   rq   rr   diffr   r   rM   rN   rO   test_BooleanFunction_diffr    s1    q!9>>!	1bEl*;Y GGGGrN   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   rR   r   r   r   )r   rR   rR   r   r   r   r   rR   r   r   r   rR   r   r   rR   )rR   rR   r   r   rR   rR   r   rR   )r   r(   r   r{   rq   rr   rz   )rJ   rK   rL   rm   Er?  GHr  soldnfsolcnfr   r   s                rO   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     rN   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 eFrR   rU   r   r   r   )
r   r   r   r	   r.   r   r/   r   r   r   )r{   rq   rr   rz   r   r^   s         rO   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8rN   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 )Nrq   Tr  rR   r   )r   r   r   r	   r.   r   r/   rq   s    rO   test_issue_8373r  `  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2rN   c                      t        dd      } t        t        | d      t        | d            j                         t        j
                  k(  sJ y )Nrq   Tr  rR   rU   )r   r   r   r   r	   r/   r  s    rO   test_issue_7950r  h  s<    $Ar!QxAq"++-888rN   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 )NrR   zHOriginal: {}
and simplified: {}
do not evaluate to the same value for {})
free_symbolsr;  re  r  rF   r|  dictr   r   format)	original
simplifiedsymbr  	valuelistvaluessublistoriginalvaluesimplifiedvalues	            rO   (test_simplification_numerically_functionz\test_relational_simplification_numerically.<locals>.test_simplification_numerically_functiono  s    $$I\$uqsVQ/?*@*BAFGH	 	9F3tV,-G$MM'2M(oog6O O3 9 66(J893		9rN   r  Tr  r  FrR   rU   r   r   )r   r   r   r   r   )	r  r{   rq   rr   rz   r   r^   expressions
expressions	            rO   *test_relational_simplification_numericallyr  m  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rN   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 cg c]  }|d	z  	 c}      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 c c}}
w )Nr   Wild)_simplify_patterns_and_simplify_patterns_or_simplify_patterns_xorr[   r\   r]   rB  r   rU   rR   GOriginal: {}
and simplified: {}
do not evaluate to the same value for{})
sympy.corer  sympy.logic.boolalgr  r  r  r   r   r   re  r  rF   r|  anyrO  r  r   xreplacer  )r  r  r  r  r[   r\   r]   r  patternlistsr  rQ  r{   rN  patternlistpatternr  r  r  r  r  r  s                        rO   3test_relational_simplification_patterns_numericallyr    sr   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%OqQ-?a!e-?)@AOIO) 
Ak" 		AGWQZ__-H J# As401 ( 1 1' :","5"5g">$7 A :
J@A7	A		A
A .@Os   EE'E:EE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    rO   test_issue_16803r    sg    AUq1u!a%AE!23==?	
Q1q5a!eA./0 0 0rN   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   rq   rr   r   r  s   rO   rW   z"test_issue_17530.<locals>.<lambda>  s)    bQAEAI6;;A> rN   c                  r    t        t        t        z   dkD  t        t        z
  dk        j                         S r  r   rq   rr   r   r  s   rO   rW   z"test_issue_17530.<locals>.<lambda>  )    c!a%!)QUQY7<<Q? rN   c                  r    t        t        t        z   dkD  t        t        z
  dk        j                         S r  r  r  s   rO   rW   z"test_issue_17530.<locals>.<lambda>  r  rN   )rq   r   rr   r   r   r   rC   rY   r  s   @rO   test_issue_17530r    s    	
B2Aa!eaiQ#((+++1q519a!eai(--a000
9>?
9?@
9?@rN   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 )NrR   r   r   r   rR   rR   rR   r   r  r  r   r  r   )r8   rM   rN   rO   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3rN   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  rR   Tr   Fr   r  )r   r9   r   r   r  s     rO   test_ANFformr    s    5>DAqA3A4'''A3A5(((A3A3q$E#BBBBAq6<(D#a)/0 0 0rN   c                      t        d      \  } }t        d| |g      t        | |      k(  sJ t        ddg| |g      t        t        |      |       k(  sJ y )Nr  r   rR   r   )r   r:   r   r   r  s     rO   test_bool_mintermr    sU    5>DAqAq6"c!Qi///AA'3s1vq>999rN   c                      t        d      \  } }t        d| |g      t        t        |       |      k(  sJ t        ddg| |g      t        t        |      |       k(  sJ y )Nr  rU   r   rR   )r   r;   r   r   r  s     rO   test_bool_maxtermr    sY    5>DAqAq6"bQm333AA'2c!fa=888rN   c                      t        d      \  } }t        d| |g      |k(  sJ t        ddg| |g      t        | |      k(  sJ y )Nr  rR   )r   r<   r   r  s     rO   test_bool_monomialr    sK    5>DAqQF#q(((!Q!Q(C1I555rN   c                  X    t        g dg d      dk(  sJ t        g dg d      dk(  sJ y )Nr   r   rU   r   r   )r=   rM   rN   rO   test_check_pairr    s,    y),111y),222rN   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   )rK   rL   rJ   r+   )ru   res1results      rO   test_issue_19114r    sb    Ea1"f!qb)DEa1"f!qb)DD4(FdD\!!!rN   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)rR   rU   r   r  r         	   r         r   )r   r[   r\   r]   r   )r  expecteds     rO   test_issue_20870r    sv    aAq\#KLFaRAEAI&!qb&A2+6aR1"!"aR1".HXrN   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   rR   r   )r>   rq   rr   rz   r   r   rM   rN   rO   test_convert_to_varsSOPr    sS    y1a)4SVQA9OOOOy1a)4QAGGGrN   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?   rq   rr   rz   r   r   rM   rN   rO   test_convert_to_varsPOSr    sO    y1a)41c!fa8HHHHy1a)4CFAFFFrN   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:erU   r  Tr   c                       t         z        S rp   )rA   )r[   r\   s   rO   rW   z%test_gateinputcount.<locals>.<lambda>  s    nQqS1 rN   )r   rA   r   rC   rY   )r]   r   r^   r[   r\   s      @@rO   test_gateinputcountr    s|    ENMAq!Q#a)$)))!a!eai1q5112a777#a,'1,,,
912rN   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   rq   r	   r.   rr   r   r   r   r   r  r  r/   r  rM   rN   rO   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!}<<<rN   c                  n   ddl m}  ddlm}  | d      } | d      } | d      }|||g}t         |       gg}t        t        t        t        t        dd            dz  d                  }|D 	cg c],  }t        |D 	cg c]  }	|	d	z  	 c}	      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 c c}	}w )Nr   r  )_simplify_patterns_and3r[   r\   r]   rB  r   rU   rR   r  )r  r  r  r  r   re  r  rF   r|  r  rO  r  r   r  r  )r  r  r[   r\   r]   r  r  r  rQ  r{   rN  r  r  r  r  r  r  r  r  s                      rO   =test_relational_threeterm_simplification_patterns_numericallyr  '  sO   ;S	AS	AS	Aq!9D1345LSd5Q<&8&:A>?@I%OqQ-?a!e-?)@AOIO) 
Ak" 		AGWQZ__-H J# As401 ( 1 1' :","5"5g">$7 A :
J@A7	A		A
A .@Os   1D1?D,D1D1,D1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.simplify.simplifyr   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   sympy.assumptions.cnfrB   sympy.testing.pytestrC   rD   rE   	itertoolsrF   rG   rH   rJ   rK   rL   rm   r[   r\   r]   r   r^   r{   rq   rr   rz   rP   rd   ri   rn   rv   rx   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  r4  r6  r@  rH  rK  rR  rT  rW  rZ  r\  r`  rb  rf  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  rM   rN   rO   <module>r     s}   # + ! 2 2 " . % = - ,
 
 
 
 
 
 
 
 
 
 
 
 
 & 4 4 9 9U^
1a#I. 1aAq!Q	J2).924
3
9
2
(('$>(0?r%j@2	"$
4&*2''SC*;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rN   