
    gS                       d dl mZmZmZmZmZmZmZmZm	Z	m
Z
 d dlmZmZmZmZmZ d dlmZmZmZ d dlmZmZ d dlmZ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&m'Z'm(Z(m)Z)m*Z* d d
l+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z< d dl=m>Z> d dl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG d dlHmIZImJZJmKZKmLZLmMZM d dlNmOZOmPZP d dlQmRZRmSZSmTZTmUZUmVZV d dlWZWd ZXd ZYd ZZd Z[d Z\d Z]d Z^d Z_d Z`d Zad  Zbd! Zcd" Zdd# Zed$ Zfd% Zgd& Zhd' ZieRd(             Zjd) ZkeVd*             Zld+ ZmeRd,             Znd- Zod. ZpeVd/             Zqd0 ZreVd1             Zsd2 Ztd3 Zud4 Zvd5 Zwd6 ZxeRd7             Zyd8 Zzd9 Z{eVd:             Z|d; Z}d< Z~d= Zd> ZeVd?             Zd@ ZeVdA             ZdB ZdC ZdD ZdE ZdF ZdG ZdH ZdI ZdJ ZdK ZdL ZeSdM             ZdN ZdO ZdP ZdQ ZdR ZdS ZdT ZeRdU             ZdV ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] ZdS )^    )
twxyznkmpi)askAssumptionsContextQregister_handlerremove_handler)assumingglobal_assumptions	Predicate)CNFLiteral)single_fact_lookupget_known_factsgenerate_known_facts_dictget_known_facts_keys)
AskHandler)get_all_known_factsget_known_facts_dict)Add)IIntegerRationaloozoopi)S)Pow)StrsymbolsSymbol)	factorial)Absimresign)explog)sqrt)acosacotasinatancoscotsintan)
EquivalentImpliesXorAndto_cnf)MatrixSparseMatrix)XFAILslowraiseswarns_deprecated_sympy_both_exp_powNc                     d} t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ d S )N   TFr   r   commutativeintegerrationalrealcomplex
irrational	imaginarypositivenegativeevenoddfiniteprime	composite	hermitianantihermitianr   s    ^/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/assumptions/tests/test_query.py
test_int_1r[      s   	Aq}Q  D((((qy||$$$$qz!}}%%%%qvayy>>T!!!!qy||$$$$q|A5((((q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==D    qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++++    c                     d} t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ d S )N   TFrH   rY   s    rZ   test_int_11r_   1   s   
Aq}Q  D((((qy||$$$$qz!}}%%%%qvayy>>T!!!!qy||$$$$q|A5((((q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==D    qx{{t####qwqzz??d""""q{1~~%''''q{1~~$&&&&qq!!""e++++++r\   c                     d} t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ d S )N   TFrH   rY   s    rZ   test_int_12rb   E   s   
Aq}Q  D((((qy||$$$$qz!}}%%%%qvayy>>T!!!!qy||$$$$q|A5((((q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>T!!!!quQxx==E!!!!qx{{t####qwqzz??e####q{1~~$&&&&q{1~~$&&&&qq!!""e++++++r\   c                  	   d} t          t          j        |                     du sJ t          t          j        |                     J t          t          j        |                     J t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     J t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     J t          t          j        |                     J t          t          j        |                     du sJ t          t          j        |                     J t          t          j        |                     J t          t          j        |                     du sJ t          t          j        |                     du sJ d} t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     J t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     J t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        t$          j                            J d S )N      ?TFga+e@)r   r   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   mathr$   rY   s    rZ   test_float_1rf   Y   s   Aq}Q  D((((qy||$$$qz!}}%%%qvayy>>T!!!!qy||$$$$q|A'''q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>!!!quQxx==   qx{{t####qwqzz??"""q{1~~&&&q{1~~$&&&&qq!!""e++++Aq}Q  D((((qy||%%%%qz!}}%%%qvayy>>T!!!!qy||$$$$q|A'''q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++ qz$'""##+++++r\   c                     t          d          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ d S )Nr   FT)r    r   r   nonzerozerorI   rJ   rK   rL   rM   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   s    rZ   test_zero_0rj      s>   

Aqy||%%%%qvayy>>T!!!!q}Q  D((((qy||$$$$qz!}}%%%%qvayy>>T!!!!qy||$$$$q{1~~%''''qz!}}&&&&qz!}}&&&&qvayy>>T!!!!quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""d******r\   c                  X   t          d          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ d S )NTF)r    r   r   rh   ri   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   s    rZ   test_negativeonerm      s_   Aqy||$$$$qvayy>>U""""q}Q  D((((qy||$$$$qz!}}%%%%qvayy>>T!!!!qy||$$$$q|A5((((q{1~~%''''qz!}}&&&&qz!}}%%%%qvayy>>U""""quQxx==D    qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++++r\   c                  >   t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j	        t                              du sJ t          t          j
        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ d S NTF)r   r   rI   r"   rJ   rK   	algebraicrL   extended_realrM   rN   rO   rP   extended_positiverQ   rR   rS   rT   infiniterU   rV   rW   rX   positive_infinitenegative_infinite r\   rZ   test_infinityrw      s   q}R  !!T))))qy}}&&&&qz"~~%''''q{25((((qvbzz??e####qr""##t++++qy}}&&&&q|B  E))))q{25((((qz"~~%''''q"2&&''4////qz"~~%''''qvbzz??e####quRyy>>U""""qx||%%%%qz"~~$&&&&qwr{{u$$$$q{25((((q{25((((qr""##u,,,,q"2&&''4////q"2&&''5000000r\   c                     t           j        } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        t(                              du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        t(                               du sJ t          t          j        t(                               du sJ d S ro   )r%   NegativeInfinityr   r   rI   rJ   rK   rp   rL   rq   rM   rN   rO   rP   rQ   extended_negativerR   rS   rT   rs   r"   rU   rV   rW   rX   rt   ru   )mms    rZ   test_neg_infinityr|      s   	
	Bq}R  !!T))))qy}}&&&&qz"~~%''''q{25((((qvbzz??e####qr""##t++++qy}}&&&&q|B  E))))q{25((((qz"~~%''''qz"~~%''''q"2&&''4////qvbzz??e####quRyy>>U""""qx||%%%%qz"~~$&&&&qwr{{u$$$$q{25((((q{25((((qr""##u,,,,q"B3''((E1111q"B3''((D000000r\   c                     t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j	        t                              du sJ t          t          j
        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ t          t          j        t                              du sJ d S ro   )r   r   rI   r#   rJ   rK   rp   rL   rq   rM   rN   rO   rP   rQ   ri   rh   rR   rS   rT   rs   rU   rV   rW   rX   rt   ru   rv   r\   rZ   test_complex_infinityr~      s   q}S!!""d****qy~~%''''qz#5((((q{3  E))))qvc{{u$$$$qs##$$----qy~~%''''q|C  !!U****q{3  E))))qz#5((((qz#5((((qvc{{u$$$$qy~~%''''qvc{{u$$$$quSzz??e####qx}}&&&&qz#4''''qws||%%%%q{3  E))))q{3  E))))qs##$$----q"3''((E1111q"3''((E111111r\   c                     t           j        } t          t          j        |                     du sJ t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j	        |                     J t          t          j
        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J t          t          j        |                     J d S NT)r%   NaNr   r   rI   rJ   rK   rp   rL   rq   rM   rN   rO   rP   rh   ri   rR   rS   rT   rs   rU   rV   rW   rX   )nans    rZ   test_nanr      sR   
%Cq}S!!""d****qy~~&&&qz#'''q{3  (((qvc{{###qs##$$,,,qy~~&&&q|C  !!)))q{3  (((qz#'''qy~~&&&qvc{{###qvc{{###quSzz??"""qx}}%%%qz#'''qws||$$$q{3  (((q{3  (((qs##$$,,,,,r\   c                  	   t          dd          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j
        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j        |                     du sJ t          t          j
        |                     du sJ t          dd          } t          t          j
        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j
        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j
        |                     du sJ t          t          j        |                     du sJ t          d	d          } t          t          j        |                     du sJ t          t          j
        |                     du sJ t          d	d          } t          t          j
        |                     du sJ t          t          j        |                     du sJ d S )
N      TFrG      rl   )r!   r   r   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   )rs    rZ   test_Rational_numberr     sJ   AAq}Q  D((((qy||%%%%qz!}}%%%%qvayy>>T!!!!qy||$$$$q|A5((((q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++AAqz!}}%%%%qz!}}&&&&AAqz!}}&&&&qz!}}%%%%AAqz!}}%%%%qz!}}&&&&QAqz!}}&&&&qz!}}%%%%QAqz!}}&&&&qz!}}%%%%QAqz!}}%%%%qz!}}&&&&QAqz!}}&&&&qz!}}%%%%%%r\   c                     t          d          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ d S )N   TF)r1   r   r   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   s    rZ   test_sqrt_2r   B  s   QAq}Q  D((((qy||%%%%qz!}}&&&&qvayy>>T!!!!qy||$$$$q|A4''''q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++++r\   c                  .   t           j        } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t           j        dz   } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ dt           j        z  } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t           j        dz  } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ dt           j        z   dz  } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ d S NTFrG   r   )r%   Pir   r   rI   rJ   rK   rp   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   s    rZ   test_pir   V  s    	Aq}Q  D((((qy||%%%%qz!}}&&&&q{1~~%''''qvayy>>T!!!!qy||$$$$q|A4''''q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++	qAq}Q  D((((qy||%%%%qz!}}&&&&q{1~~%''''qvayy>>T!!!!qy||$$$$q|A4''''q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++	!$Aq}Q  D((((qy||%%%%qz!}}&&&&q{1~~%''''qvayy>>T!!!!qy||$$$$q|A4''''q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++		Aq}Q  D((((qy||%%%%qz!}}&&&&q{1~~%''''qvayy>>T!!!!qy||$$$$q|A4''''q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++	
QTaAq}Q  D((((qy||%%%%qz!}}&&&&q{1~~%''''qvayy>>T!!!!qy||$$$$q|A4''''q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++++r\   c                     t           j        } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ d S ro   )r%   Exp1r   r   rI   rJ   rK   rp   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   s    rZ   test_Er     s<   	Aq}Q  D((((qy||%%%%qz!}}&&&&q{1~~%''''qvayy>>T!!!!qy||$$$$q|A4''''q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++++r\   c                     t           j        } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ d S ro   )r%   GoldenRatior   r   rI   rJ   rK   rp   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   s    rZ   test_GoldenRatior     s<   	Aq}Q  D((((qy||%%%%qz!}}&&&&q{1~~$&&&&qvayy>>T!!!!qy||$$$$q|A4''''q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++++r\   c                     t           j        } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ d S ro   )r%   TribonacciConstantr   r   rI   rJ   rK   rp   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   s    rZ   test_TribonacciConstantr     s=   	Aq}Q  D((((qy||%%%%qz!}}&&&&q{1~~$&&&&qvayy>>T!!!!qy||$$$$q|A4''''q{1~~%''''qz!}}%%%%qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~$&&&&qq!!""e++++++r\   c                  @   t           } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ dt           z   } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t           dt           z   z  } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j	        |                     du sJ t          t          j
        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t           t           z  } t          t          j
        |                     du sJ t          t          j        |                     du sJ t            t           z  } t          t          j
        |                     du sJ t          t          j        |                     du sJ dt           z  t           z  } t          t          j
        |                     du sJ t          t          j        |                     du sJ dt           z  } t          t          j
        |                     du sJ t          t          j        |                     du sJ dt           z  } t          t          j
        |                     du sJ t          t          j        |                     du sJ dt           z   t           z  } t          t          j
        |                     du sJ t          t          j        |                     du sJ t           t           dz   z  } t          t          j
        |                     du sJ t          t          j        |                     du sJ t           t           dz   z  } t          t          j
        |                     du sJ t          t          j        |                     du sJ t           dz  } t          t          j
        |                     du sJ t          t          j        |                     du sJ t           dz  } t          t          j
        |                     du sJ t          t          j        |                     du sJ dt           z  } t          t          j
        |                     du sJ t          t          j        |                     du sJ t           dz  } t          t          j
        |                     du sJ t          t          j        |                     du sJ d S )NTFrG   r   rl   r   r   )r   r   r   rI   rJ   rK   rp   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   s    rZ   test_Ir     s(
   	Aq}Q  D((((qy||%%%%qz!}}&&&&q{1~~$&&&&qvayy>>U""""qy||$$$$q|A5((((q{1~~$&&&&qz!}}&&&&qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~%''''qq!!""d****	AAq}Q  D((((qy||%%%%qz!}}&&&&q{1~~$&&&&qvayy>>U""""qy||$$$$q|A5((((q{1~~%''''qz!}}&&&&qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~%''''qq!!""e++++	1q5	Aq}Q  D((((qy||%%%%qz!}}&&&&q{1~~$&&&&qvayy>>U""""qy||$$$$q|A5((((q{1~~%''''qz!}}&&&&qz!}}&&&&qvayy>>U""""quQxx==E!!!!qx{{t####qwqzz??e####q{1~~%''''q{1~~%''''qq!!""e++++	AAq{1~~%''''qvayy>>T!!!!
q	Aq{1~~%''''qvayy>>T!!!!	
1
Aq{1~~%''''qvayy>>U""""	
aAq{1~~%''''qvayy>>T!!!!	q	Aq{1~~%''''qvayy>>T!!!!	
1
Aq{1~~%''''qvayy>>U""""	
ac
Aq{1~~$&&&&qvayy>>U""""	
ac
Aq{1~~%''''qvayy>>T!!!!	
aAq{1~~%''''qvayy>>T!!!!	
aAq{1~~$&&&&qvayy>>U""""	
aAq{1~~%''''qvayy>>U""""	
aAq{1~~%''''qvayy>>T!!!!!!r\   c                      t          d          \  } }}| |z   }|j        \  } }t          t          j        |          t          j        |                    J t          t          j        |                     J t          t          j        |           t          j        |                     du sJ t          t          j        |           t          j        |                    J t          t          j        |           t          j        |                     du sJ t          t          j        |           t          j        |                     J t          t          j        | dz                       J t          t          j        | dz             t          j        |                     du sJ | |z   }|j        \  } }t          t          j        |          t          j        |           t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |           z            du sJ t          t          j        |          t          j        |           t          j        |            z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |            z  t          j        |           z            du sJ t          t          j        |          t          j        |           t          j        |           z            du sJ t          t          j        |          t          j        |           t          j        |           z            du sJ t          t          j        |          t          j        |           t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |           z  t          j        |           z            du sJ t          t          j        |          t          j        |           t          j        |            z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |            z  t          j        |           z  t          j        |           z            du sJ t          t          j        |          t          j        |                     J t          t          j        |          t          j        |                     J t          t          j        |          t          j        |           t          j	        |          z            	 J t          t          j        |          t          j        |           t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |           z            J t          t          j        |          t          j        |           t          j        |            z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |            z  t          j        |           z            	 J t          t          j        |          t          j        |            t          j        |           z            J t          t          j        |          t          j        |           t          j        |           z            	 J t          t          j        |          t          j        |            t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |           z  t          j	        |           z            	 J t          t          j        |          t          j        |            t          j	        |            z  t          j        |          z            	 J t          t          j        |          t          j        |            t          j        |           z  t          j	        |            z  t          j	        |           z            du sJ t          t          j        |          t          j        |                     J t          t          j        |          t          j	        |           t          j        |           z            	 J t          t          j        |          t          j        |                    J t          t          j        |          t          j	        |           t          j        |          z            du sJ t          t          j        |          t          j	        |           t          j        |           z  t          j	        |           z            	 J t          t          j        |          t          j	        |            t          j        |          z            	 J t          t          j        |          t          j	        |            t          j        |           z  t          j	        |           z            du sJ t          t          j        |                    J t          t          j        |          t          j	        |                     J t          t          j        |          t          j	        |                    J t          t          j        |          t          j	        |           t          j	        |          z            	 J t          t          j        |          t          j	        |           t          j	        |           z            	 J t          t          j        |          t          j	        |            t          j	        |          z            	 J t          t          j        |          t          j	        |            t          j	        |           z            	 J t          d          \  } }}| |z   |z   }|j        \  } }}t          t          j        |          t          j
        |           t          j
        |          z  t          j
        |          z            du sJ t          t          j        |          t          j
        |           t          j
        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j
        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j
        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j
        |          z  t          j        |           z            du sJ t          t          j        |          t          j
        |           t          j
        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j
        |          z  t          j        |          z            	 J t          t          j        |          t          j
        |           t          j
        |          z            J t          t          j        |          t          j
        |           t          j
        |          z  t          j	        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |           z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z            J t          t          j        |          t          j
        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |           z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j
        |           t          j	        |          z  t          j        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |           z            	 J t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j
        |           t          j        |           z  t          j        |           z            	 J t          t          j        |          t          j
        |           t          j        |           z  t          j        |          z            	 J t          t          j        |          t          j
        |           t          j        |           z  t          j        |          z            	 J t          t          j        |          t          j
        |           t          j        |           z            J t          t          j        |          t          j
        |           t          j        |           z  t          j	        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z  t          j	        |          z            du sJ t          t          j        |          t          j
        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z            	 J t          t          j        |          t          j
        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j
        |                     J t          t          j        |          t          j
        |           t          j	        |          z            	 J t          t          j        |          t          j
        |           t          j	        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |           z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |           z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |           z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |           z  t          j        |           z            	 J t          t          j        |          t          j        |           t          j        |           z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |           z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |           z            J t          t          j        |          t          j        |           t          j        |           z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |                     J t          t          j        |          t          j        |           t          j	        |          z            	 J t          t          j        |          t          j        |           t          j	        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |           z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |           z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |           z  t          j        |           z            	 J t          t          j        |          t          j        |           t          j        |           z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |           z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |           z            J t          t          j        |          t          j        |           t          j        |           z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |                     J t          t          j        |          t          j        |           t          j	        |          z            	 J t          t          j        |          t          j        |           t          j	        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |           z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |           z  t          j        |           z            	 J t          t          j        |          t          j        |           t          j        |           z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |           z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |           z            	 J t          t          j        |          t          j        |           t          j        |           z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |                     J t          t          j        |          t          j        |           t          j	        |          z            	 J t          t          j        |          t          j        |           t          j	        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |            t          j        |           z  t          j        |           z            	 J t          t          j        |          t          j        |            t          j        |          z  t          j        |           z            	 J t          t          j        |          t          j        |            t          j        |           z  t          j        |          z            	 J t          t          j        |          t          j        |            t          j        |           z            J t          t          j        |          t          j        |            t          j        |           z  t          j	        |          z            	 J t          t          j        |          t          j        |            t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |            t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |            t          j        |          z            	 J t          t          j        |          t          j        |            t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |            t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |            t          j        |          z            	 J t          t          j        |          t          j        |            t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |                      J t          t          j        |          t          j        |            t          j	        |          z            	 J t          t          j        |          t          j        |            t          j	        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |                     J t          t          j        |          t          j        |           t          j	        |          z            	 J t          t          j        |          t          j        |           t          j	        |          z  t          j	        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |          z  t          j	        |          z            	 J t          t          j        |          t          j        |                     J t          t          j        |          t          j        |           t          j	        |          z            	 J t          t          j        |          t          j        |           t          j	        |          z  t          j	        |          z            	 J t          t          j        |                    J t          t          j        |          t          j	        |                    J t          t          j        |          t          j	        |          t          j	        |          z            	 J t          t          j        |          t          j	        |           t          j	        |          z  t          j	        |          z            	 J t          t          j        d| z                      J t          t          j        d| z            t          j        |                     du sJ t          d          \  } }}| |z  }|j        \  } }t          t          j        |          t          j        |           t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |           z            du sJ t          t          j        |          t          j        |                     J t          t          j        |          t          j        |            t          j        |          z            du sJ t          t          j        |          t          j        |            t          j        |           z            du sJ t          t          j        |          t          j        |                      J t          t          j        |          t          j        |                    J t          t          j        |          t          j        |                     J t          t          j        |                    J | |z  |z  }|j        \  } }}t          t          j        |          t          j        |           t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |          z  t          j        |           z            du sJ t          t          j        |          t          j        |           t          j        |          z            J t          t          j        |          t          j        |           t          j        |           z  t          j        |          z            du sJ t          t          j        |          t          j        |           t          j        |           z  t          j        |           z            du sJ t          t          j        |          t          j        |           t          j        |           z            J t          t          j        |          t          j        |           t          j        |          z            J t          t          j        |          t          j        |           t          j        |           z            J t          t          j        |          t          j        |                     J t          t          j        |          t          j        |            t          j        |          z  t          j        |          z            du sJ t          t          j        |          t          j        |            t          j        |          z  t          j        |           z            du sJ t          t          j        |          t          j        |            t          j        |          z            J t          t          j        |          t          j        |            t          j        |           z  t          j        |          z            du sJ t          t          j        |          t          j        |            t          j        |           z  t          j        |           z            du sJ t          t          j        |          t          j        |            t          j        |           z            J t          t          j        |          t          j        |            t          j        |          z            J t          t          j        |          t          j        |            t          j        |           z            J t          t          j        |          t          j        |                      J t          t          j        |          t          j        |          t          j        |          z            J t          t          j        |          t          j        |          t          j        |           z            J t          t          j        |          t          j        |                    J t          t          j        |          t          j        |           t          j        |          z            J t          t          j        |          t          j        |           t          j        |           z            J t          t          j        |          t          j        |                     J t          t          j        |          t          j        |                    J t          t          j        |          t          j        |                     J t          t          j        |          t          j        |           t          j        |           z  t          j        |          z  t          j        |          z            	 J t          t          j        |          t          j        |           t          j        |           z  t          j        |          z  t          j        |           z  t          j        |          z            du sJ t          d          \  } }}t          t          j        | dz                      J t          t          j        d| z                      J t          t          j        d| z            t          j        |                     du sJ t          t          j        | | z                      J t          t          j        t          j        | z                      J t          t          j        t          j        | z            t          j	        |                     du sJ t          t          j        t          j        | z            t          j        |                     J t          t          j        d| z            t          j        |                     du sJ t          t          j        t!          |                               J t          t          j        d| z            t          j        |                      du sJ t          t          j        | dz            t          j        |                      du sJ t          t          j        t#          |                               du sJ t          t          j        t#          |                     t          j        |                      du sJ t          t          j        t%          |                               J t          t          j        t%          |                     t          j        |                     J t          t          j        t%          |                     t          j        |                      du sJ t          t          j        t%          |                     t          j        |                     du sJ t          t          j        t%          |                     t          j        |                     du sJ t          t          j        t+          |                               J t          t          j        t+          |                     t          j        |                     du sJ t          t          j        t+          d                              du sJ t          t          j        t-          |                               du sJ t          t          j        t-          |                     t          j        |                      du sJ t          t          j        t/          |                               du sJ t          t          j        t/          |                     t          j        |                      du sJ t          t          j        dt-          |           z                      du sJ t          t          j        t-          |           dz                      du sJ t          t          j        t/          |           dz                      du sJ t          t          j        t/          |           t-          |           z                       du sJ d S )Nzx,y,zTrG   Fr   )r(   argsr   r   rT   rt   rM   rq   rP   rr   rQ   ru   rz   extended_nonzeror%   Halfr1   r.   r0   ri   rs   r/   r8   r6   )r   r   r   as       rZ   test_boundedr   `  sO   gGAq!	AA6DAqqx{{A/2233;;;qx{{###qx{{AHQKK((D0000qx{{AHQKK((000qx{{AIaLL))T1111qx{{AOA..//777qxA'''qxA,,4444	AA6DAqqx{{AHQKK!(1++566$>>>>qx{{AJqMMAHQKK788D@@@@qx{{AHQKK!*Q--788D@@@@qx{{AJqMMAJqMM9::dBBBBqx{{AJqMMAHQKK7:a==.  !" " " "qx{{AHQKK1:a==.8
*Q--   ! ! ! !qx{{AHQKK!(1++5AF:a==.  !" " " " qx{{AHQKK18A;;,6775@@@@qx{{AJqMMQXa[[L899UBBBBqx{{AHQKK

a
 
 ! " "%*+ + + +qx{{AJqMM

a
 
 ! " "%*+ + + +qx{{AJqMMQXa[[L8:a==.  "# # # #qx{{AHQKK1:a==.8

a
 
 ! " "%*+ + + +qx{{AHQKK1:a==.8AHQKK<G:a==.  "# # # # qx{{AHQKK((000qx{{AJqMM**222qx{{AHQKK

a
 
 ! " "%)* * *qx{{AJqMM

a
 
 ! " "%)* * *qx{{AJqMMQZ]]N:;;CCCqx{{AHQKK1:a==.8

a
 
 ! " "%)* * *qx{{AHQKK1:a==.8:a==.  !" " " qx{{QXa[[LAHQKK<788@@@qx{{A/228A;;,       qx{{QXa[[L

a
 
 ! " "%)* * *qx{{A/22

a
 
 ! " "%*+ + + +qx{{A/22ahqkk\Aq!!
!" # #&*+ + +qx{{QXa[[LA,?,B,B+BB

a
 
 ! " "%)* * *qx{{QXa[[LAHQKK<7q!!
!"%&%8%;%;$;< = =@EF F F F qx{{QXa[[L))111qx{{A/228A;;,       qx{{A/2233;;;qx{{A/22

a
 
 ! " "%*+ + + +qx{{A/228A;;,-a0001 2 259: : :qx{{Q0333

a
 
 ! " "%)* * *qx{{Q0333qx{{lBq!!
!" # #&+, , , , qx{{###qx{{A/2233;;;qx{{A/2233;;;qx{{A/22

a
 
 ! " "%)* * *qx{{A/22q!!
!" # #&*+ + +qx{{Q0333

a
 
 ! " "%)* * *qx{{Q0333q!!
!" # #&*+ + + gGAq!	A	AfGAq!qx{{AJqMMAJqMM9
*Q--   ! ! ! !qx{{AJqMMAJqMM9
(1++     qx{{AJqMMAJqMM9
*Q--   ! ! ! !qx{{AJqMMAJqMM9

a
 
 ! " "%*+ + + +qx{{AJqMMAJqMM98A;;,   ! ! ! !qx{{AJqMMAJqMM9

a
 
 ! " "%*+ + + +qx{{AJqMMAJqMM9

a
 
 ! " "%)* * *qx{{AJqMMAJqMM9::BBBqx{{AJqMMAJqMM9

a
 
 ! " "%)* * *qx{{AJqMMAHQKK7
(1++     qx{{AJqMMAHQKK7
*Q--   ! ! ! !qx{{AJqMMAHQKK7

a
 
 ! " "%*+ + + +qx{{AJqMMAHQKK78A;;,   ! ! ! !qx{{AJqMMAHQKK7

a
 
 ! " "%*+ + + +qx{{AJqMMAHQKK7

a
 
 ! " "%)* * *qx{{AJqMMAHQKK788@@@qx{{AJqMMAHQKK7

a
 
 ! " "%)* * *qx{{AJqMMAJqMM9
*Q--   ! ! ! !qx{{AJqMMAJqMM9

a
 
 ! " "%*+ + + +qx{{AJqMMAJqMM98A;;,   ! ! ! !qx{{AJqMMAJqMM9

a
 
 ! " "%*+ + + +qx{{AJqMMAJqMM9

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB
(1++    qx{{AJqMMAJqMM9

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%*+ + + +qx{{AJqMMA,?,B,BB8A;;,       qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%*+ + + +qx{{AJqMM

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{AJqMMQXa[[L88A;;,       qx{{AJqMMQXa[[L8

a
 
 ! " "%)* * *qx{{AJqMMQXa[[L8

a
 
 ! " "%)* * *qx{{AJqMMQXa[[L899AAAqx{{AJqMMQXa[[L8

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%*+ + + +qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{AJqMM	
	Q		  ! !$() ) )qx{{AJqMMA,?,B,BB

a
 
 ! " "%*+ + + +qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{AJqMM

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{AJqMM**222qx{{AJqMM

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{AHQKK!(1++5
(1++     qx{{AHQKK!(1++5
*Q--   ! ! ! !qx{{AHQKK!(1++5

a
 
 ! " "%*+ + + +qx{{AHQKK!(1++58A;;,   ! ! ! !qx{{AHQKK!(1++5

a
 
 ! " "%*+ + + +qx{{AHQKK!(1++5

a
 
 ! " "%)* * *qx{{AHQKK!(1++566>>>qx{{AHQKK!(1++5

a
 
 ! " "%)* * *qx{{AHQKK!*Q--7
*Q--   ! ! ! !qx{{AHQKK!*Q--7

a
 
 ! " "%*+ + + +qx{{AHQKK!*Q--78A;;,   ! ! ! !qx{{AHQKK!*Q--7

a
 
 ! " "%*+ + + +qx{{AHQKK!*Q--7

a
 
 ! " "%)* * *qx{{AHQKK!*Q--788@@@qx{{AHQKK!*Q--7

a
 
 ! " "%)* * *qx{{AHQKK!*=a*@*@@

a
 
 ! " "%*+ + + +qx{{AHQKK!*=a*@*@@8A;;,       qx{{AHQKK!*=a*@*@@

a
 
 ! " "%)* * *qx{{AHQKK!*=a*@*@@

a
 
 ! " "%*+ + + +qx{{AHQKK

a
 
 ! " "%)* * *qx{{AHQKK!*=a*@*@@

a
 
 ! " "%)* * *qx{{AHQKK18A;;,68A;;,       qx{{AHQKK18A;;,6

a
 
 ! " "%)* * *qx{{AHQKK18A;;,6

a
 
 ! " "%)* * *qx{{AHQKK18A;;,677???qx{{AHQKK18A;;,6

a
 
 ! " "%)* * *qx{{AHQKK!*=a*@*@@

a
 
 ! " "%*+ + + +qx{{AHQKK!*=a*@*@@

a
 
 ! " "%)* * *qx{{AHQKK

a
 
 ! " "%)* * *qx{{AHQKK!*=a*@*@@

a
 
 ! " "%*+ + + +qx{{AHQKK!*=a*@*@@

a
 
 ! " "%)* * *qx{{AHQKK

a
 
 ! " "%)* * *qx{{AHQKK!*=a*@*@@

a
 
 ! " "%)* * *qx{{AHQKK((000qx{{AHQKK

a
 
 ! " "%)* * *qx{{AHQKK!*=a*@*@@

a
 
 ! " "%)* * *qx{{AJqMMAJqMM9
*Q--   ! ! ! !qx{{AJqMMAJqMM9

a
 
 ! " "%*+ + + +qx{{AJqMMAJqMM98A;;,   ! ! ! !qx{{AJqMMAJqMM9

a
 
 ! " "%*+ + + +qx{{AJqMMAJqMM9

a
 
 ! " "%)* * *qx{{AJqMMAJqMM9::BBBqx{{AJqMMAJqMM9

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%*+ + + +qx{{AJqMMA,?,B,BB8A;;,       qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%*+ + + +qx{{AJqMM

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{AJqMMQXa[[L88A;;,       qx{{AJqMMQXa[[L8

a
 
 ! " "%)* * *qx{{AJqMMQXa[[L8

a
 
 ! " "%)* * *qx{{AJqMMQXa[[L899AAAqx{{AJqMMQXa[[L8

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%*+ + + +qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{AJqMM

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%*+ + + +qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{AJqMM

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{AJqMM**222qx{{AJqMM

a
 
 ! " "%)* * *qx{{AJqMMA,?,B,BB

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>CD D D Dqx{{A/22

a
 
 !$%HQKK<0 1 1489 9 9qx{{A/22

a
 
 !"#"5a"8"89 : :=AB B Bqx{{A/22

a
 
 !#$#6q#9#9: ; ;>CD D D Dqx{{A/22

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{A/228A;;,(1++& ' '*./ / /qx{{A/228A;;,,Q//0 1 1489 9 9qx{{A/228A;;,,Q//0 1 1489 9 9qx{{A/228A;;,       qx{{A/228A;;,,Q//0 1 1489 9 9qx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{A/22

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{A/22

a
 
 !#$#6q#9#9: ; ;>CD D D Dqx{{A/22

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{A/2233;;;qx{{A/22

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{QXa[[LAHQKK<78A;;,       qx{{QXa[[L1+>q+A+AA8A;;,       qx{{QXa[[LAHQKK<7

a
 
 ! " "%)* * *qx{{QXa[[LAHQKK<788@@@qx{{QXa[[LAHQKK<7

a
 
 ! " "%)* * *qx{{QXa[[L1+>q+A+AA

a
 
 ! " "%)* * *qx{{QXa[[L1+>q+A+AA

a
 
 ! " "%)* * *qx{{QXa[[L

a
 
 ! " "%)* * *qx{{QXa[[L1+>q+A+AA

a
 
 ! " "%)* * *qx{{QXa[[L1+>q+A+AA

a
 
 ! " "%)* * *qx{{QXa[[L

a
 
 ! " "%)* * *qx{{QXa[[L1+>q+A+AA

a
 
 ! " "%)* * *qx{{QXa[[L))111qx{{QXa[[L

a
 
 ! " "%)* * *qx{{QXa[[L1+>q+A+AA

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>CD D D Dqx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{A/22

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>CD D D Dqx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{A/22

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{A/2233;;;qx{{A/22

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>CD D D Dqx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{A/22

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{A/2233;;;qx{{A/22

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C Cqx{{###qx{{A/2233;;;qx{{A/22

a
 
 ! " "%)* * *qx{{A/22

a
 
 !#$#6q#9#9: ; ;>BC C C qx!}}%%%qx!}}ahqkk**d2222gGAq!	!A6DAqqx{{AHQKK!(1++566$>>>>qx{{AHQKK18A;;,6775@@@@qx{{AHQKK((000qx{{QXa[[L18A;;6775@@@@qx{{QXa[[LAHQKK<788EAAAAqx{{QXa[[L))111qx{{AHQKK((000qx{{QXa[[L))111qx{{###	!AAfGAq!qx{{AHQKK!(1++5
(1++     qx{{AHQKK!(1++58A;;,   ! ! ! !qx{{AHQKK!(1++566>>>qx{{AHQKK18A;;,6
(1++         qx{{AHQKK18A;;,68A;;,   ! ! ! !qx{{AHQKK18A;;,677???qx{{AHQKK!(1++566>>>qx{{AHQKK18A;;,677???qx{{AHQKK((000qx{{QXa[[L18A;;6
(1++         qx{{QXa[[L18A;;68A;;,   ! ! ! !qx{{QXa[[L18A;;677???qx{{QXa[[LAHQKK<7
(1++         qx{{QXa[[LAHQKK<78A;;,   ! ! ! !qx{{QXa[[LAHQKK<788@@@qx{{QXa[[L18A;;677???qx{{QXa[[LAHQKK<788@@@qx{{QXa[[L))111qx{{AHQKK!(1++566>>>qx{{AHQKK18A;;,677???qx{{AHQKK((000qx{{QXa[[L18A;;677???qx{{QXa[[LAHQKK<788@@@qx{{QXa[[L))111qx{{AHQKK((000qx{{QXa[[L))111qx{{QXa[[L1+=a+@+@@

Q

 "#"4Q"7"78 9 9<@A A Aqx{{A.q11QXa[[L@

Q

 #$8A;;,/

Q

  ! !$)* * * * gGAq!qx1~~&&&qx1~~&&&qx1~~qx{{++t3333qx1~~&&&qx!$$%%---qx!$$a&9!&<&<==EEEEqx!$$a&9!&<&<==EEEqx1~~q215566$>>>>qxQ  !!)))qx1~~|,,5555qx1~~|,,5555 qxQ  !!T))))qxQ  18A;;,//47777 qxA  (((qxA!--555qxA!&)),,4444qxAA//58888qxA++u4444qxA  (((qxA!--5555qxA  D(((( qxA  D((((qxA!(1++..$6666qxA  D((((qxA!(1++..$6666qx#a&&!!""d****qxA	""##t++++qxA	""##t++++qxAQ(())T111111r\   c                     t          t          j        t          t                    t          z                      du sJ t          t          j        t          t                    t          z                      du sJ dS )z4We need to support relations in ask for this to workTN)r   r   rT   r8   r   r6   rv   r\   rZ   test_bounded_xfailr   V  sd     qxA	""##t++++qxA	""##t++++++r\   c                     t          t          j        t                              du sJ t          t          j        t                    t          j        t                               du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                               du sJ t          t          j        dt          z                      du sJ t          t          j        dt          z            t          j        t                               du sJ t          t          j        t          dz                       du sJ t          t          j        t          dz             t          j        t                               du sJ t          t          j        t          dz                      du sJ t          t          j        t          dz            t          j        t                               du sJ t          t          j        t          t                                        du sJ dS )zdBy default objects are Q.commutative that is why it returns True
    for both key=True and key=FalseTFr   rG   N)
r   r   rI   r   rM   rO   rL   rP   r   r0   rv   r\   rZ   test_commutativer   ]  s    q}Q  D((((q}Q!-"2"2!233u<<<<q}Q1..$6666q}QQ00D8888q}Q++t3333q}QA//47777q}Q!-"2"2!233t;;;;q}QqS!!""d****q}QqS!!AM!$4$4#455>>>>q}QU##$$,,,,q}QU##amA&6&6%6775@@@@q}QT""##t++++q}QT""Q]1%5%5$566%????q}SVV$$%%------r\   c                     t          t          j        t                              J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                               du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                               J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j	        t                              du sJ t          t          j        t                    t          j
        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j	        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j	        t                    z            du sJ t          t          j        dt          z  dz             t          j        t                              du sJ t          t          j        dt          z  dz             t          j        t                              du sJ t          t          j        dt          z  dz             t          j        t                              du sJ t          t          j        dt          z  dz             t          j        t                              du sJ t          t          j        dt          z  dz             t          j        t                              du sJ t          t          j        dt          z  dz             t          j	        t                              du sJ t          t          j        dt          z  dz             t          j        t                              du sJ t          t          j        dt          z  dz             t          j        t                              du sJ t          t          j        dt          z  dz             t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j	        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j	        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t                                        du sJ t          t          j        t          dt          z  dz                                 du sJ t          t          j        t          t                                        du sJ t          t          j        t          dt          z  dz                                 du sJ t          t          j        t!          t                                        du sJ t          t          j        t!          t                                        du sJ t          t          j        t#          t                                        du sJ t          t          j        t%          t                                        du sJ t          t          j        t'          t                                        du sJ d S r   )r   r   rM   r   r   rL   rK   rN   rP   rO   rp   rJ   rR   rS   r8   r6   r/   r+   r-   r,   rv   r\   rZ   test_complexr   t  s
   qy||$$$qy||QYq\\**d2222qy||QYq\\**222qy||aill]++u4444qy||QVAYY''4////qy||afQiiZ((000qy||QZ]]++t3333qy||Q\!__--5555qy||QZ]]++t3333qy||Q[^^,,4444qy||Q[^^,,4444 qyQ1..$6666qyQ++t3333qyQA//47777qyQa11T9999qyQQ00D8888qyQ1..$6666qyQ++t3333qyQq**d2222qyQ1	!!<==EEEEqyQQ[^^!;<<DDDD qy1q!!19Q<<00D8888qy1q!!16!99--5555qy1q!!1:a==11T9999qy1q!!1:a==11T9999qy1q!!1<??33t;;;;qy1q!!1;q>>22d::::qy1q!!19Q<<00D8888qy1q!!16!99--5555qy1q!!1588,,4444 qyA	!--5555qyAq		**d2222qyA
1..$6666qyA
1..$6666qyAQ00D8888qyAA//47777qyA	!--5555qyAq		**d2222qyAa))T1111 qyA	!--5555qyAq		**d2222qyA
1..$6666qyA
1..$6666qyAQ00D8888qyAA//47777qyA	!--5555qyAq		**d2222qyAa))T1111qyA	!qy|| ;<<DDDD qyQ  !!T))))qyQqS1W&&''4////qyQ  !!T))))qyQqS1W&&''4//// qyQ  !!T))))qyQ  !!T)))) qyQ  !!T))))qyA  D((((qyA  D((((((r\   c                  ,#   t          t          j        t                              J t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                               du sJ t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                              J t          t          j        dt          z                      J t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                               J t          t          j        dt          z            t          j        t                              J t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        dt          z
            t          j        t                              du sJ t          t          j        dt          z             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        dt          z  dz             t          j        t                              du sJ t          t          j        dt          z  t          z            t          j        t                    t          j        t                    z            J t          t          j        dt          z  t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            du sJ t          t          j        t          t          z   t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z  t          j        t                    z            	 J t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                              t          j        t                               J t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                              t          j        t                               J t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                              t          j        t                              du sJ t          t          j        dt           z            t          j        t                               du sJ t          t          j        t"          dz            t          j        t"                              du sJ t          t          j        t           dz            t          j        t                               du sJ t          t          j        dt"          z            t          j        t"                              J t          t          j        t          dz                      J t          t          j        t"          t$          z            t          j        t"                    t          j        t$                    z  t          j        t$                     z            J t          t          j        t           t$          z            t          j        t                     t          j        t$                    z  t          j        t$                     z            du sJ t          t          j        t"          t(          z            t          j        t"                    t          j        t(                    z  t          j        t(                    z            du sJ t          t          j        t           t(          z            t          j        t                     t          j        t(                    z  t          j        t(                    z            du sJ t          t          j        t$          t"          z            t          j        t"                    t          j        t$                    z  t          j        t$                     z            J t          t          j        t(          t"          z            t          j        t"                    t          j        t(                    z  t          j        t(                    z            J t          t          j        t$          t           z            t          j        t                     t          j        t$                    z  t          j        t$                     z            J t          t          j        t(          t           z            t          j        t                     t          j        t(                    z  t          j        t(                    z            J t          t          j        t"          t          z            t          j        t"                              J t          t          j        t           t          z            t          j        t                               J t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                              J t          t          j        t          t          t          z   z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          t          z   z            t          j        t                    t          j        t                    z            J d S )NFr   Tr   rG      rl   )r   r   rR   r   rJ   rK   rP   rN   rS   r   r   r   r+   r-   r,   rL   r   r	   r
   rQ   r   rv   r\   rZ   test_even_queryr     s
   qvayy>>!!!qvayy!)A,,''///qvayy19Q<<-((E1111qvayy!*Q--((000qvayy!*Q--((000qvac{{###qvac{{AIaLL))T1111qvac{{AF1II&&$....qvac{{ALOO,,5555qvac{{AE!HH%%----qvac{{QYq\\M**222qvac{{AIaLL))111qvac{{AF1II&&$....qvac{{AE!HH%%....qva!e}}aeAhh''4////qva!e}}afQii((E1111qva!e}}aeAhh''50000qva!e}}afQii((D0000qva!e}}aeAhh''4////qva!e}}aeAhh''4////qva!e}}aeAhhq122d::::qva!e}}aeAhh233u<<<<qva!e}}afQii!&))344<<<<qvacAg	!--6666qvac!e}}ajmmajmm;<<DDDqvac!e}}al1ooQ?@@HHHqva!eai  !%((QU1XX"5q		"ABBdJJJJqva!eai!m$$	a1588afQii'!)A,,68 8;?@ @ @ qvc!ff~~qvayy))T1111qvc!ff~~q		z**222qvbee}}afQii((D0000qvbee}}qvayyj))111qvbee}}afQii((D0000qvbee}}afQii((D0000qvrAg	!--6666qvad||QVAYY''4////qvad||QU1XX&&%////qvad||QVAYY''///qvad||$$$qvad||QVAYY15AFGGOOOqvad||QU1XX	!4
1~EFF%OOOOqvad||QVAYY15
1EFF$NNNNqvad||QU1XX	!4qz!}}DEENNNNqvad||QVAYY15AFGGOOOqvad||QVAYY15
1EFFNNNqvad||QU1XX	!4
1~EFFNNNqvad||QU1XX	!4qz!}}DEEMMMqvad||QVAYY''///qvad||QU1XX&&...qvac{{AIaLL19Q<<788@@@qvac{{AIaLL))111qvaQi  !)A,,q"9::dBBBBqvaQi  !)A,,":;;CCCCCr\   c                  >   t          t          j        t          t          z  t          t
          z   z            t          j        t                    t          j        t                    z  t          j        t
                    z            du sJ t          t          j        t          t          z  t          t
          z   z            t          j        t                    t          j        t                    z  t          j        t
                    z            du sJ d S r   )r   r   rR   r   r   r   rJ   rS   rv   r\   rZ   1test_evenness_in_ternary_integer_product_with_oddr     s    
 qvac1q5k""AIaLL19Q<<$?!%(($JKKtSSSSqvac1q5k""AIaLL19Q<<$?!%(($JKKtSSSSSSr\   c                     t          t          j        t          t          z  t          t
          z   z            t          j        t                    t          j        t                    z  t          j        t
                    z            J d S N)r   r   rR   r   r   r   rJ   rv   r\   rZ   2test_evenness_in_ternary_integer_product_with_evenr     sV    qvac1q5k""AIaLL19Q<<$?!&))$KLLTTTTTr\   c                     t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                     t          j        t                              du sJ t          t          j        t                     t          j        t                              du sJ t          t          j        t          t          j
        z             t          j        t                              du sJ t          t          j        t                    t          j        t                              J d S r   )r   r   rq   r   rt   rP   ri   rQ   ru   r%   InfinityrL   rs   rv   r\   rZ   test_extended_realr     s   qq!!1#6q#9#9::dBBBBqq!!1:a==11T9999qq!!16!99--5555qq!!1:a==11T9999qq!!1#6q#9#9::dBBBBqr""AJqMM22d::::qr""AJqMM22d::::qq1:~..q		::dBBBBqq!!1:a==1199999r\   c            	      t   t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                              J t          t          j        t                    t          j	        t                              J t          t          j        t                    t          j
        t                               du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        t                    t          j
        t                               du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          t           t"          t$          t&          fD ]?} t          t          j         | d                              du sJ t          t          j         | dd                              du sJ t          t          j         | dd                              du sJ t          t          j         | t                              t          j        t                              J t          t          j         | t                              t          j        t                    t          j	        t                    z            du sJ At(          t*          fD ]B}t          t          j         |d                              du sJ t          t          j         |dd                              du sJ t          t          j         |dd                              du sJ t          t          j         |t                              t          j        t                              J t          t          j         |t                              t          j        t                    t          j	        t          dz
            z            du sJ Dt,          t.          fD ]}t          t          j         |d                              du sJ t          t          j         |dd                              du sJ t          t          j         |t                              t          j        t                              du sJ d S )NTFr   rG   r   evaluater   )r   r   rK   r   rJ   rN   rL   rP   rQ   rh   rp   rR   rS   r   r/   r8   r9   r4   r5   r6   r0   r2   r7   r3   fghs      rZ   test_rationalr   "  sN	   qz!}}aill++t3333qz!}}al1oo..%7777qz!}}afQii((000qz!}}ajmm,,444qz!}}ajmm,,444qz!}}aill++333qz!}}q{1~~o..%7777qz!A#
1..$6666qz!A#	!--5555qz!A#q		**d2222qz!A#a))T1111qz!A#Q00E9999qz!A#
1..$6666qz!A#	!--5555qz!A#q		**d2222qz!A#a))T1111qz!A#Q00E9999qz!A#
1..$6666qz!A#	!--5555qz!A#q		**d2222qz!A#a))T1111qz!A#Q00E9999qz!A#
1..$6666qz!A#	!--5555qz!A#q		**d2222qz!A#a))T1111qz!A#Q00E9999qz!}}q{1~~o..%7777 qz!A#Q!,q// ABBJJJqz!A#
1
1 =>>$FFFFqz!A#	!qz!}} <==EEEEqz!A#q		AJqMM 9::dBBBBqz!A#a1:a== 899TAAAAqz!A#Q!*Q-- ?@@EIIII3T4- L L1:aadd##$$----1:aaE2223344====1:aaE2223344<<<<1:aadd##QZ]]33;;;1:aadd##QZ]]QYq\\%ABBeKKKKK4[ P P1:aadd##$$----1:aaE2223344====1:aaE2223344<<<<1:aadd##QZ]]33;;;1:aadd##QZ]]QYq1u5E5E%EFF%OOOOO4[ = =1:aadd##$$----1:aaE2223344====1:aadd##QZ]]33u<<<<<= =r\   c                  3   t          t          j        t                              J t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t          dz             t          j        t                              J t          t          j        t          dz             t          j	        t                              J t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                              J t          t          j        t          t          z             t          j	        t                              J t          t          j        t          t          z             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                              J t          t          j        t          t          z             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            	 J t          t          j        t          t          z             t          j        t                    t          j	        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            	 J t          t          j        t          t          z             t          j        t                    t          j        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            J t          t          j        t          t          z             t          j        t                    t          j	        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j	        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j	        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j	        t                              J t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            du sJ t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            du sJ t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            	 J t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            	 J t          t          j        t                              J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j	        t                              J t          t          j        t          dz             t          j        t                              J t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              J t          t          j        t          t          z             t          j        t                              du sJ t          t          j        t          t          z             t          j	        t                              J t          t          j        t          t          z             t          j        t                              J t          t          j        t          t          z             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j	        t                    z            	 J t          t          j        t          t          z             t          j        t                    t          j        t                    z            	 J t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j	        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            	 J t          t          j        t          t          z             t          j        t                    t          j        t                    z            	 J t          t          j        t          t          z             t          j        t                    t          j        t                    z            J t          t          j        t          t          z             t          j        t                    t          j	        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j	        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j	        t                              J t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            	 J t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            	 J t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            du sJ t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            du sJ d S )NFTrG   )r   r   rW   r   rX   rO   rU   rL   ri   rM   r   r   r   rv   r\   rZ   test_hermitianr   b  sS   q{1~~&&&q{1~~qq1122:::q{1~~q{1~~..%7777q{1~~qwqzz**d2222q{1~~qvayy))T1111q{1~~qvayy))T1111q{1q5!!1?1#5#566>>>q{1q5!!19Q<<00888q{1q5!!1;q>>22d::::q{1q5!!1;q>>22e;;;;q{1q5!!16!99--5555q{1q5!!1?1#5#566>>>q{1q5!!19Q<<00888q{1q5!!1;q>>22e;;;;q{1q5!!1;q>>22:::q{1q5!!16!99--6666	AEAOA..1C1CCE EHLM M Mq{1q5!!1?1#5#5	!#DEEMMM	AEAOA..Q?A ADHI I Iq{1q5!!1?1#5#5A#FGGOOOq{1q5!!1?1#5#5q		#ABBJJJq{1q5!!1;q>>AIaLL#@AAIIIq{1q5!!1;q>>AKNN#BCCtKKKKq{1q5!!1;q>>AKNN#BCCuLLLLq{1q5!!1;q>>AF1II#=>>$FFFFq{1q5!!1;q>>AIaLL#@AAIIIq{1q5!!1;q>>AKNN#BCCKKKq{1q5!!1;q>>AF1II#=>>%GGGGq{1q5!!16!99qy||#;<<DDDq{1q5!!16!99qvayy#899TAAAAq{1Q3!3!344<<<<q{1Q31..666q{1Q3Q00E9999q{1Q3Q00D8888q{1Q3++u4444q{1Q3Q!&))!;<<DDDD	AEAIq		AF1II 5q		 AC CFJK K K Kq{1q519%%	q		AF1IIA.0 0389 9 9 9q{1q519%%	q		AKNN"Q[^^35 58<= = =q{1q519%%	AQ'!+a..8: :=AB B B qq!!""***qq!!16!99--6666qq!!171::..%7777qq1u%%qq'9'9::eCCCCqq1u%%qy||44<<<qq1u%%q{1~~66>>>qq1u%%q{1~~66%????qq1u%%qvayy11999qq1u%%qq'9'9::dBBBBqq1u%%qy||44<<<qq1u%%q{1~~66>>>qq1u%%q{1~~66$>>>>qq1u%%qvayy11U::::qq!!16!99--5555	A 2 2Q_Q5G5G G 	    	A 2 2QYq\\ AC CFJK K K	A 2 2Q[^^ CE EHLM M M	A 2 2Q[^^ CE EHLM M M Mqq1u%%qq'9'9AF1II'E 
 
   qq1u%%q{1~~	!'DEEMMMqq1u%%q{1~~A'F 
 
  	AAQ ?A ADHI I Iqq1u%%q{1~~q		'ABBJJJqq1u%%q{1~~	!'DEEMMMqq1u%%q{1~~A'FGG4OOOOqq1u%%q{1~~q		'ABBeKKKKqq1u%%qvayy19Q<<'?@@HHHqq1u%%qvayy16!99'<==EEEqqs##QVAYY//47777qqs##Q_Q%7%788EAAAAqqs##QYq\\22:::qqs##Q_Q%7%7!&))%CDDLLLLqq1uqy))	q		AF1IIq		)+ +.23 3 3qq1uqy))	q		AF1IIA.0 0378 8 8qq1uqy))	q		AKNN"Q[^^35 58=> > > >qq1uqy))	AQ'!+a..8: :=AB B B B B Br\   c                  n+   t          t          j        t                              J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            J t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            du sJ t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            	 J t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                              J t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j
        t                              J t          t          j        t          t          z            t          j        t                              J t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                              du sJ t          t          j        dt          z  t          z            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j
        t                    t          j        t                    z            J t          t          j        t          t          z            t          j
        t                    t          j        t                    z  t          j        t                     z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j
        t                    t          j        t                    z  t          j        dt          z            z            du sJ t          t          j        t          t          z            t          j
        t                    t          j        t                    z  t          j        dt          z             z            du sJ t          t          j        t          t          z            t          j
        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z  t          j        dt          z             z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z  t          j        dt          z            z            J t          t          j        t!          t                                        du sJ t          t          j        t!          dt          z                                du sJ t          t          j        t!          t          dz                                 du sJ t          t          j        t!          t                              t          j        t                              J t          t          j        t!          t                              t          j        t                              J t          t          j        t!          t                              t          j        t                              du sJ t          t          j        t!          t#          t                                        t          j        t                              J t          t          j        t!          t#          t                                        t          j        t                              J t          t          j        t!          t#          t                                                  du sJ t          t          j        t#          t                    t          z            t          j        t                              du sJ t%          t#          t&          t          z  t          z  d          t          d          } t          t          j        |           t          j        t                              du sJ t%          t#          t&          t          z  t          z  dz  d          t          d          } t          t          j        |           t          j        t                              du sJ t          t          j        t#          dt          z  t&          z  t          z            t          z            t          j        t                              du sJ t          t          j        t#          dt&          z  t          z  d                              du sJ t          t          j        t#          t&          t          z  dz  d                              du sJ t          t          j        t%          t          t)          dd                              t          j        t                    t          j
        t                    z            du sJ d S )	NFrG   Tr   r   r   r   r   )r   r   rO   r   rL   rU   r   r   rM   r   rQ   rP   rR   rS   rJ   rK   r0   r/   r&   r$   r!   eqs    rZ   test_imaginaryr     s   q{1~~&&&q{1~~qvayy))U2222q{1~~qwqzz**e3333q{1q5!!16!99--6666q{1q5!!1;q>>22e;;;;q{1q5!!16!99--6666q{1q5!!1;q>>22d::::q{1q5!!1;q>>AKNN#BCCtKKKKq{1q5!!16!99qvayy#899UBBBBq{1q5!!1;q>>AF1II#=>>%GGGGq{1q5!!19Q<<!&))#;<<DDD	AEAIq		AF1II 5q		 AC CFKL L L Lq{1q519%%	q		AF1IIA.0 0378 8 8q{1q519%%	q		AKNN"Q[^^35 58=> > > > q{1Q3++t3333q{1Q3Q00E9999q{1Q31..666q{1Q3Q!&))!;<<DDDDq{1Q3QVAYY!6775@@@@q{1a4  !*Q--00888q{1a4  !*Q--00888q{1a4  !&)),,5555q{1a4  !%((++t3333q{1a4  !+a..11U::::q{AaC!8$$ak!nn55>>>>q{1a4  !+a..11U::::q{1a4  !+a..1;q>>"ABBJJJq{1a4  !+a..16!99"<==EEEq{1a4  !&))ak!nn"<==EEEq{1a4  !&))afQii"788@@@q{1a4  !+a..19Q<<"?@@HHHq{1a4  !+a..19Q<<"?@@HHHq{1a4  !+a..1588";<<DDDDq{1a4  !+a..1:a=="@AAIIIq{1a4  !+a..16!99"<==FFFFq{1a4  !&))aill":;;uDDDDq{1a4  !*Q--!&))";<<EEEEq{1a4  !*Q--!&))";<<DDDq{1a4  !*Q--!&))";qz!}}n"LMMQVVVVVq{1a4  !)A,,Q"?@@HHHq{1a4  !*Q--!*Q--"?!)AaC.."PQQUYYYYYq{1a4  !*Q--!*Q--"?19QqS>>/"QRRV[[[[[q{1a4  !*Q--!*Q--"?@@HHHq{1a4  !&))ajmm";qy1~~o"MNNRWWWWWq{1a4  !&))ajmm";ai!nn"LMMUUU q{3q66""##t++++q{3qs88$$%%....q{3q1u::&&''50000q{3q66""AIaLL11999q{3q66""AKNN33;;;q{3q66""AJqMM22e;;;;q{3s1vv;;''166>>>q{3s1vv;;''Q88@@@q{3s1vv;;''((D0000 q{3q6619%%q{1~~66%????	SAa%(((!e	<	<	<Bq{2q		**e3333	SAaE***A	>	>	>Bq{2a))T1111q{3qs2vax==!+,,aill;;uDDDDq{3qtAv6667788EAAAAq{3r!tAv6667788D@@@@ q{3q(1a..1122AF1II
14MNNRWWWWWWWr\   c                  .	   t          t          j        t                              J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                               du sJ t          t          j        t                    t          j        t                               du sJ t          t          j        t                    t          j        t                               J t          t          j        t                    t          j        t                    t          j        t                    z            du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j	        t                              J t          t          j        dt          z            t          j        t                              J t          t          j        t          d          t          z            t          j        t                              du sJ t          t          j        t          d          t          z            t          j        t                              J t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              J t          t          j        t          dz            t          j        t                              J d S )NTFr   r   )r   r   rJ   r   rL   rP   rR   rS   rU   rK   r1   rN   rv   r\   rZ   test_integerr     s   qy||$$$qy||QYq\\**d2222qy||aill]++u4444qy||afQiiZ((E1111qy||ajmm^,,444qy||QVAYYq122d::::qy1~~qy||,,4444qy1~~qvayy))T1111qy1~~qwqzz**d2222qy1~~qz!}}--555qy1~~qvayy))111qya##QYq\\22e;;;;qya##Q\!__55===qy1~~quQxx((E1111qy1~~qvayy))T1111qy1~~quQxx((000qy1~~qvayy))11111r\   c            
      8   t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                               du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                               J t          t          j        t                     t          j        t                              du sJ t          t          j        t                     t          j        t                               J t          t          j        t                     t          j        t                              du sJ t          t          j        t                     t          j        t                              du sJ t          t          j        t          dz
            t          j        t                              du sJ t          t          j        t          t          z                       J t          t          j        t          t          z             t          j        t                              J t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        dt          z                       du sJ t          t          j        t          t                    dz  t          t                    dz  z   dz
                      J t          t          j        t           t          t          d          dz  t          d          dz  z   z  z                       J t          t          j        t          dz                      J t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              J t          t          j        t          t          z            t          j        t                              J t          t          j        t          t          z                      J t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z                      J t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t!          t                                        du sJ d S )NTFrG   r   gffffff?)r   r   rQ   r   rP   rL   rU   r   nonpositiver   r6   r8   rM   rR   rS   rJ   r+   rv   r\   rZ   test_negativer   1  s   qz!}}ajmm,,4444qz!}}ajmm,,5555qz!}}qvayyj))U2222qz!}}agajj))U2222qz!}}qwqzzk**222qz1"~~qz!}}--5555qz1"~~
1~..666qz1"~~qz!}}--6666qz1"~~qz!}}--5555qz!a%  !*Q--00D8888qz!a%  !!)))qz!a%  !*Q--00888qz!a%  !*Q--!*Q--"?@@DHHHHqz!a%  !*Q--!-2B2B"BCCtKKKKqz!a%  !!U**** qz#a&&!)c!ffai/!34455===qz1"q#a&&!)c!ffai"78899::BBBqz!Q$  (((qz!Q$++u4444qz!S&!!16!99--555qz!Q$A//777qz!A#'''qz!A#
1
1 =>>%GGGGqz!A#
1
1 =>>$FFFFqz!A#	!qy|| ;<<DDDqz!Q$  (((qz!Q$A!:;;uDDDDqz!Q$Aq!9::dBBBBqz!Q$A1!=>>%GGGGqz#a&&!!""e++++++r\   c            
      
   t          t          j        t                              J t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z                       J t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        dt          z                      J t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                              J t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t                                        J t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t          dt          z                                          du sJ t          t          j        t          d          dz  t          d          dz  z   dz
                      J d S )NTr   FrG   )r   r   rh   r   rL   rP   rQ   r   r+   r0   r/   r   r6   r8   rv   r\   rZ   test_nonzeror   [  s   qy||$$$qy||QVAYY''///qy||QZ]]++t3333qy||QZ]]++t3333qy||QZ]]QZ]]:;;tCCCCqyQ  (((qyQAA!>??4GGGGqyQAA!>??GGGqyQAA!>??4GGGGqy1~~&&&qy1~~qz!}}--5555qy1~~qz!}}--5555qy1~~qy||,,444qy1~~qy||aill:;;tCCCCqyA	!--5555qyQ  !!)))qyQ  !)A,,//47777qyS1XX''((E1111 qyQSVVQY.23344<<<<<r\   c                  \   t          t          j        t                              J t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                    t          j        t                    z            du sJ t          t          j        t                    t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z                       J t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        dt          z                      J t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        t          t          z            t          j
        t                              J t          t          j        t          t                                        J t          t          j        t          t                              t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                    z  t          j        t          t          z                      du sJ d S )NFTr   )r   r   ri   r   rL   rP   rQ   nonnegativer   r   rh   r+   rJ   rR   rS   rv   r\   rZ   	test_zeror   x  s   qvayy>>!!!qvayy!&))$$,,,qvayy!*Q--((E1111qvayy!*Q--((E1111qvayy!*Q--!*Q--788EAAAAqvayy!-**Q]1-=-==>>$FFFFqva!e}}%%%qva!e}}ajmmajmm;<<EEEEqva!e}}ajmmajmm;<<DDDqva!e}}ajmmajmm;<<EEEEqvac{{###qvac{{AJqMM**e3333qvac{{AJqMM**e3333qvac{{AIaLL))111qvc!ff~~&&&qvc!ff~~qvayy))T1111qy||QVAYY''4////qvayy!&))$$,,,,quQxx##u,,,,qvayy!&))$$,,,qvayy!%((##u,,,,qvayy16!99$afQqSkk22d::::::r\   c                  %   t          t          j        t                              J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                               du sJ t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                              J t          t          j        t                     t          j        t                              du sJ t          t          j        dt          z                      J t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z            t          j        t                               J t          t          j        dt          z            t          j        t                              J t          t          j        t          dz            t          j        t                              J t          t          j        t          dz            t          j        t                              J t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        dt          z
            t          j        t                              du sJ t          t          j        dt          z
            t          j        t                              du sJ t          t          j        dt          z             t          j        t                              du sJ t          t          j        dt          z             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z
            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z
            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z            du sJ t          t          j        t          t          z   t          z   t          z             t          j        t                    t          j        t                    z  t          j        t                    z  t          j        t                    z            	 J t          t          j        dt          z  dz             t          j        t                              du sJ t          t          j        dt          z  t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        dt          z  t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        dt          z  t          z             t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        dt          z  t          z            t          j        t                    t          j        t                    z            J t          t          j        dt          z  t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t                              t          j        t                              du sJ t          t          j        dt          z            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        dt          z            t          j        t                              J t          t          j        t          t          z            t          j        t                    t          j        t                    z  t          j        t                     z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z  t          j        t                     z            du sJ t          t          j        t          t"          z            t          j        t                    t          j        t"                    z  t          j        t"                    z            du sJ t          t          j        t          t"          z            t          j        t                    t          j        t"                    z  t          j        t"                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z  t          j        t                     z            J t          t          j        t"          t          z            t          j        t                    t          j        t"                    z  t          j        t"                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z  t          j        t                     z            J t          t          j        t"          t          z            t          j        t                    t          j        t"                    z  t          j        t"                    z            J t          t          j        t          t          z            t          j        t                              J t          t          j        t          t          z            t          j        t                              J t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                              J t          t          j        t          t          t          z   z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          t          z   z            t          j        t                    t          j        t                    z            J d S )NTFr   r   rG   rl   )r   r   rS   r   rJ   rK   rP   rN   rR   r   r   r   r+   r   r	   r
   rQ   r   rv   r\   rZ   test_odd_queryr     s   quQxx==   quQxxq""d****quQxx1&&...quQxx!)A,,''50000quQxxA''///quQxxA''///quaRyy!%((##t++++quQqSzz??"""quQqSzz19Q<<((E1111quQqSzz1588$$----quQqSzz1<??++u4444quQqSzzAIaLL=))111quQqSzz19Q<<((000quQqSzz1588$$,,,quQqSzz16!99%%---quQU||QVAYY''4////quQU||QVAYY''50000quQU||QU1XX&&$....quQU||QU1XX&&%////quQU||QVAYY''4////quQU||QU1XX&&%////quQU||QVAYY''4////quQU||QU1XXa011U::::quQU||QU1XXq		122d::::quQU||QVAYYq122d::::quQU||QU1XXa011U::::quQUQYqAE!HH!4qvayy!@AAUJJJJquQUQY]##	a1588afQii'!)A,,68 8;?@ @ @ quQqS1W~~qy||,,4444quQqS1W~~qy||aeAhh6774????quQqS1W~~qy||afQii788EAAAAquQqS1W~~qy||aill:;;CCCquQqSzz1588afQii/00E9999quQqSzz1588aeAhh.//47777quQqSU||QZ]]QZ]]:;;CCCquQqSU||Q\!__q|A>??GGGquSVV}}aeAhh''4////qub1W~~qy||,,4444quQT{{AF1II&&%////quQT{{AE!HH%%----quQT{{AF1II&&...quQT{{AF1II	!4
1~EFFNNNquQT{{AE!HHqy||3qz!}}nDEEMMMMquQT{{AF1II	!4qz!}}DEENNNNquQT{{AE!HHqy||3ajmmCDDLLLLquQT{{AF1II	!4
1~EFFNNNquQT{{AF1II	!4qz!}}DEEMMMquQT{{AE!HHqy||3qz!}}nDEEMMMquQT{{AE!HHqy||3ajmmCDDLLLquQT{{AF1II&&...quQT{{AE!HH%%---quQqSzz19Q<<!)A,,677???quQqSzz19Q<<((000quQAY1a!899UBBBBquQAY1q		!9::BBBBBr\   c                  >   t          t          j        t          t          z  t          t
          z   z            t          j        t                    t          j        t                    z  t          j        t
                    z            du sJ t          t          j        t          t          z  t          t
          z   z            t          j        t                    t          j        t                    z  t          j        t
                    z            du sJ d S NF)r   r   rS   r   r   r   rJ   rv   r\   rZ   0test_oddness_in_ternary_integer_product_with_oddr     s    
 quQqS!a%[!!19Q<<!)A,,#>q#IJJeSSSSquQqS!a%[!!19Q<<!)A,,#>q#IJJeSSSSSSr\   c                     t          t          j        t          t          z  t          t
          z   z            t          j        t                    t          j        t                    z  t          j        t
                    z            J d S r   )r   r   rS   r   r   r   rJ   rR   rv   r\   rZ   1test_oddness_in_ternary_integer_product_with_evenr     sV    quQqS!a%[!!19Q<<!)A,,#>#JKKSSSSSr\   c                     t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                               du sJ t          t          j        t                    t          j        t                              J t          t          j        t                    t          j        t                               du sJ t          t          j        dt          z            t          j        t                              J t          t          j        t          t
          z                      J t          t          j        t          t
          z            t          j        t                              J t          t          j        t          t
          z            t          j        t                    t          j        t
                    z            J t          t          j        dt          z            t          j        t                              du sJ t          t          j        dt          z                      J t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          t
          z            t          j        t                    t          j        t
                    z            du sJ d S )NTFr   r   )r   r   rU   r   rJ   r   rv   r\   rZ   
test_primer     sG   qwqzz171::&&$....qwqzzAGAJJ;''50000qwqzz19Q<<((000qwqzzAIaLL=))U2222qwqs||QYq\\**222qwqs||$$$qwqs||QWQZZ((000qwqs||QYq\\AIaLL899AAAqwqs||QYq\\**e3333qwqs||$$$qwq!t}}aill++u4444qwq!t}}agajj))U2222qwq!t}}aillQYq\\9::eCCCCCCr\   c            
         t          t          j        t          t                    dz  t          t                    dz  z   dz
                      J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              J t          t          j        t                     t          j        t                              du sJ t          t          j        t                     t          j        t                              du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j
        t                    z            du sJ t          t          j        t          t          z             t          j        t                    t          j        t                    z            J t          t          j        t          t          z             t          j        t                    t          j        t                    z            du sJ t          t          j        dt          z            t          j        t                              du sJ t          j        t                    t          j        t                    z  t          j        t                    z  t          j        t                    z  } t          t          j        t          t          z  t          z                      J t          t          j        t          t          z  t          z            |           du sJ t          t          j        t           t          z  t          z            |           du sJ t          t          j        t          t          z            t          j        t                              J t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        t          dz            t          j        t                              du sJ t          t          j        ddt          dz  z   z            t          j        t                              du sJ t          t          j        dt          z                      du sJ t          t          j        dt          z                       du sJ t          t          j        t          t                    dz  t          t                    dz  z   dz
                      J t          t          j        t           t          t          d          dz  t          d          dz  z   z  z                       J t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                               t          j        t                              du sJ t          t          j        t          t          t                    z             t          j        t                              J t          t          j        t          t                              t          j        t                              J t          t          j        t          dt           z  t          z  d                    t          j        t                              du sJ t          t          j        t          t           t          z  d                    t          j        t                              du sJ t          t          j        t          t          t           z  t          z                      t          j        t                              du sJ t          t          j        t          t          t           z  t          z                      t          j        t                              du sJ t          t          j        t          t          t           z  t          z                      t          j        t                              J t          t          j        t'          t                              t          j        t                              du sJ t          t          j        t'          t                              t          j        t                              du sJ t          t          j        t'          t                              t          j        t                              J t          t          j        t'          t          dz                       t          j        t                              du sJ t          t          j        t)          t                              t          j        t                    t          j        t                    z            sJ t          t          j        t)          t                              t          j        t                              J t          t          j        t-          t                                        J t          t          j        t-          t                              t          j        t                              du sJ d S )Nr   rG   TFr   r   )r   r   rP   r6   r   r8   r   rQ   rh   r   r   rO   r   r   rL   r/   r$   rR   rS   r0   r*   rJ   r+   assumptionss    rZ   test_positiver     sC   qz#a&&A+A!3a78899AAAqz!}}ajmm,,4444qz!}}ajmm,,5555qz!}}aill++333qz1"~~qz!}}--6666qz1"~~qz!}}--5555qz!a%  !*Q--!*Q--"?@@DHHHHqz!a%  !*Q--!-2B2B"BCCtKKKKqz!a%  !*Q--!*Q--"?@@HHHqz!a%  !*Q--!+a.."@AAUJJJJqz!A#
1..$6666*Q--!*Q--/!*Q--?!*Q--OKqz!A#a%  !!)))qz!A#a%  +..$6666qz1"Q$q&!!;//58888qz!Q$A//777qz!Q$A//47777qz!Q$A//47777qz!Q$A//58888qz!QAX,''33t;;;;qz!Q$  E))))qz!a%  !!U**** qz#a&&!)c!ffai/!34455===qz1"q#a&&!)c!ffai"78899::BBB qz#a&&!!16!99--5555
3q66"""AF1II..$6666qz!c!ff*%%qvayy11999qz#a&&!!1;q>>22:::qz#ad1fu55566AGG4OOOOqz#bdU33344ak!nnEEMMMMqz#ad1f++&&q		22d::::qz#ad1f++&&a11U::::qz#ad1f++&&q		22::: qz#a&&!!1;q>>22e;;;;qz#a&&!!1:a==11U::::qz#a&&!!1:a==11999qz#a!e**%%qz!}}55==== qz)A,,''1
1)EFFFFFqz)A,,''166>>> qz#a&&!!""***qz#a&&!!1:a==11T999999r\   c                     t          t          j        d                    sJ t          t          j        d                    sJ t          t          j        d                    du sJ t          t          j        t                     t          j        t                              sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t          d                              du sJ t          t          j        t                    t          j        t                              du sJ d S )Nrl   r   rG   F)r   r   r   rP   r   r1   rO   rv   r\   rZ   test_nonpositiver   ;  s   q}R  !!!!!q}Q     q}Q  E))))
1~q}Q//00000q}QA//58888q}T"XX&&''50000q}QQ00E999999r\   c                     t          t          j        d                    du sJ t          t          j        d                    sJ t          t          j        d                    sJ t          t          j        t                     t          j        t                              sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t          d                              du sJ t          t          j        t                    t          j        t                              du sJ d S )Nrl   Fr   rG   )r   r   r   rQ   r   r1   rO   rv   r\   rZ   test_nonnegativer   E  s   q}R  !!U****q}Q     q}Q     
1~q}Q//00000q}QA//58888q}T"XX&&''50000q}QQ00E999999r\   c                  *	   t          t          j        t                              J t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j	        t                              du sJ t          t          j        t          t          d          z            t          j        t                              du sJ t          t          j        t          t          d          z            t          j        t                              du sJ t          t          j        t          dz             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                              du sJ t          t          j        t          t          z             t          j        t                              J t          t          j        dt          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                              du sJ t          t          j        t          t          z            t          j        t                              J d S )NTr   FrG   )r   r   rL   r   rh   rP   rQ   rJ   rR   rU   r1   r   rM   rO   rv   r\   rZ   test_real_basicr   N  s   qvayy>>!!!qvayy!&))$$,,,,qvayy!)A,,''4////qvayy!*Q--((D0000qvayy!*Q--((D0000qvayy!)A,,''4////qvayy!&))$$,,,,qvayy!'!**%%----qvaQi  !&)),,4444qvaRj!!16!99--6666qva!e}}afQii((D0000qva!e}}afQii((E1111qva!e}}aill++333qvac{{AF1II&&$....qvac{{AF1II&&%////qvac{{AKNN++t3333qvac{{AIaLL))11111r\   c            	         t          t          j        t          dz            t          j        t                              du sJ t          t          j        t	          t                              t          j        t                              du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j	        t                    t          j	        t                    z            J t          t          j        t          t          z            t          j	        t                    t          j        t                    z            J t          t          j        t          t          z            t          j        t                    t          j	        t                    z            J t          t          j        t          dz            t          j	        t                              du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j        t                    t          j
        t                    z            J t          t          j        t          t          z            t          j	        t                    t          j        t                    z            J t          t          j        t          t          z            t          j	        t                    t          j        t                    z            du sJ t          t          j        t          t          z            t          j	        t                    t          j        t                    z            du sJ t          t          j        t          t          t          z  z            t          j        t                    t          j        t          t          z            z  t          j
        t          t          z            z  t          j        t                    z  t          j        t                    z            du sJ t          t          j        t          t          t          z  z            t          j        t                    t          j
        t          t          z            z  t          j        t                    z  t          j        t                    z            du sJ t          t          j        t          t          t          z  z            t          j        t                    t          j        t          t          z            z            du sJ t          t          j        t          t          t          z  z            t          j        t                    t          j        t          t          z            z  t          j        t                    z            du sJ t          t          j        t          t          t          z  z            t          j        t                    t          j        t          t          z            z  t          j        t                    z            du sJ t          t          j        t           t          z            t          j	        t                              du sJ t          t          j        t          t          z            t          j	        t                              du sJ t          t          j        t          t          z            t          j	        t                              J t          t          j        t          t          z            t          j	        t                              J t          t          j        t          t          t           z  t#          t                    z  z            t          j        t                              du sJ d S )Nr   TFr   )r   r   rL   r   r1   rQ   r   rJ   rP   rO   rK   rS   rR   r   r   r   r$   r0   rv   r\   rZ   test_real_powr   e  s   qvad||QVAYY''4////qvd1gg
1..%7777qvad||QVAYY1566$>>>>qvad||QVAYY233;;;qvad||QZ]]QVAYY6774????qvad||Q[^^ak!nn<==EEEqvad||Q[^^afQii788@@@qvad||QVAYYQ788@@@qvad||Q[^^,,4444qvad||QVAYY1566$>>>>qvad||QZ]]QVAYY6774????qvad||QVAYYA677???qvad||Q[^^aill:;;CCCqvad||Q[^^aeAhh6775@@@@qvad||Q[^^afQii788D@@@@qva!A#hQVAaC[[!81:ac??!JQVTUYY!VYZYcdeYfYf!fggkoooooqva!A#hQZ!__!<qvayy!H1:VW==!XYY]bbbbbqva!A#hQYqs^^!;<<DDDDqva!A#hQVAaC[[!81:a==!HIITQQQQqva!A#hQVAaC[[!81:a==!HIIURRRRqvrAgA//47777qvad||Q[^^,,4444qvad||Q[^^,,444qvad||Q[^^,,444qva!B$s1vv+&''33t;;;;;;r\   c            	      ~   t          t          j        t          t                                        J t          t          j        t          t                                        J t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                                        J t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t          t                    z             t          j        t                              du sJ t          t          j        t          dt          z  t          z  d                              du sJ t          t          j        t          t          t          z  d                              du sJ t          t          j        t          t          t          z  dz  d                              du sJ t          t          j        t          t                                        du sJ t          t          j        t          dt          z                                du sJ t          t          j        t          t          dz                                 du sJ t          t          j        t          t                              t          j
        t                              J t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t          t                                        t          j        t                              J t          t          j        t          t          t                                        t          j
        t                              J t          t          dt          z  t          z  t          z  d          t          d          } t          t          j        |           t          j        t                              du sJ t          t          j        t          t                    t          z            t          j        t                              du sJ t          t          j        t          t                    t          z            t          j
        t                              J t          t          j        t          t                                        du sJ t          t          j        t          t                                        du sJ d S )NTr   Fr   rG   )r   r   rL   r8   r   r6   r/   r$   r   r0   rM   rO   r&   rJ   r-   r,   r   s    rZ   test_real_functionsr     s9    qvc!ff~~&&&qvc!ff~~&&&qvc!ff~~qvayy))T1111qvc!ff~~qvayy))T1111 qvc!ff~~&&&qvc!ff~~qvayy))T1111qva#a&&j!!16!99--5555qvc!B$q&51112233t;;;;qvc"Q$///0011T9999qvc"Q$q&51112233u<<<< qvc!ff~~%''''qvc!A#hh  E))))qvc!a%jj!!""e++++qvc!ff~~qy||,,444qvc!ff~~q{1~~..%7777qvc#a&&kk""AKNN33;;;qvc#a&&kk""AIaLL11999	S2aE***A	>	>	>Bqvbzz19Q<<((D0000qvc!ffai  !+a..11T9999qvc!ffai  !)A,,//777 qvbee}}%%%%qvbee}}%%%%%%r\   c                     t          t          j        t          ddt          z   dgdt          z
  dt          gdt           dgg                              dk    sJ t          t          j        t          ddt          z   dgdt          z   dt          gdt           dgg                              dk    sJ t          dd          } t          t          j        t          ddt          z   | gdt          z
  dt          gdt           dgg                              d k    sJ t          t          j        t          d	                              dk    sJ t          t          j        t          d
dt          dfdf                              dk    sJ t          t          j        t          d
d| dfdf                              d k    sJ t          ddt          z
  dgdt          z
  dt           gdt           dgg          }t          t           dt          z   dgdt          z   ddt          z   gddt          z   t           gg          }t          t          j        |                    du sJ t          t          j        |                    du sJ t          t          j        |dz                      du sJ |dz  }|                                 t          t          j        |                    du sJ t          ddt          z
  dg| dt           gdt           dgg          }t          t          j        |                    J d S )Nr   r   r   rG   TFr   rM   )      r   )r      r   r   r   r^   r   r   r   r   r   )	r   r   rW   r?   r   r(   r@   rX   simplify)r   ABC_As        rZ   test_matrixr     s	    q{6Aq1ua=1q5!Q-!aR"LMMNNOOSWWWWWq{6Aq1ua=1q5!Q-!aR"LMMNNOOSXXXXXT"""Aq{6Aq1ua=1q5!Q-!aR"LMMNNOOSWWWWWq{<(PQQRRSSW[[[[[q{<Aqz;(OPPQQRRV[[[[[q{<Aqz;(OPPQQRRVZZZZZ 	BFAQA2QB
;<<A!QUAaAE 2QQODEEAqq!!""d****qq!!""d****qq!t$$%%....	
AAJJLLLqq!!""d****	!R!VQ!Qa!QZ8	9	9Bqr""##+++++r\   c                     t          t          j        t                              J t          t          j        t                              du sJ t          t          j        dt          z                      du sJ t          t          j        t          dz                      du sJ t          t          j        t          d                              du sJ t          t          j        dt          d          z                      du sJ t          t          j        t          d          dz                      du sJ t          t          j        t          t          d          z                      du sJ t          t          j        t          dt          t          d          z  z                                 du sJ t          t          j        dt          t          d          t          dd          z  z  z                       du sJ t          t          j        dt          t          d          dt          z  z  z  z                       du sJ t          t          t          t          t          t          fD ]?} t          t          j         | d                              du sJ t          t          j         | dd	                              du sJ t          t          j         | d
d	                              du sJ t          t          j         | t                              t          j        t                              J t          t          j         | t                              t          j        t                    t          j        t                    z            du sJ At          t           fD ]B}t          t          j         |d                              du sJ t          t          j         |dd	                              du sJ t          t          j         |dd	                              du sJ t          t          j         |t                              t          j        t                              J t          t          j         |t                              t          j        t                    t          j        t          dz
            z            du sJ Dt"          t$          fD ]}t          t          j         |d                              du sJ t          t          j         |dd	                              du sJ t          t          j         |t                              t          j        t                              du sJ t          t          j        t          t          d                                        du sJ t          t          j        t          t&          t          t          d          z  z                                 J t          t          j        d                    du sJ t          t          j        t                    t          j        t                              du sJ t          t          j        t                    t          j        t                              du sJ d S )NTr   r   r   rG         Fr   r   g(\@)r   r   rp   r   r   r1   r!   r$   r/   r8   r9   r4   r5   r6   rh   r0   r2   r7   r3   r   transcendentalr   s      rZ   test_algebraicr     s   q{1~~&&&q{1~~$&&&&q{1Q3  D((((q{1Q3  D((((q{477##$$,,,,q{1T!WW9%%&&$....q{47719%%&&$....q{1T!WW9%%&&$....q{4Ad1ggI..//00D8888q{1qa(2r*:*:!:::;;<<DDDDq{1qa2b5!1112233u<<<<3T4- N N1;qqtt$$%%....1;qqU3334455>>>>1;qqU3334455====1;qqtt$$ak!nn55===1;qqtt$$ak!nnqy||&CDDMMMMM4[ R R1;qqtt$$%%....1;qqU3334455>>>>1;qqU3334455====1;qqtt$$ak!nn55===1;qqtt$$ak!nnqyQ7G7G&GHHEQQQQQ4[ ? ?1;qqtt$$%%....1;qqU3334455>>>>1;qqtt$$ak!nn55>>>>>q{4A<<(())U2222q{4Ad1ggI..//00888q{4  !!T))))q{1~~q/2233u<<<<q""AKNN33u<<<<<<r\   c                  v   t          t          j        t                              J t	          j        t          j        t                               t          t          j        t                              du sJ t	          j                     t          t          j        t                              J dS )z Test ask with global assumptionsNT)r   r   rJ   r   r   addclearrv   r\   rZ   test_globalr     s    qy||$$$19Q<<(((qy||$$$$qy||$$$$$r\   c                  r   t          t          j        t                              J t	                      } |                     t          j        t                               t          t          j        t                    |           du sJ t          t          j        t                              J dS )z(Test ask with custom assumptions contextN)contextT)r   r   rJ   r   r   r   )local_contexts    rZ   test_custom_contextr     s    qy||$$$&((Maill###qy||]333t;;;;qy||$$$$$r\   c            	      Z   t          t          j        t                    t          j        t                    t          j        t                    z	            du sJ t          t          j        t                    t          t          j        t                    t          j        t                                        du sJ t          t          j        t                    t          t          j        t                    t          j        t                                        du sJ d S r   )r   r   rQ   r   rL   rP   r:   r<   rv   r\   rZ   test_functions_in_assumptionsr     s    qz!}}afQii1:a==899UBBBBqz!}}jAJqMMBBCCuLLLLqz!}}c!&))QZ]];;<<EEEEEEr\   c                      t          t          j        t                    t          j        t                    z  t          j        t                    t          j        t                    z	            du sJ d S )Nr   F)r   r   rQ   r   rJ   rL   rP   rv   r\   rZ   test_composite_askr    sd    qz!}}qy||+F1IIA.0 0 0389 9 9 9 9 9r\   c                  	   t          d          du sJ t          d          du sJ t          t          j        t                     t          j        t                              du sJ t          t          j        t                     t          j        t                              J t          t          j        t                    t          j        t                    z  t          j        t                              du sJ t          t          j        t                    t          j        t                    z            J t          t          j        t                    t          j        t                    z  t          j        t                              du sJ t          t          j        t                    t          j        t                    z            J t          t          j        t                    t          j        t                    z	  t          j        t                              du sJ t          t          t          j        t                    t          j        t                    d          t          j        t                              du sJ t          t          t          j        t                    t          j        t                    d                    J t          t          t          j        t                    t          j
        t                              t          j
        t                              du sJ t          t          t          j        t                    t          j
        t                                        J t          t          t          j        t                    t          j        t                              t          j        t                              J t          t          j        t                    t          j        t                    z  t          j        t                    t          j        t                    z            du sJ d S )NTFr   )r   r   rQ   r   rP   rL   rI   rJ   r;   r:   rR   rv   r\   rZ   test_composite_propositionr    s   t99u::
1~qz!}}--5555q		z1=++,,444qz!}}qy||+QZ]];;uDDDDqz!}}qy||+,,444qvayy19Q<<'A774????qvayy19Q<<'((000qvayyAJqMM)1:a==99UBBBBw	q		1:a==52 2 234:a==B BEJK K K Kwqvayy!*Q--%@@@AAIIIz!)A,,q		22AF1II>>$FFFFz!)A,,q		2233;;;z!*Q--166	!EEMMMqvayy19Q<<'QYq\\)ABBdJJJJJJr\   c                     t          t          j        t                    t          j        t                     z            du sJ t          t          j        t                    t          j        t                     z            du sJ d S ro   )r   r   rL   r   rv   r\   rZ   test_tautologyr    sh    qvayyAF1II:%&&$....qvayyAF1II:%&&%//////r\   c                     t          t          j        t                    t          j        t                    t          j        t                    z            du sJ t          t          j        t                    t          j        t                    t          j        t                    z            J t          t          j        t                    t          j        t                    t          j        t                    z	            J t          t          j        t                    t          j        t                    t          j        t                    z	             du sJ d S r   )r   r   rL   r   r   rP   rv   r\   rZ   test_composite_assumptionsr    s    qvayy!&))afQii/00D8888qz!}}ajmmajmm;<<DDDqz!}}afQii1:a==899AAAqvayyAF1II2344<<<<<<r\   c                     t          t          d             G d dt                    } 	 t                      5  t	          d|            ddd           n# 1 swxY w Y   t                      5  t          t          j        t                              du sJ 	 ddd           n# 1 swxY w Y   t                      5  t          t          j        t          dz                       J 	 ddd           n# 1 swxY w Y   t                      5  t          d|            ddd           n# 1 swxY w Y   t          `nB# t                      5  t          d|            ddd           n# 1 swxY w Y   t          `w xY wt          t          d             G d	 d
t                    }	  |            t          _        t          j                            t                    d             }t          t          j        t                              du sJ t          t          j        t          dz                       J 	 t          `n# t          `w xY wt          t          d            dS )z7test that you can add keys to the ask system at runtimec                  N    t          t          j        t                              S r   r   r   my_keyr   rv   r\   rZ   <lambda>z(test_key_extensibility.<locals>.<lambda>%      3qx{{#3#3 r\   c                   $    e Zd Zed             ZdS ),test_key_extensibility.<locals>.MyAskHandlerc                     dS r   rv   exprr   s     rZ   r)   z3test_key_extensibility.<locals>.MyAskHandler.Symbol)      4r\   N)__name__
__module____qualname__staticmethodr)   rv   r\   rZ   MyAskHandlerr  (  s-        		 	 
	 	 	r\   r  r  NTrG   c                  N    t          t          j        t                              S r   r  rv   r\   rZ   r  z(test_key_extensibility.<locals>.<lambda>9  r  r\   c                       e Zd ZdS )+test_key_extensibility.<locals>.MyPredicateNr  r  r  rv   r\   rZ   MyPredicater  <          r\   r  c                     dS r   rv   r  s     rZ   _z!test_key_extensibility.<locals>._@  r  r\   c                  N    t          t          j        t                              S r   r  rv   r\   rZ   r  z(test_key_extensibility.<locals>.<lambda>G  r  r\   )rC   AttributeErrorr   rD   r   r   r   r  r   r   r   registerr)   )r  r  r!  s      rZ   test_key_extensibilityr%  "  s    >33444    z   #%% 	5 	5X|444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5#%% 	, 	,qx{{##t+++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,#%% 	0 	0qxA''////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0
 $%% 	3 	38\222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3HH $%% 	3 	38\222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3H
>33444    i   ;==	
		6	"	"	 	 
#	"	18A;;4''''18AaC==!!))))HHAH
>3344444s   E A
E AE AE /+B'E 'B++E .B+/E  ,C9-E 9C==E  C=E D//D36D3FE."F.E22F5E26F.BI 	Ic                      ddl m}   G d d|           }t          j                            |          d             }t          t          j         |                                du sJ dS )zBtest that new types can be added to the ask system at runtime
    r   )Basicc                       e Zd ZdS )'test_type_extensibility.<locals>.MyTypeNr  rv   r\   rZ   MyTyper)  O  r  r\   r*  c                     dS r   rv   r  s     rZ   r!  z"test_type_extensibility.<locals>._R  s    tr\   TN)
sympy.corer'  r   rU   r$  r   )r'  r*  r!  s      rZ   test_type_extensibilityr-  J  s     !             Wf   qwvvxx  !!T))))))r\   c                      t          t          t          j        t          j                  t          t          j        t          j                  t          t          j        t          j                            } t          j        t          j        t          j        t          j        h}t          |           }t          ||          }|t          j                 t          j        t          j        t          j        hk    sJ d S r   )	r=   r;   r   rJ   rK   rL   rM   r>   r   )known_factsknown_facts_keysknown_facts_cnfmappings       rZ   test_single_fact_lookupr3  Y  s    gai44aj!&11afai002 2K 	1:qvqyA[))O !1?CCG1:161:qy"AAAAAAAr\   c                  ,   t          t          t          j        t                    t          j        t                              t          t          j        t                    t          j        t                              t          t          j        t                    t          j        t                                        } t          j        t                    t          j        t                    t          j        t                    t          j        t                    h}t          ||           t          j        t          j        ht                      ft          j        t          j        t          j        t          j        t          j        ht                      ft          j        t          j        t          j        t          j        ht                      ft          j        t          j        t          j        ht                      fik    sJ d S r   )
r=   r;   r   rJ   r   rK   rL   rM   r   set)r/  r0  s     rZ   test_generate_known_facts_dictr6  e  s4   gaillAJqMM::ajmmQVAYY77afQii1668 8K 	!ajmmQVAYY	!M$%5{CC	
ai[#%%(	
aiAJ?G	
qy!*af5suu=	
19af%suu-	// / / / / /r\   c                  t   t          d          t                    } t          j        |           }t	                      }|                    d |j        D                        t                      |k    sJ fdt                      D             }t          ||           }t                      |k    sJ dS )z)"Test that ask_generated.py is up-to-dater   c              3   p   K   | ]1}t          d  t          |t                    D                       V  2dS )c              3   T   K   | ]#}t          |j        j        |j                  V  $d S r   )r   argfunctionis_Not).0lits     rZ   	<genexpr>z8test_known_facts_consistent.<locals>.<genexpr>.<genexpr>z  s3      bbsWSW%5szBBbbbbbbr\   )keyN)	frozensetsortedstr)r=  cls     rZ   r?  z.test_known_facts_consistent.<locals>.<genexpr>z  sI      yygi9bbfUW]`NaNaNabbbbbyyyyyyr\   c                 &    g | ]} |          S rv   rv   )r=  predr   s     rZ   
<listcomp>z/test_known_facts_consistent.<locals>.<listcomp>}  s!    777DDGG777r\   N)r)   r   r   to_CNFr5  updateclausesr   r   r   r   )factcnfrJ  keysr2  r   s        @rZ   test_known_facts_consistentrN  r  s     	sA1D
*T

CeeGNNyympmxyyyyyy  G++++7777 4 6 6777D'd33G!!W,,,,,,r\   c            
      v   t          t          j        dt          d          dz  t	          d          dz  z   z                       du sJ t          t          j        t          t          d          t          d          d                              du sJ t          t          j        t          t          d          t          d          d                              du sJ t          t          j        t          t          d          t          d          d                              du sJ d S )Nl   
>V3&Z
 rG   r   Tr   r   F)	r   r   rU   r6   r8   rR   r   r%   rJ   rv   r\   rZ   test_Add_queriesrP    s   qw+s1vvqy3q6619/DEFFGG4OOOOqvc!A$$!q1112233t;;;;qws1Q4412223344====qyQqTT1Q44!4445566$>>>>>>r\   c                      t          t          j        t          dz                       5  t	          t          j        t                              rJ 	 d d d            d S # 1 swxY w Y   d S )NrG   )r   r   rP   r   r   rv   r\   rZ   test_positive_assumingrR    s    	!*QU##	$	$ & &qz!}}%%%%%%& & & & & & & & & & & & & & & & & &s   )A!!A%(A%c                  2    t          t          d            d S )Nc                  j    t          t          t          t                    z  t          j                  S r   )r   r$   r0   r   r   rL   rv   r\   rZ   r  z!test_issue_5421.<locals>.<lambda>  s    c"SVV)QV44 r\   rC   	TypeErrorrv   r\   rZ   test_issue_5421rW    s    
94455555r\   c                  2    t          t          d            d S )Nc                  4    t          t          j                  S r   )r   r   rP   rv   r\   rZ   r  z!test_issue_3906.<locals>.<lambda>  s    c!*oo r\   rU  rv   r\   rZ   test_issue_3906rZ    s    
9--.....r\   c                  L   t          t          j        t          t                    dz            t          j        t                              J t          t          j        t          t                    dz             t          j        t                              du sJ d S )Nr   T)r   r   rP   r0   r   rQ   rv   r\   rZ   test_issue_5833r\    st    qz#a&&!)$$ajmm44<<<
3q6619%%%qz!}}55======r\   c                  ^    t          t          d            t          t          d            d S )Nc                      t          t          j        t                    t          j        t                    t          j        t                    z            S r   )r   r   rP   r   rQ   rv   r\   rZ   r  z!test_issue_6732.<locals>.<lambda>  -    s1:a==!*Q--!*Q--2OPP r\   c                      t          t          j        t                    t          j        t                    t          j        t                    z            S r   )r   r   rQ   r   rP   rv   r\   rZ   r  z!test_issue_6732.<locals>.<lambda>  r_  r\   )rC   
ValueErrorrv   r\   rZ   test_issue_6732rb    s0    
:PPQQQ
:PPQQQQQr\   c            
      
   t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                                        J t          t          j        t          t                              t          j        t                              J t          t          j        t          t                              t          j        t                              J t          t          j        t          t          dd                                        du sJ t          t          j        t          t                              t          j        t                    t          j
        t          dz
            z            du sJ t          t          j        t          t                              t          j        t                    t          j        t          dz             z            du sJ t          t          j        t          t                              t          j        t                              J t          t          j        t          t          dd                                        du sJ t          t          j        t          t                              t          j        t          dz             t          j
        t          dz
            z            du sJ t          t          j        t          t                              t          j        t          dz
                      J t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                              t          j        t                              du sJ t          t          j        t          t                                        J d S )NTFrG   r   )r   r   rP   r5   r   rQ   ri   r   r4   r!   r   r   r2   r3   rL   rO   rv   r\   rZ   test_issue_7246rd    s   qz$q''""AJqMM22d::::qz$q''""AJqMM22e;;;;qz$q''""AF1II..%7777qz$q''""##+++qz$q''""AJqMM22:::qz$q''""AF1II..666qz$x1~~..//00D8888qz$q''""AJqMMAM!a%4H4H$HIITQQQQqz$q''""AJqMMAM!a%4H4H$HIIURRRRqz$q''""AJqMM22:::qz$x1~~..//00D8888qz$q''""AM!a%$8$81=Q;O;O$OPPTXXXXXqz$q''""AM!a%$8$899AAAqz$q''""AJqMM22d::::qz$q''""AF1II..$6666qz$q''""AKNN33u<<<<qz$q''""##+++++r\   c                      t          t          j        t          t                              t          j        t                              du sJ d S r   )r   r   rP   r2   r   ri   rv   r\   rZ   test_issue_7246_failingrf    s=     qz$q''""AF1II..$666666r\   c                     t          dd          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j        |                     J t          t          j        |                     du sJ t          dd          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j        |                     du sJ t          dd	          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          dd
          } t          t          j        |                     du sJ t          t          j        |                     J t          t          j	        |                     J t          dd          } t          t          j
        |                     du sJ t          dd          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j        |                     du sJ t          t          j	        |                     du sJ t          dd          } t          t          j	        |                     du sJ t          dd          } t          t          j        |                     du sJ t          dd          } t          t          j        |                     du sJ t          t          j        |                     du sJ t          dd          } t          t          j        |                     du sJ t          t          j        |                     du sJ d S )Nr   T)rL   F)rO   r   )rP   )rI   )rQ   )r   )rT   )rU   )rV   )rR   )rS   )rh   )ri   rJ   )rK   )rN   )r(   r   r   rL   rO   rM   rP   rQ   rI   ri   rT   rU   rV   rR   rS   rh   rJ   rK   rN   )r   s    rZ   test_check_old_assumptionri    su   $Aqvayy>>T!!!!q{1~~%''''qy||$$$$t$$$Aqvayy>>U""""q{1~~$&&&&qy||$$$$T"""Aqvayy>>!!!qy||$$$$d###Aqz!}}%%%%qz!}}&&&&qvayy>>T!!!!'''Aq}Q  E))))d###Aqz!}}&&&&qz!}}%%%%&&&Aqz!}}&&&&qz!}}%%%qvayy>>!!!D!!!Aqx{{t####4   Aqwqzz??d""""q{1~~%''''t$$$Aqwqzz??e####q{1~~$&&&&$Aqvayy>>T!!!!quQxx==E!!!!Aqvayy>>U""""quQxx==D    T"""Aqy||$$$$qvayy>>U""""$Aqvayy>>T!!!!T"""Aqy||$$$$d###Aqz!}}%%%%q|A5((((%%%Aq|A4''''qz!}}&&&&&&r\   c                  d   t          t          j        d                    J t          t          j        d                    J t          t          j        d                    J t          t          j        d                    J t          t          j        d                    J d S )Nrd   g      @g      @g       @)r   r   rJ   rU   rV   rR   rS   rv   r\   rZ   test_issue_9636rk  	  s    qy~~&&&qws||$$$q{3  (((qvc{{###quSzz??"""""r\   c                  b   t          t          j        dt          z                      J t          t          j        dt           z                      J t          t          j        dt          z                      J t          t          j        dt           z                      J d S Nr   )r   r   rO   r   rL   rv   r\   rZ   test_autosimp_used_to_failrn  	  s    q{1a4  !!)))q{1r7##$$,,,qvad||$$$qva1"g'''''r\   c                  &   ddl m  G fddt                    } 	 t                      5  t	          d|            d d d            n# 1 swxY w Y   t          dd          }t                      5  t          t          j        d	                    sJ 	 d d d            n# 1 swxY w Y   t                      5  t          t          j        |          t          j        |                    sJ 	 d d d            n# 1 swxY w Y   t          `n# t          `w xY w G d
 dt                    }	  |            t          _        t          j        
                    t                    d             }t          j        
                    t
                    fd            }t          t          j        d	                    sJ t          t          j        |          t          j        |                    sJ 	 t          `d S # t          `w xY w)Nr   	conjunctsc                   @    e Zd Zed             Ze fd            ZdS )/test_custom_AskHandler.<locals>.MersenneHandlerc                 n    t          t          j        t          | dz   d                              rdS d S NrG   r   Tr   r   rJ   r0   r  s     rZ   r    z7test_custom_AskHandler.<locals>.MersenneHandler.Integer	  9    19S1--..// t r\   c                 &    |  |          v rdS d S r   rv   r  r   rq  s     rZ   r)   z6test_custom_AskHandler.<locals>.MersenneHandler.Symbol	  %    yy----t .-r\   N)r  r  r  r  r    r)   rp  s   rZ   MersenneHandlerrs  	  sS        		 	 
	 
	 	 	 	 
	 	 	r\   r{  mersenner   Trh  r   c                       e Zd ZdS )1test_custom_AskHandler.<locals>.MersennePredicateNr  rv   r\   rZ   MersennePredicater~  -	  r  r\   r  c                 n    t          t          j        t          | dz   d                              rdS d S ru  rv  r  s     rZ   r!  z!test_custom_AskHandler.<locals>._1	  rw  r\   c                 &    |  |          v rdS d S r   rv   ry  s     rZ   r!  z!test_custom_AskHandler.<locals>._5	  rz  r\   )sympy.logic.boolalgrq  r   rD   r   r)   r   r   r|  r   r$  r    )r{  r   r  r!  rq  s       @rZ   test_custom_AskHandlerr  	  s   ------      *   	#%% 	: 	:Z999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:3%%%#%% 	& 	&qz!}}%%%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&#%% 	5 	5qz!}}ajmm444444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 JJAJ    I   &&((
	
		W	%	%	 	 
&	%	 
		V	$	$	 	 	 	 
%	$	 1:a==!!!!!1:a==!*Q--000000JJJAJs   D A	D 	AD A"D 3$B$D $B((D +B(,D =7D5D DD D	D 	D4C	H 	Hc                      G d dt                     } 	  |             t          _        t          j                            t          t                    d             }t          j                            t          t          t                    d             }t          t          j        dd                    sJ t          t          j        ddd	                    sJ 	 t          `d S # t          `w xY w)
Nc                       e Zd ZdS ).test_polyadic_predicate.<locals>.SexyPredicateNr  rv   r\   rZ   SexyPredicater  A	  r  r\   r  c                     t          | |g          }t          fd|D                       sdS |d         |d         z
  dk    S )Nc              3   \   K   | ]&}t          t          j        |                    V  'd S r   r   r   rU   r=  r   r   s     rZ   r?  z5test_polyadic_predicate.<locals>._.<locals>.<genexpr>I	  5      BBs171::{33BBBBBBr\   FrG   r      rB  all)int1int2r   r   s     ` rZ   r!  z"test_polyadic_predicate.<locals>._F	  sV    4,''DBBBBTBBBBB u7T!W$))r\   c                     t          | ||g          }t          fd|D                       sdS |d         |d         z
  dk    o|d         |d         z
  dk    S )Nc              3   \   K   | ]&}t          t          j        |                    V  'd S r   r  r  s     rZ   r?  z5test_polyadic_predicate.<locals>._.<locals>.<genexpr>P	  r  r\   Fr   rG   r  r   r  )r  r  int3r   r   s      ` rZ   r!  z"test_polyadic_predicate.<locals>._M	  sp    4t,--DBBBBTBBBBB u7T!W$)Dd1gQ.?1.DDr\   r   r^   r         )r   r   	sexyprimer$  r    r   )r  r!  s     rZ   test_polyadic_predicater  ?	  s        	   #moo	
		gw	/	/	* 	* 
0	/	* 
		gw	8	8	E 	E 
9	8	E 1;q"%%&&&&&1;q"b))******KKKAKs   C	C( (	C1c                      t          d          j        J  G d dt                     }  | t          d                    } | t          d                    }|j        |j        u sJ d S )Nmypredicatec                       e Zd ZdS )5test_Predicate_handler_is_unique.<locals>.MyPredicateNr  rv   r\   rZ   r  r  `	  r  r\   r  mp1mp2)r   handlerr'   )r  r  r  s      rZ    test_Predicate_handler_is_uniquer  Z	  s     ]##+333    i   
+c%jj
!
!C
+c%jj
!
!C;#+%%%%%%r\   c                     t          t          j        t          d          t          j        t                              sJ t          t          j        t          d          t          j        t                              rJ t          t          j        t          d          t          j        t                              rJ t          t          j        t          d          t          j        t                              sJ d S rm  )r   r   r   r   ri   rh   nerv   r\   rZ   test_relationalr  g	  s    qtAqzz16!99%%%%%141::qy||,,,,,141::qvayy)))))qtAqzz19Q<<(((((((r\   c                     t          t          j        t                    t          j        t                    t          j        t          t                    z            J t          t          j        t                    t          j        t                    dt          k    z            J t          t          j        t                    t          j        t                    t          j        dt                    z            J d S rm  )r   r   r   r   rp   rP   r   gtrv   r\   rZ   test_issue_25221r  n	  s    q""AKNNQZ!__$DEEMMMq""AKNNa!e$<==EEEq""AKNNQT!AYY$>??GGGGGr\   )	sympy.abcr   r   r   r   r   r   r	   r
   r   r   sympy.assumptionsr   r   r   r   r   sympy.assumptions.assumer   r   r   sympy.assumptions.cnfr   r   sympy.assumptions.factsr   r   r   r   sympy.assumptions.handlersr   sympy.assumptions.ask_generatedr   r   sympy.core.addr   sympy.core.numbersr   r    r!   r"   r#   r$   sympy.core.singletonr%   sympy.core.powerr&   sympy.core.symbolr'   r(   r)   (sympy.functions.combinatorial.factorialsr*   $sympy.functions.elementary.complexesr+   r,   r-   r.   &sympy.functions.elementary.exponentialr/   r0   (sympy.functions.elementary.miscellaneousr1   (sympy.functions.elementary.trigonometricr2   r3   r4   r5   r6   r7   r8   r9   r  r:   r;   r<   r=   r>   sympy.matricesr?   r@   sympy.testing.pytestrA   rB   rC   rD   rE   re   r[   r_   rb   rf   rj   rm   rw   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r%  r-  r3  r6  rN  rP  rR  rW  rZ  r\  rb  rd  rf  ri  rk  rn  r  r  r  r  r  rv   r\   rZ   <module>r     sC   2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2              L L L L L L L L L L . . . . . . . .F F F F F F F F F F F F 1 1 1 1 1 1              B B B B B B B B B B B B B B B B " " " " " "             2 2 2 2 2 2 2 2 2 2 > > > > > > D D D D D D D D D D D D = = = = = = = = 9 9 9 9 9 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 E E E E E E E E E E E E E E / / / / / / / /              , , ,(, , ,(, , ,(&, &, &,R+ + +*, , ,,1 1 121 1 142 2 24- - -0-& -& -&`, , ,(^, ^, ^,B, , ,*, , ,*, , ,*h" h" h"Ts2 s2 s2l , , ,. . .. H) H) H)VCD CD CDL T T TU U U: : : <= <= <=~fB fB fBR LX LX LX^2 2 2,', ', ',T= = =:; ; ;<GC GC GCT T T TT T TD D D$ 8: 8: 8:v: : :: : :2 2 2.< < <8 & & &B, , ,0 *= *= *=Z% % %% % %F F F9 9 9
K K K$0 0 0= = =%5 %5 %5P* * *	B 	B 	B
/ 
/ 
/ - - -? ? ?& & &
6 6 6/ / /> > >
R R R
, , ,. 7 7 7C' C' C'L# # #( ( (( ( (V  6
& 
& 
&) ) )H H H H Hr\   