
    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] Zy)^    )
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                  H   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 y )N   TFr   r   commutativeintegerrationalrealcomplex
irrational	imaginarypositivenegativeevenoddfiniteprime	composite	hermitianantihermitianr   s    W/var/www/openai/venv/lib/python3.12/site-packages/sympy/assumptions/tests/test_query.py
test_int_1r[      s   	Aq}}Q D(((qyy|$$$qzz!}%%%qvvay>T!!!qyy|$$$q||A5(((q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=D   qxx{t###qwwqz?e###q{{1~%'''q{{1~$&&&qq!"e+++    c                  H   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 y )N   TFrH   rY   s    rZ   test_int_11r_   1   s   
Aq}}Q D(((qyy|$$$qzz!}%%%qvvay>T!!!qyy|$$$q||A5(((q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=D   qxx{t###qwwqz?d"""q{{1~%'''q{{1~$&&&qq!"e+++r\   c                  H   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 y )N   TFrH   rY   s    rZ   test_int_12rb   E   s   
Aq}}Q D(((qyy|$$$qzz!}%%%qvvay>T!!!qyy|$$$q||A5(((q{{1~%'''qzz!}%%%qzz!}&&&qvvay>T!!!quuQx=E!!!qxx{t###qwwqz?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 y )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   sv   Aq}}Q D(((qyy|$$$qzz!}%%%qvvay>T!!!qyy|$$$q||A'''q{{1~%'''qzz!}%%%qzz!}&&&qvvay>!!!quuQx=   qxx{t###qwwqz?"""q{{1~&&&q{{1~$&&&qq!"e+++Aq}}Q D(((qyy|%%%qzz!}%%%qvvay>T!!!qyy|$$$q||A'''q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~$&&&qq!"e+++ qzz$''"#+++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 y )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qyy|%%%qvvay>T!!!q}}Q D(((qyy|$$$qzz!}%%%qvvay>T!!!qyy|$$$q{{1~%'''qzz!}&&&qzz!}&&&qvvay>T!!!quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~$&&&qq!"d***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 t        t        j(                  |             du sJ y )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qyy|$$$qvvay>U"""q}}Q D(((qyy|$$$qzz!}%%%qvvay>T!!!qyy|$$$q||A5(((q{{1~%'''qzz!}&&&qzz!}%%%qvvay>U"""quuQx=D   qxx{t###qwwqz?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        j0                  t                    du sJ y 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)))qyy}&&&qzz"~%'''q{{25(((qvvbz?e###qr"#t+++qyy}&&&q||B E)))q{{25(((qzz"~%'''q""2&'4///qzz"~%'''qvvbz?e###quuRy>U"""qxx|%%%qzz"~$&&&qwwr{u$$$q{{25(((q{{25(((qr"#u,,,q""2&'4///q""2&'5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        j0                  |             du sJ t        t        j2                  t(                     du sJ t        t        j4                  t(                     du sJ y 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|      sm   	
		Bq}}R !T)))qyy}&&&qzz"~%'''q{{25(((qvvbz?e###qr"#t+++qyy}&&&q||B E)))q{{25(((qzz"~%'''qzz"~%'''q""2&'4///qvvbz?e###quuRy>U"""qxx|%%%qzz"~$&&&qwwr{u$$$q{{25(((q{{25(((qr"#u,,,q""B3'(E111q""B3'(D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        j0                  t                    du sJ t        t        j2                  t                    du sJ y 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***qyy~%'''qzz#5(((q{{3 E)))qvvc{u$$$qs#$---qyy~%'''q||C !U***q{{3 E)))qzz#5(((qzz#5(((qvvc{u$$$qyy~%'''qvvc{u$$$quuSz?e###qxx}&&&qzz#4'''qwws|%%%q{{3 E)))q{{3 E)))qs#$---q""3'(E111q""3'(E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 y 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      s   
%%Cq}}S!"d***qyy~&&&qzz#'''q{{3 (((qvvc{###qs#$,,,qyy~&&&q||C !)))q{{3 (((qzz#'''qyy~&&&qvvc{###qvvc{###quuSz?"""qxx}%%%qzz#'''qwws|$$$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 y )
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     s   AAq}}Q D(((qyy|%%%qzz!}%%%qvvay>T!!!qyy|$$$q||A5(((q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~$&&&qq!"e+++AAqzz!}%%%qzz!}&&&AAqzz!}&&&qzz!}%%%AAqzz!}%%%qzz!}&&&QAqzz!}&&&qzz!}%%%QAqzz!}&&&qzz!}%%%QAqzz!}%%%qzz!}&&&QAqzz!}&&&qzz!}%%%r\   c                  Z   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 y )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(((qyy|%%%qzz!}&&&qvvay>T!!!qyy|$$$q||A4'''q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~$&&&qq!"e+++r\   c                  V   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 y 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  s0	   	Aq}}Q D(((qyy|%%%qzz!}&&&q{{1~%'''qvvay>T!!!qyy|$$$q||A4'''q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~$&&&qq!"e+++	qAq}}Q D(((qyy|%%%qzz!}&&&q{{1~%'''qvvay>T!!!qyy|$$$q||A4'''q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~$&&&qq!"e+++	!$$Aq}}Q D(((qyy|%%%qzz!}&&&q{{1~%'''qvvay>T!!!qyy|$$$q||A4'''q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~$&&&qq!"e+++		Aq}}Q D(((qyy|%%%qzz!}&&&q{{1~%'''qvvay>T!!!qyy|$$$q||A4'''q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~$&&&qq!"e+++	
QTTaAq}}Q D(((qyy|%%%qzz!}&&&q{{1~%'''qvvay>T!!!qyy|$$$q||A4'''q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?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 y 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(((qyy|%%%qzz!}&&&q{{1~%'''qvvay>T!!!qyy|$$$q||A4'''q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?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 y 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(((qyy|%%%qzz!}&&&q{{1~$&&&qvvay>T!!!qyy|$$$q||A4'''q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?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 y 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(((qyy|%%%qzz!}&&&q{{1~$&&&qvvay>T!!!qyy|$$$q||A4'''q{{1~%'''qzz!}%%%qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~$&&&qq!"e+++r\   c                  P   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 y )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     sr   	Aq}}Q D(((qyy|%%%qzz!}&&&q{{1~$&&&qvvay>U"""qyy|$$$q||A5(((q{{1~$&&&qzz!}&&&qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~%'''qq!"d***	AAq}}Q D(((qyy|%%%qzz!}&&&q{{1~$&&&qvvay>U"""qyy|$$$q||A5(((q{{1~%'''qzz!}&&&qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~%'''qq!"e+++	1q5	Aq}}Q D(((qyy|%%%qzz!}&&&q{{1~$&&&qvvay>U"""qyy|$$$q||A5(((q{{1~%'''qzz!}&&&qzz!}&&&qvvay>U"""quuQx=E!!!qxx{t###qwwqz?e###q{{1~%'''q{{1~%'''qq!"e+++	AAq{{1~%'''qvvay>T!!!
q	Aq{{1~%'''qvvay>T!!!	
1
Aq{{1~%'''qvvay>U"""	
aAq{{1~%'''qvvay>T!!!	q	Aq{{1~%'''qvvay>T!!!	
1
Aq{{1~%'''qvvay>U"""	
ac
Aq{{1~$&&&qvvay>U"""	
ac
Aq{{1~%'''qvvay>T!!!	
aAq{{1~%'''qvvay>T!!!	
aAq{{1~$&&&qvvay>U"""	
aAq{{1~%'''qvvay>U"""	
aAq{{1~%'''qvvay>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 y )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   `  s>I   gGAq!	AA66DAqqxx{A//23;;;qxx{###qxx{AHHQK(D000qxx{AHHQK(000qxx{AIIaL)T111qxx{AOOA./777qxxA'''qxxA,444	AA66DAqqxx{AHHQK!((1+56$>>>qxx{AJJqMAHHQK78D@@@qxx{AHHQK!**Q-78D@@@qxx{AJJqMAJJqM9:dBBBqxx{AJJqMAHHQK7::a=. !" " "qxx{AHHQK1::a=.8
**Q-  ! ! !qxx{AHHQK!((1+5AF::a=. !" " " qxx{AHHQK188A;,675@@@qxx{AJJqMQXXa[L89UBBBqxx{AHHQK


a
 ! "%*+ + +qxx{AJJqM


a
 ! "%*+ + +qxx{AJJqMQXXa[L8::a=. "# # #qxx{AHHQK1::a=.8


a
 ! "%*+ + +qxx{AHHQK1::a=.8AHHQK<G::a=. "# # # qxx{AHHQK(000qxx{AJJqM*222qxx{AHHQK


a
 ! "%)* * *qxx{AJJqM


a
 ! "%)* * *qxx{AJJqMQZZ]N:;CCCqxx{AHHQK1::a=.8


a
 ! "%)* * *qxx{AHHQK1::a=.8::a=. !" " " qxx{QXXa[LAHHQK<78@@@qxx{A//288A;,      qxx{QXXa[L


a
 ! "%)* * *qxx{A//2


a
 ! "%*+ + +qxx{A//2ahhqk\Aq!
!" #&*+ + +qxx{QXXa[LA,?,?,B+BB


a
 ! "%)* * *qxx{QXXa[LAHHQK<7q!
!"%&%8%8%;$;< =@EF F F qxx{QXXa[L)111qxx{A//288A;,      qxx{A//23;;;qxx{A//2


a
 ! "%*+ + +qxx{A//288A;,--a001 259: : :qxx{Q0033


a
 ! "%)* * *qxx{Q0033qxx{lBq!
!" #&+, , , qxx{###qxx{A//23;;;qxx{A//23;;;qxx{A//2


a
 ! "%)* * *qxx{A//2q!
!" #&*+ + +qxx{Q0033


a
 ! "%)* * *qxx{Q0033q!
!" #&*+ + + gGAq!	A	AffGAq!qxx{AJJqMAJJqM9
**Q-  ! ! !qxx{AJJqMAJJqM9
((1+   qxx{AJJqMAJJqM9
**Q-  ! ! !qxx{AJJqMAJJqM9


a
 ! "%*+ + +qxx{AJJqMAJJqM988A;,  ! ! !qxx{AJJqMAJJqM9


a
 ! "%*+ + +qxx{AJJqMAJJqM9


a
 ! "%)* * *qxx{AJJqMAJJqM9:BBBqxx{AJJqMAJJqM9


a
 ! "%)* * *qxx{AJJqMAHHQK7
((1+   qxx{AJJqMAHHQK7
**Q-  ! ! !qxx{AJJqMAHHQK7


a
 ! "%*+ + +qxx{AJJqMAHHQK788A;,  ! ! !qxx{AJJqMAHHQK7


a
 ! "%*+ + +qxx{AJJqMAHHQK7


a
 ! "%)* * *qxx{AJJqMAHHQK78@@@qxx{AJJqMAHHQK7


a
 ! "%)* * *qxx{AJJqMAJJqM9
**Q-  ! ! !qxx{AJJqMAJJqM9


a
 ! "%*+ + +qxx{AJJqMAJJqM988A;,  ! ! !qxx{AJJqMAJJqM9


a
 ! "%*+ + +qxx{AJJqMAJJqM9


a
 ! "%)* * *qxx{AJJqMA,?,?,BB
((1+   qxx{AJJqMAJJqM9


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%*+ + +qxx{AJJqMA,?,?,BB88A;,      qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%*+ + +qxx{AJJqM


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{AJJqMQXXa[L888A;,      qxx{AJJqMQXXa[L8


a
 ! "%)* * *qxx{AJJqMQXXa[L8


a
 ! "%)* * *qxx{AJJqMQXXa[L89AAAqxx{AJJqMQXXa[L8


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%*+ + +qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{AJJqM	
		Q	  !$() ) )qxx{AJJqMA,?,?,BB


a
 ! "%*+ + +qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{AJJqM


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{AJJqM*222qxx{AJJqM


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{AHHQK!((1+5
((1+   qxx{AHHQK!((1+5
**Q-  ! ! !qxx{AHHQK!((1+5


a
 ! "%*+ + +qxx{AHHQK!((1+588A;,  ! ! !qxx{AHHQK!((1+5


a
 ! "%*+ + +qxx{AHHQK!((1+5


a
 ! "%)* * *qxx{AHHQK!((1+56>>>qxx{AHHQK!((1+5


a
 ! "%)* * *qxx{AHHQK!**Q-7
**Q-  ! ! !qxx{AHHQK!**Q-7


a
 ! "%*+ + +qxx{AHHQK!**Q-788A;,  ! ! !qxx{AHHQK!**Q-7


a
 ! "%*+ + +qxx{AHHQK!**Q-7


a
 ! "%)* * *qxx{AHHQK!**Q-78@@@qxx{AHHQK!**Q-7


a
 ! "%)* * *qxx{AHHQK!*=*=a*@@


a
 ! "%*+ + +qxx{AHHQK!*=*=a*@@88A;,      qxx{AHHQK!*=*=a*@@


a
 ! "%)* * *qxx{AHHQK!*=*=a*@@


a
 ! "%*+ + +qxx{AHHQK


a
 ! "%)* * *qxx{AHHQK!*=*=a*@@


a
 ! "%)* * *qxx{AHHQK188A;,688A;,      qxx{AHHQK188A;,6


a
 ! "%)* * *qxx{AHHQK188A;,6


a
 ! "%)* * *qxx{AHHQK188A;,67???qxx{AHHQK188A;,6


a
 ! "%)* * *qxx{AHHQK!*=*=a*@@


a
 ! "%*+ + +qxx{AHHQK!*=*=a*@@


a
 ! "%)* * *qxx{AHHQK


a
 ! "%)* * *qxx{AHHQK!*=*=a*@@


a
 ! "%*+ + +qxx{AHHQK!*=*=a*@@


a
 ! "%)* * *qxx{AHHQK


a
 ! "%)* * *qxx{AHHQK!*=*=a*@@


a
 ! "%)* * *qxx{AHHQK(000qxx{AHHQK


a
 ! "%)* * *qxx{AHHQK!*=*=a*@@


a
 ! "%)* * *qxx{AJJqMAJJqM9
**Q-  ! ! !qxx{AJJqMAJJqM9


a
 ! "%*+ + +qxx{AJJqMAJJqM988A;,  ! ! !qxx{AJJqMAJJqM9


a
 ! "%*+ + +qxx{AJJqMAJJqM9


a
 ! "%)* * *qxx{AJJqMAJJqM9:BBBqxx{AJJqMAJJqM9


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%*+ + +qxx{AJJqMA,?,?,BB88A;,      qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%*+ + +qxx{AJJqM


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{AJJqMQXXa[L888A;,      qxx{AJJqMQXXa[L8


a
 ! "%)* * *qxx{AJJqMQXXa[L8


a
 ! "%)* * *qxx{AJJqMQXXa[L89AAAqxx{AJJqMQXXa[L8


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%*+ + +qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{AJJqM


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%*+ + +qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{AJJqM


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{AJJqM*222qxx{AJJqM


a
 ! "%)* * *qxx{AJJqMA,?,?,BB


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>CD D Dqxx{A//2


a
 !$%HHQK<0 1489 9 9qxx{A//2


a
 !"#"5"5a"89 :=AB B Bqxx{A//2


a
 !#$#6#6q#9: ;>CD D Dqxx{A//2


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{A//288A;,((1+& '*./ / /qxx{A//288A;,,,Q/0 1489 9 9qxx{A//288A;,,,Q/0 1489 9 9qxx{A//288A;,      qxx{A//288A;,,,Q/0 1489 9 9qxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{A//2


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{A//2


a
 !#$#6#6q#9: ;>CD D Dqxx{A//2


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{A//23;;;qxx{A//2


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{QXXa[LAHHQK<788A;,      qxx{QXXa[L1+>+>q+AA88A;,      qxx{QXXa[LAHHQK<7


a
 ! "%)* * *qxx{QXXa[LAHHQK<78@@@qxx{QXXa[LAHHQK<7


a
 ! "%)* * *qxx{QXXa[L1+>+>q+AA


a
 ! "%)* * *qxx{QXXa[L1+>+>q+AA


a
 ! "%)* * *qxx{QXXa[L


a
 ! "%)* * *qxx{QXXa[L1+>+>q+AA


a
 ! "%)* * *qxx{QXXa[L1+>+>q+AA


a
 ! "%)* * *qxx{QXXa[L


a
 ! "%)* * *qxx{QXXa[L1+>+>q+AA


a
 ! "%)* * *qxx{QXXa[L)111qxx{QXXa[L


a
 ! "%)* * *qxx{QXXa[L1+>+>q+AA


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>CD D Dqxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{A//2


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>CD D Dqxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{A//2


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{A//23;;;qxx{A//2


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>CD D Dqxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{A//2


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{A//23;;;qxx{A//2


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>BC C Cqxx{###qxx{A//23;;;qxx{A//2


a
 ! "%)* * *qxx{A//2


a
 !#$#6#6q#9: ;>BC C C qxx!}%%%qxx!}ahhqk*d222gGAq!	!A66DAqqxx{AHHQK!((1+56$>>>qxx{AHHQK188A;,675@@@qxx{AHHQK(000qxx{QXXa[L188A;675@@@qxx{QXXa[LAHHQK<78EAAAqxx{QXXa[L)111qxx{AHHQK(000qxx{QXXa[L)111qxx{###	!AAffGAq!qxx{AHHQK!((1+5
((1+   qxx{AHHQK!((1+588A;,  ! ! !qxx{AHHQK!((1+56>>>qxx{AHHQK188A;,6
((1+      qxx{AHHQK188A;,688A;,  ! ! !qxx{AHHQK188A;,67???qxx{AHHQK!((1+56>>>qxx{AHHQK188A;,67???qxx{AHHQK(000qxx{QXXa[L188A;6
((1+      qxx{QXXa[L188A;688A;,  ! ! !qxx{QXXa[L188A;67???qxx{QXXa[LAHHQK<7
((1+      qxx{QXXa[LAHHQK<788A;,  ! ! !qxx{QXXa[LAHHQK<78@@@qxx{QXXa[L188A;67???qxx{QXXa[LAHHQK<78@@@qxx{QXXa[L)111qxx{AHHQK!((1+56>>>qxx{AHHQK188A;,67???qxx{AHHQK(000qxx{QXXa[L188A;67???qxx{QXXa[LAHHQK<78@@@qxx{QXXa[L)111qxx{AHHQK(000qxx{QXXa[L)111qxx{QXXa[L1+=+=a+@@


Q
 "#"4"4Q"78 9<@A A Aqxx{A..q1QXXa[L@


Q
 #$88A;,/


Q
  !$)* * * gGAq!qxx1~&&&qxx1~&&&qxx1~qxx{+t333qxx1~&&&qxx!$%---qxx!$a&9&9!&<=EEEqxx!$a&9&9!&<=EEEqxx1~q22156$>>>qxxQ !)))qxx1~|,555qxx1~|,555 qxxQ !T)))qxxQ 188A;,/4777 qxxA (((qxxA!-555qxxA!&&),444qxxAA/5888qxxA+u444qxxA (((qxxA!-555qxxA D((( qxxA D(((qxxA!((1+.$666qxxA D(((qxxA!((1+.$666qxx#a&!"d***qxxA	"#t+++qxxA	"#t+++qxxAQ()T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 y)z4We need to support relations in ask for this to workTN)r   r   rT   r8   r   r6   rv   r\   rZ   test_bounded_xfailr   V  sL     qxxA	"#t+++qxx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 y)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3u<<<q}}Q1.$666q}}QQ0D888q}}Q+t333q}}QA/4777q}}Q!--"2!23t;;;q}}QqS!"d***q}}QqS!AMM!$4#45>>>q}}QU#$,,,q}}QU#ammA&6%675@@@q}}QT"#t+++q}}QT"Q]]1%5$56%???q}}SV$%---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 y 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?	   qyy|$$$qyy|QYYq\*d222qyy|QYYq\*222qyy|aiil]+u444qyy|QVVAY'4///qyy|affQiZ(000qyy|QZZ]+t333qyy|Q\\!_-555qyy|QZZ]+t333qyy|Q[[^,444qyy|Q[[^,444 qyyQ1.$666qyyQ+t333qyyQA/4777qyyQa1T999qyyQQ0D888qyyQ1.$666qyyQ+t333qyyQq*d222qyyQ1		!!<=EEEqyyQQ[[^!;<DDD qyy1q!199Q<0D888qyy1q!166!9-555qyy1q!1::a=1T999qyy1q!1::a=1T999qyy1q!1<<?3t;;;qyy1q!1;;q>2d:::qyy1q!199Q<0D888qyy1q!166!9-555qyy1q!1558,444 qyyA		!-555qyyAq	*d222qyyA

1.$666qyyA

1.$666qyyAQ0D888qyyAA/4777qyyA		!-555qyyAq	*d222qyyAa)T111 qyyA		!-555qyyAq	*d222qyyA

1.$666qyyA

1.$666qyyAQ0D888qyyAA/4777qyyA		!-555qyyAq	*d222qyyAa)T111qyyA		!qyy| ;<DDD qyyQ !T)))qyyQqS1W&'4///qyyQ !T)))qyyQqS1W&'4/// qyyQ !T)))qyyQ !T))) qyyQ !T)))qyyA D(((qyy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 y )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	   qvvay>!!!qvvay!))A,'///qvvay199Q<-(E111qvvay!**Q-(000qvvay!**Q-(000qvvac{###qvvac{AIIaL)T111qvvac{AFF1I&$...qvvac{ALLO,555qvvac{AEE!H%---qvvac{QYYq\M*222qvvac{AIIaL)111qvvac{AFF1I&$...qvvac{AEE!H%...qvva!e}aeeAh'4///qvva!e}affQi(E111qvva!e}aeeAh'5000qvva!e}affQi(D000qvva!e}aeeAh'4///qvva!e}aeeAh'4///qvva!e}aeeAhq12d:::qvva!e}aeeAh23u<<<qvva!e}affQi!&&)34<<<qvvacAg		!-666qvvac!e}ajjmajjm;<DDDqvvac!e}all1oQ?@HHHqvva!eai !%%(QUU1X"5q	"ABdJJJqvva!eai!m$	a1558affQi'!))A,68;?@ @ @ qvvc!f~qvvay)T111qvvc!f~q	z*222qvvbe}affQi(D000qvvbe}qvvayj)111qvvbe}affQi(D000qvvbe}affQi(D000qvvrAg		!-666qvvad|QVVAY'4///qvvad|QUU1X&%///qvvad|QVVAY'///qvvad|$$$qvvad|QVVAY15AFGOOOqvvad|QUU1X		!4

1~EF%OOOqvvad|QVVAY15

1EF$NNNqvvad|QUU1X		!4qzz!}DENNNqvvad|QVVAY15AFGOOOqvvad|QVVAY15

1EFNNNqvvad|QUU1X		!4

1~EFNNNqvvad|QUU1X		!4qzz!}DEMMMqvvad|QVVAY'///qvvad|QUU1X&...qvvac{AIIaL199Q<78@@@qvvac{AIIaL)111qvvaQi !))A,q"9:dBBBqvvaQi !))A,":;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 y r   )r   r   rR   r   r   r   rJ   rS   rv   r\   rZ   1test_evenness_in_ternary_integer_product_with_oddr     s    
 qvvac1q5k"AIIaL199Q<$?!%%($JKtSSSqvvac1q5k"AIIaL199Q<$?!%%($JKt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 y N)r   r   rR   r   r   r   rJ   rv   r\   rZ   2test_evenness_in_ternary_integer_product_with_evenr     sL    qvvac1q5k"AIIaL199Q<$?!&&)$KL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 y r   )r   r   rq   r   rt   rP   ri   rQ   ru   r%   InfinityrL   rs   rv   r\   rZ   test_extended_realr     sh   qq!1#6#6q#9:dBBBqq!1::a=1T999qq!166!9-555qq!1::a=1T999qq!1#6#6q#9:dBBBqr"AJJqM2d:::qr"AJJqM2d:::qq1::~.q	:dBBBqq!1::a=1999r\   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                    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 r J  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        dz
        z        du r#J  t,        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 rJ  y )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   "  s   qzz!}aiil+t333qzz!}all1o.%777qzz!}affQi(000qzz!}ajjm,444qzz!}ajjm,444qzz!}aiil+333qzz!}q{{1~o.%777qzz!A#

1.$666qzz!A#		!-555qzz!A#q	*d222qzz!A#a)T111qzz!A#Q0E999qzz!A#

1.$666qzz!A#		!-555qzz!A#q	*d222qzz!A#a)T111qzz!A#Q0E999qzz!A#

1.$666qzz!A#		!-555qzz!A#q	*d222qzz!A#a)T111qzz!A#Q0E999qzz!A#

1.$666qzz!A#		!-555qzz!A#q	*d222qzz!A#a)T111qzz!A#Q0E999qzz!}q{{1~o.%777 qzz!A#Q!,,q/ ABJJJqzz!A#

1

1 =>$FFFqzz!A#		!qzz!} <=EEEqzz!A#q	AJJqM 9:dBBBqzz!A#a1::a= 89TAAAqzz!A#Q!**Q- ?@EIII3T4-1::ad#$---1::aE234===1::aE234<<<1::ad#QZZ]3;;;1::ad#QZZ]QYYq\%ABeKKK . 4[1::ad#$---1::aE234===1::aE234<<<1::ad#QZZ]3;;;1::ad#QZZ]QYYq1u5E%EF%OOO  4[1::ad#$---1::aE234===1::ad#QZZ]3u<<< r\   c                  1   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 y )NFTrG   )r   r   rW   r   rX   rO   rU   rL   ri   rM   r   r   r   rv   r\   rZ   test_hermitianr   b  sZ   q{{1~&&&q{{1~qq12:::q{{1~q{{1~.%777q{{1~qwwqz*d222q{{1~qvvay)T111q{{1~qvvay)T111q{{1q5!1??1#56>>>q{{1q5!199Q<0888q{{1q5!1;;q>2d:::q{{1q5!1;;q>2e;;;q{{1q5!166!9-555q{{1q5!1??1#56>>>q{{1q5!199Q<0888q{{1q5!1;;q>2e;;;q{{1q5!1;;q>2:::q{{1q5!166!9-666	AEAOOA.1CCEHLM M Mq{{1q5!1??1#5		!#DEMMM	AEAOOA.Q?ADHI I Iq{{1q5!1??1#5A#FGOOOq{{1q5!1??1#5q	#ABJJJq{{1q5!1;;q>AIIaL#@AIIIq{{1q5!1;;q>AKKN#BCtKKKq{{1q5!1;;q>AKKN#BCuLLLq{{1q5!1;;q>AFF1I#=>$FFFq{{1q5!1;;q>AIIaL#@AIIIq{{1q5!1;;q>AKKN#BCKKKq{{1q5!1;;q>AFF1I#=>%GGGq{{1q5!166!9qyy|#;<DDDq{{1q5!166!9qvvay#89TAAAq{{1Q3!34<<<q{{1Q31.666q{{1Q3Q0E999q{{1Q3Q0D888q{{1Q3+u444q{{1Q3Q!&&)!;<DDD	AEAIq	AFF1I 5q	 ACFJK K Kq{{1q519%	q	AFF1IA.0389 9 9q{{1q519%	q	AKKN"Q[[^358<= = =q{{1q519%	AQ'!++a.8:=AB B B qq!"***qq!166!9-666qq!1771:.%777qq1u%qq'9:eCCCqq1u%qyy|4<<<qq1u%q{{1~6>>>qq1u%q{{1~6%???qq1u%qvvay1999qq1u%qq'9:dBBBqq1u%qyy|4<<<qq1u%q{{1~6>>>qq1u%q{{1~6$>>>qq1u%qvvay1U:::qq!166!9-555	A 2Q__Q5G G	   	A 2QYYq\ ACFJK K K	A 2Q[[^ CEHLM M M	A 2Q[[^ CEHLM M Mqq1u%qq'9AFF1I'E 
  qq1u%q{{1~		!'DEMMMqq1u%q{{1~A'F 
  	AAQ ?ADHI I Iqq1u%q{{1~q	'ABJJJqq1u%q{{1~		!'DEMMMqq1u%q{{1~A'FG4OOOqq1u%q{{1~q	'ABeKKKqq1u%qvvay199Q<'?@HHHqq1u%qvvay166!9'<=EEEqqs#QVVAY/4777qqs#Q__Q%78EAAAqqs#QYYq\2:::qqs#Q__Q%7!&&)%CDLLLqq1uqy)	q	AFF1Iq	)+.23 3 3qq1uqy)	q	AFF1IA.0378 8 8qq1uqy)	q	AKKN"Q[[^358=> > >qq1uqy)	AQ'!++a.8:=AB B Br\   c                  h(   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 y )	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     s9   q{{1~&&&q{{1~qvvay)U222q{{1~qwwqz*e333q{{1q5!166!9-666q{{1q5!1;;q>2e;;;q{{1q5!166!9-666q{{1q5!1;;q>2d:::q{{1q5!1;;q>AKKN#BCtKKKq{{1q5!166!9qvvay#89UBBBq{{1q5!1;;q>AFF1I#=>%GGGq{{1q5!199Q<!&&)#;<DDD	AEAIq	AFF1I 5q	 ACFKL L Lq{{1q519%	q	AFF1IA.0378 8 8q{{1q519%	q	AKKN"Q[[^358=> > > q{{1Q3+t333q{{1Q3Q0E999q{{1Q31.666q{{1Q3Q!&&)!;<DDDq{{1Q3QVVAY!675@@@q{{1a4 !**Q-0888q{{1a4 !**Q-0888q{{1a4 !&&),555q{{1a4 !%%(+t333q{{1a4 !++a.1U:::q{{AaC!8$akk!n5>>>q{{1a4 !++a.1U:::q{{1a4 !++a.1;;q>"ABJJJq{{1a4 !++a.166!9"<=EEEq{{1a4 !&&)akk!n"<=EEEq{{1a4 !&&)affQi"78@@@q{{1a4 !++a.199Q<"?@HHHq{{1a4 !++a.199Q<"?@HHHq{{1a4 !++a.1558";<DDDq{{1a4 !++a.1::a="@AIIIq{{1a4 !++a.166!9"<=FFFq{{1a4 !&&)aiil":;uDDDq{{1a4 !**Q-!&&)";<EEEq{{1a4 !**Q-!&&)";<DDDq{{1a4 !**Q-!&&)";qzz!}n"LMQVVVVq{{1a4 !))A,Q"?@HHHq{{1a4 !**Q-!**Q-"?!))AaC."PQUYYYYq{{1a4 !**Q-!**Q-"?199QqS>/"QRV[[[[q{{1a4 !**Q-!**Q-"?@HHHq{{1a4 !&&)ajjm";qyy1~o"MNRWWWWq{{1a4 !&&)ajjm";aii!n"LMUUU q{{3q6"#t+++q{{3qs8$%...q{{3q1u:&'5000q{{3q6"AIIaL1999q{{3q6"AKKN3;;;q{{3q6"AJJqM2e;;;q{{3s1v;'16>>>q{{3s1v;'Q8@@@q{{3s1v;'(D000 q{{3q619%q{{1~6%???	SAa%(!e	<Bq{{2q	*e333	SAaE*A	>Bq{{2a)T111q{{3qs2vax=!+,aiil;uDDDq{{3qtAv678EAAAq{{3r!tAv678D@@@ q{{3q(1a.12AFF1I

14MNRW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 y )NTFr   r   )r   r   rJ   r   rL   rP   rR   rS   rU   rK   r1   rN   rv   r\   rZ   test_integerr     s   qyy|$$$qyy|QYYq\*d222qyy|aiil]+u444qyy|affQiZ(E111qyy|ajjm^,444qyy|QVVAYq12d:::qyy1~qyy|,444qyy1~qvvay)T111qyy1~qwwqz*d222qyy1~qzz!}-555qyy1~qvvay)111qyya#QYYq\2e;;;qyya#Q\\!_5===qyy1~quuQx(E111qyy1~qvvay)T111qyy1~quuQx(000qyy1~qvvay)111r\   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                     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 y )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   qzz!}ajjm,444qzz!}ajjm,555qzz!}qvvayj)U222qzz!}aggaj)U222qzz!}qwwqzk*222qzz1"~qzz!}-555qzz1"~

1~.666qzz1"~qzz!}-666qzz1"~qzz!}-555qzz!a% !**Q-0D888qzz!a% !)))qzz!a% !**Q-0888qzz!a% !**Q-!**Q-"?@DHHHqzz!a% !**Q-!--2B"BCtKKKqzz!a% !U*** qzz#a&!)c!fai/!345===qzz1"q#a&!)c!fai"7889:BBBqzz!Q$ (((qzz!Q$+u444qzz!S&!166!9-555qzz!Q$A/777qzz!A#'''qzz!A#

1

1 =>%GGGqzz!A#

1

1 =>$FFFqzz!A#		!qyy| ;<DDDqzz!Q$ (((qzz!Q$A!:;uDDDqzz!Q$Aq!9:dBBBqzz!Q$A1!=>%GGGqzz#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 y )NTr   FrG   )r   r   rh   r   rL   rP   rQ   r   r+   r0   r/   r   r6   r8   rv   r\   rZ   test_nonzeror   [  s   qyy|$$$qyy|QVVAY'///qyy|QZZ]+t333qyy|QZZ]+t333qyy|QZZ]QZZ]:;tCCCqyyQ (((qyyQAA!>?4GGGqyyQAA!>?GGGqyyQAA!>?4GGGqyy1~&&&qyy1~qzz!}-555qyy1~qzz!}-555qyy1~qyy|,444qyy1~qyy|aiil:;tCCCqyyA		!-555qyyQ !)))qyyQ !))A,/4777qyyS1X'(E111 qyyQSVQY.23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 y )NFTr   )r   r   ri   r   rL   rP   rQ   nonnegativer   r   rh   r+   rJ   rR   rS   rv   r\   rZ   	test_zeror   x  ss   qvvay>!!!qvvay!&&)$,,,qvvay!**Q-(E111qvvay!**Q-(E111qvvay!**Q-!**Q-78EAAAqvvay!--*Q]]1-==>$FFFqvva!e}%%%qvva!e}ajjmajjm;<EEEqvva!e}ajjmajjm;<DDDqvva!e}ajjmajjm;<EEEqvvac{###qvvac{AJJqM*e333qvvac{AJJqM*e333qvvac{AIIaL)111qvvc!f~&&&qvvc!f~qvvay)T111qyy|QVVAY'4///qvvay!&&)$,,,quuQx#u,,,qvvay!&&)$,,,qvvay!%%(#u,,,qvvay166!9$affQqSk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 y )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
   quuQx=   quuQxq"d***quuQx1&...quuQx!))A,'5000quuQxA'///quuQxA'///quuaRy!%%(#t+++quuQqSz?"""quuQqSz199Q<(E111quuQqSz1558$---quuQqSz1<<?+u444quuQqSzAIIaL=)111quuQqSz199Q<(000quuQqSz1558$,,,quuQqSz166!9%---quuQU|QVVAY'4///quuQU|QVVAY'5000quuQU|QUU1X&$...quuQU|QUU1X&%///quuQU|QVVAY'4///quuQU|QUU1X&%///quuQU|QVVAY'4///quuQU|QUU1Xa01U:::quuQU|QUU1Xq	12d:::quuQU|QVVAYq12d:::quuQU|QUU1Xa01U:::quuQUQYqAEE!H!4qvvay!@AUJJJquuQUQY]#	a1558affQi'!))A,68;?@ @ @ quuQqS1W~qyy|,444quuQqS1W~qyy|aeeAh674???quuQqS1W~qyy|affQi78EAAAquuQqS1W~qyy|aiil:;CCCquuQqSz1558affQi/0E999quuQqSz1558aeeAh./4777quuQqSU|QZZ]QZZ]:;CCCquuQqSU|Q\\!_q||A>?GGGquuSV}aeeAh'4///quub1W~qyy|,444quuQT{AFF1I&%///quuQT{AEE!H%---quuQT{AFF1I&...quuQT{AFF1I		!4

1~EFNNNquuQT{AEE!Hqyy|3qzz!}nDEMMMquuQT{AFF1I		!4qzz!}DENNNquuQT{AEE!Hqyy|3ajjmCDLLLquuQT{AFF1I		!4

1~EFNNNquuQT{AFF1I		!4qzz!}DEMMMquuQT{AEE!Hqyy|3qzz!}nDEMMMquuQT{AEE!Hqyy|3ajjmCDLLLquuQT{AFF1I&...quuQT{AEE!H%---quuQqSz199Q<!))A,67???quuQqSz199Q<(000quuQAY1a!89UBBBquuQAY1q	!9: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 y NF)r   r   rS   r   r   r   rJ   rv   r\   rZ   0test_oddness_in_ternary_integer_product_with_oddr     s    
 quuQqS!a%[!199Q<!))A,#>q#IJeSSSquuQqS!a%[!199Q<!))A,#>q#IJe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 y r   )r   r   rS   r   r   r   rJ   rR   rv   r\   rZ   1test_oddness_in_ternary_integer_product_with_evenr     sL    quuQqS!a%[!199Q<!))A,#>#JK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 y )NTFr   r   )r   r   rU   r   rJ   r   rv   r\   rZ   
test_primer     s   qwwqz1771:&$...qwwqzAGGAJ;'5000qwwqz199Q<(000qwwqzAIIaL=)U222qwwqs|QYYq\*222qwwqs|$$$qwwqs|QWWQZ(000qwwqs|QYYq\AIIaL89AAAqwwqs|QYYq\*e333qwwqs|$$$qwwq!t}aiil+u444qwwq!t}aggaj)U222qwwq!t}aiilQYYq\9:e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 y )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     s   qzz#a&A+A!3a789AAAqzz!}ajjm,444qzz!}ajjm,555qzz!}aiil+333qzz1"~qzz!}-666qzz1"~qzz!}-555qzz!a% !**Q-!**Q-"?@DHHHqzz!a% !**Q-!--2B"BCtKKKqzz!a% !**Q-!**Q-"?@HHHqzz!a% !**Q-!++a."@AUJJJqzz!A#

1.$666**Q-!**Q-/!**Q-?!**Q-OKqzz!A#a% !)))qzz!A#a% +.$666qzz1"Q$q&!;/5888qzz!Q$A/777qzz!Q$A/4777qzz!Q$A/4777qzz!Q$A/5888qzz!QAX,'3t;;;qzz!Q$ E)))qzz!a% !U*** qzz#a&!)c!fai/!345===qzz1"q#a&!)c!fai"7889:BBB qzz#a&!166!9-555

3q6""AFF1I.$666qzz!c!f*%qvvay1999qzz#a&!1;;q>2:::qzz#ad1fu56AG4OOOqzz#bdU34akk!nEMMMqzz#ad1f+&q	2d:::qzz#ad1f+&a1U:::qzz#ad1f+&q	2::: qzz#a&!1;;q>2e;;;qzz#a&!1::a=1U:::qzz#a&!1::a=1999qzz#a!e*%qzz!}5=== qzz)A,'1

1)EFFFqzz)A,'16>>> qzz#a&!"***qzz#a&!1::a=1T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 y )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q}}QA/5888q}}T"X&'5000q}}QQ0E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 y )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q}}QA/5888q}}T"X&'5000q}}QQ0E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 y )NTr   FrG   )r   r   rL   r   rh   rP   rQ   rJ   rR   rU   r1   r   rM   rO   rv   r\   rZ   test_real_basicr   N  s   qvvay>!!!qvvay!&&)$,,,qvvay!))A,'4///qvvay!**Q-(D000qvvay!**Q-(D000qvvay!))A,'4///qvvay!&&)$,,,qvvay!''!*%---qvvaQi !&&),444qvvaRj!166!9-666qvva!e}affQi(D000qvva!e}affQi(E111qvva!e}aiil+333qvvac{AFF1I&$...qvvac{AFF1I&%///qvvac{AKKN+t333qvvac{AIIaL)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 y )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  su   qvvad|QVVAY'4///qvvd1g

1.%777qvvad|QVVAY156$>>>qvvad|QVVAY23;;;qvvad|QZZ]QVVAY674???qvvad|Q[[^akk!n<=EEEqvvad|Q[[^affQi78@@@qvvad|QVVAYQ78@@@qvvad|Q[[^,444qvvad|QVVAY156$>>>qvvad|QZZ]QVVAY674???qvvad|QVVAYA67???qvvad|Q[[^aiil:;CCCqvvad|Q[[^aeeAh675@@@qvvad|Q[[^affQi78D@@@qvva!A#hQVVAaC[!81::ac?!JQVVTUY!VYZYcYcdeYf!fgkooooqvva!A#hQZZ!_!<qvvay!H1::VW=!XY]bbbbqvva!A#hQYYqs^!;<DDDqvva!A#hQVVAaC[!81::a=!HITQQQqvva!A#hQVVAaC[!81::a=!HIURRRqvvrAgA/4777qvvad|Q[[^,444qvvad|Q[[^,444qvvad|Q[[^,444qvva!B$s1v+&'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 y )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     st    qvvc!f~&&&qvvc!f~&&&qvvc!f~qvvay)T111qvvc!f~qvvay)T111 qvvc!f~&&&qvvc!f~qvvay)T111qvva#a&j!166!9-555qvvc!B$q&5123t;;;qvvc"Q$/01T999qvvc"Q$q&5123u<<< qvvc!f~%'''qvvc!A#h E)))qvvc!a%j!"e+++qvvc!f~qyy|,444qvvc!f~q{{1~.%777qvvc#a&k"AKKN3;;;qvvc#a&k"AIIaL1999	S2aE*A	>Bqvvbz199Q<(D000qvvc!fai !++a.1T999qvvc!fai !))A,/777 qvvbe}%%%qvvbe}%%%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  }|j                          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 y )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NOSWWWWq{{6Aq1ua=1q5!Q-!aR"LMNOSXXXXT"Aq{{6Aq1ua=1q5!Q-!aR"LMNOSWWWWq{{<(PQRSW[[[[q{{<Aqz;(OPQRV[[[[q{{<Aqz;(OPQRVZZZZ 	BFAQA2QB
;<A!QUAaAE 2QQODEAqq!"d***qq!"d***qq!t$%...	
AAJJLqq!"d***	!R!VQ!Qa!QZ8	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 r J  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        dz
        z        du r#J  t"        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 r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 y )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7#$,,,q{{1T!W9%&$...q{{4719%&$...q{{1T!W9%&$...q{{4Ad1gI./0D888q{{1qa(2r*:!:::;<DDDq{{1qa2b5!11123u<<<3T4-1;;qt$%...1;;qU345>>>1;;qU345===1;;qt$akk!n5===1;;qt$akk!nqyy|&CDMMM . 4[1;;qt$%...1;;qU345>>>1;;qU345===1;;qt$akk!n5===1;;qt$akk!nqyyQ7G&GHEQQQ  4[1;;qt$%...1;;qU345>>>1;;qt$akk!n5>>> 
 q{{4A<()U222q{{4Ad1gI./0888q{{4 !T)))q{{1~q//23u<<<q"AKKN3u<<<r\   c                  `   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 y)z Test ask with global assumptionsNT)r   r   rJ   r   r   addclearrv   r\   rZ   test_globalr     sq    qyy|$$$199Q<(qyy|$$$qyy|$$$r\   c                  H   t        t        j                  t                    J t	               } | j                  t        j                  t                     t        t        j                  t              |       du sJ t        t        j                  t                    J y)z(Test ask with custom assumptions contextN)contextT)r   r   rJ   r   r   r   )local_contexts    rZ   test_custom_contextr     so    qyy|$$$&(Maiil#qyy|]3t;;;qyy|$$$r\   c            	      0   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 y r   )r   r   rQ   r   rL   rP   r:   r<   rv   r\   rZ   test_functions_in_assumptionsr     s    qzz!}affQi1::a=89UBBBqzz!}jAJJqMBCuLLLqzz!}c!&&)QZZ];<EEEr\   c                      t        t        j                  t              t        j                  t              z  t        j
                  t              t        j                  t              z	        du sJ y )Nr   F)r   r   rQ   r   rJ   rL   rP   rv   r\   rZ   test_composite_askr    sK    qzz!}qyy|+FF1IA.0389 9 9r\   c                  v   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 y )NTFr   )r   r   rQ   r   rP   rL   rI   rJ   r;   r:   rR   rv   r\   rZ   test_composite_propositionr    s   t9u:

1~qzz!}-555q	z1==+,444qzz!}qyy|+QZZ];uDDDqzz!}qyy|+,444qvvay199Q<'A74???qvvay199Q<'(000qvvayAJJqM)1::a=9UBBBw	q	1::a=5234::a=BEJK K Kwqvvay!**Q-%@AIIIz!))A,q	2AFF1I>$FFFz!))A,q	23;;;z!**Q-16		!EMMMqvvay199Q<'QYYq\)ABd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 y ro   )r   r   rL   r   rv   r\   rZ   test_tautologyr    sV    qvvayAFF1I:%&$...qvvayAFF1I:%&%///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 y r   )r   r   rL   r   r   rP   rv   r\   rZ   test_composite_assumptionsr    s    qvvay!&&)affQi/0D888qzz!}ajjmajjm;<DDDqzz!}affQi1::a=89AAAqvvayAFF1I234<<<r\   c                  *   t        t        d         G d dt              } 	 t               5  t	        d|        ddd       t               5  t        t        j                  t                    du sJ 	 ddd       t               5  t        t        j                  t        dz               J 	 ddd       t               5  t        d|        ddd       t        `t        t        d         G d	 d
t              }	  |       t        _        t        j                  j                  t              d        }t        t        j                  t                    du sJ t        t        j                  t        dz               J 	 t        `t        t        d        y# 1 sw Y   dxY w# 1 sw Y   7xY w# 1 sw Y   	xY w# 1 sw Y   xY w# t               5  t        d|        ddd       t        `w # 1 sw Y   t        `w xY wxY w# t        `w xY w)z7test that you can add keys to the ask system at runtimec                  F    t        t        j                  t                    S r   r   r   my_keyr   rv   r\   rZ   <lambda>z(test_key_extensibility.<locals>.<lambda>%      3qxx{#3r\   c                       e Zd Zed        Zy),test_key_extensibility.<locals>.MyAskHandlerc                      yr   rv   exprr   s     rZ   r)   z3test_key_extensibility.<locals>.MyAskHandler.Symbol)      r\   N)__name__
__module____qualname__staticmethodr)   rv   r\   rZ   MyAskHandlerr  (  s    		 
	r\   r  r  NTrG   c                  F    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y)+test_key_extensibility.<locals>.MyPredicateNr  r  r  rv   r\   rZ   MyPredicater  <      r\   r  c                      yr   rv   r  s     rZ   _z!test_key_extensibility.<locals>._@  r  r\   c                  F    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%  "  sz    >34z #%X|4 &#%qxx{#t+++ &#%qxxA'/// &
 $%8\2 &H
>34i =	
		6	"	 
#	188A;4'''188AaC=!)))H
>345 &%%%%%
 &%#%8\2 &H &H Hs   
G FG 'F(3G (F5.G  G<BH
 F% G (F2-G 5F?:G GHG5&H5H:H
Hc                      ddl m}   G d d|       }t        j                  j	                  |      d        }t        t        j                   |                   du sJ y)zBtest that new types can be added to the ask system at runtime
    r   )Basicc                       e Zd Zy)'test_type_extensibility.<locals>.MyTypeNr  rv   r\   rZ   MyTyper)  O  r  r\   r*  c                      yr   rv   r  s     rZ   r!  z"test_type_extensibility.<locals>._R  s    r\   TN)
sympy.corer'  r   rU   r$  r   )r'  r*  r!  s      rZ   test_type_extensibilityr-  J  sV     !  WWf  qwwvx !T)))r\   c                  6   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 y 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    gaii4ajj!&&1affaii02K 		1::qvvqyyA[)O !1?CG1::1661::qyy"AAAAr\   c                  P   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 y r   )
r=   r;   r   rJ   r   rK   rL   rM   r   set)r/  r0  s     rZ   test_generate_known_facts_dictr6  e  s(   gaiilAJJqM:ajjmQVVAY7affQi168K 		!ajjmQVVAY		!M$%5{C	
aii[#%(	
aiiAJJ?G	
qyy!**aff5su=	
199aff%su-	// / /r\   c                  J   t        d      } t        |       }t        j                  |      }t	               }|j                  d |j                  D               t               |k(  sJ t               D cg c]
  } ||        }}t        ||      }t               |k(  sJ yc c}w )z)"Test that ask_generated.py is up-to-dater   c              3   ^   K   | ]%  }t        d  t        |t              D               ' yw)c              3   p   K   | ].  }t        |j                  j                  |j                         0 y wr   )r   argfunctionis_Not).0lits     rZ   	<genexpr>z8test_known_facts_consistent.<locals>.<genexpr>.<genexpr>z  s(     bNasWSWW%5%5szzBNas   46)keyN)	frozensetsortedstr)r=  cls     rZ   r?  z.test_known_facts_consistent.<locals>.<genexpr>z  s(     ymxgi9bfUW]`Nabbmxs   +-N)r)   r   r   to_CNFr5  updateclausesr   r   r   r   )r   factcnfrG  predkeysr2  s          rZ   test_known_facts_consistentrL  r  s     	sA1D
**T
CeGNNympmxmxyy G+++ 4 67 6DG 6D7'd3G!W,,, 8s   3B c            
         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 y )Nl   
>V3&Z
 rG   r   Tr   r   F)	r   r   rU   r6   r8   rR   r   r%   rJ   rv   r\   rZ   test_Add_queriesrN    s    qww+s1vqy3q619/DEFG4OOOqvvc!A$!q123t;;;qwws1Q41234===qyyQqT1Q4!456$>>>r\   c                      t        t        j                  t        dz               5  t	        t        j                  t                    rJ 	 d d d        y # 1 sw Y   y xY w)NrG   )r   r   rP   r   r   rv   r\   rZ   test_positive_assumingrP    s<    	!**QU#	$qzz!}%%%% 
%	$	$s   %AAc                  &    t        t        d        y )Nc                  ^    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V)QVV4r\   rC   	TypeErrorrv   r\   rZ   test_issue_5421rU    s    
945r\   c                  &    t        t        d        y )Nc                  4    t        t        j                        S r   )r   r   rP   rv   r\   rZ   r  z!test_issue_3906.<locals>.<lambda>  s    c!**or\   rS  rv   r\   rZ   test_issue_3906rX    s    
9-.r\   c                  *   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 y )Nr   T)r   r   rP   r0   r   rQ   rv   r\   rZ   test_issue_5833rZ    s_    qzz#a&!)$ajjm4<<<

3q619%%qzz!}5===r\   c                  H    t        t        d        t        t        d        y )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Pr\   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_6732r`    s    
:PQ
:PQr\   c            
      l	   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 y )NTFrG   r   )r   r   rP   r5   r   rQ   ri   r   r4   r!   r   r   r2   r3   rL   rO   rv   r\   rZ   test_issue_7246rb    s   qzz$q'"AJJqM2d:::qzz$q'"AJJqM2e;;;qzz$q'"AFF1I.%777qzz$q'"#+++qzz$q'"AJJqM2:::qzz$q'"AFF1I.666qzz$x1~./0D888qzz$q'"AJJqMAMM!a%4H$HITQQQqzz$q'"AJJqMAMM!a%4H$HIURRRqzz$q'"AJJqM2:::qzz$x1~./0D888qzz$q'"AMM!a%$81==Q;O$OPTXXXXqzz$q'"AMM!a%$89AAAqzz$q'"AJJqM2d:::qzz$q'"AFF1I.$666qzz$q'"AKKN3u<<<qzz$q'"#+++r\   c                      t        t        j                  t        t                    t        j
                  t                    du sJ y r   )r   r   rP   r2   r   ri   rv   r\   rZ   test_issue_7246_failingrd    s.     qzz$q'"AFF1I.$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 y )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_assumptionrg    sR   $Aqvvay>T!!!q{{1~%'''qyy|$$$t$Aqvvay>U"""q{{1~$&&&qyy|$$$T"Aqvvay>!!!qyy|$$$d#Aqzz!}%%%qzz!}&&&qvvay>T!!!'Aq}}Q E)))d#Aqzz!}&&&qzz!}%%%&Aqzz!}&&&qzz!}%%%qvvay>!!!D!Aqxx{t###4 Aqwwqz?d"""q{{1~%'''t$Aqwwqz?e###q{{1~$&&&$Aqvvay>T!!!quuQx=E!!!Aqvvay>U"""quuQx=D   T"Aqyy|$$$qvvay>U"""$Aqvvay>T!!!T"Aqyy|$$$d#Aqzz!}%%%q||A5(((%Aq||A4'''qzz!}&&&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 y )Nrd   g      @g      @g       @)r   r   rJ   rU   rV   rR   rS   rv   r\   rZ   test_issue_9636ri  	  s    qyy~&&&qwws|$$$q{{3 (((qvvc{###quuSz?"""r\   c                  @   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 y Nr   )r   r   rO   r   rL   rv   r\   rZ   test_autosimp_used_to_failrl  	  s|    q{{1a4 !)))q{{1r7#$,,,qvvad|$$$qvva1"g'''r\   c                     ddl m  G fddt              } 	 t               5  t	        d|        d d d        t        dd      }t               5  t        t        j                  d	            sJ 	 d d d        t               5  t        t        j                  |      t        j                  |            sJ 	 d d d        t        ` G d
 dt              }	  |       t        _        t        j                  j                  t              d        }t        j                  j                  t
              fd       }t        t        j                  d	            sJ t        t        j                  |      t        j                  |            sJ 	 t        `y # 1 sw Y   ixY w# 1 sw Y   5xY w# 1 sw Y   xY w# t        `w xY w# t        `w xY w)Nr   	conjunctsc                   2    e Zd Zed        Ze fd       Zy)/test_custom_AskHandler.<locals>.MersenneHandlerc                 \    t        t        j                  t        | dz   d                  ryy NrG   r   Tr   r   rJ   r0   r  s     rZ   r    z7test_custom_AskHandler.<locals>.MersenneHandler.Integer	  &    199S1-./ 0r\   c                     |  |      v ryy r   rv   r  r   ro  s     rZ   r)   z6test_custom_AskHandler.<locals>.MersenneHandler.Symbol	      y-- .r\   N)r  r  r  r  r    r)   rn  s   rZ   MersenneHandlerrq  	  s)    		 
	 
	 
	r\   ry  mersenner   Trf  r   c                       e Zd Zy)1test_custom_AskHandler.<locals>.MersennePredicateNr  rv   r\   rZ   MersennePredicater|  -	  r  r\   r}  c                 \    t        t        j                  t        | dz   d                  ryy rs  rt  r  s     rZ   r!  z!test_custom_AskHandler.<locals>._1	  ru  r\   c                     |  |      v ryy r   rv   rw  s     rZ   r!  z!test_custom_AskHandler.<locals>._5	  rx  r\   )sympy.logic.boolalgro  r   rD   r   r)   r   r   rz  r   r$  r    )ry  r   r}  r!  ro  s       @rZ   test_custom_AskHandlerr  	  sP   -* 	#%Z9 &3%#%qzz!}%%% &#%qzz!}ajjm444 & JI &(
	
		W	%	 
&	 
		V	$	 
%	 1::a=!!!1::a=!**Q-000J5 &% &%%% J$ Js^   
F> FF> !F%2F> 5F2:F> B8G	 F"F> %F/*F> 2F;7F> >G	Gc                      G d dt               } 	  |        t        _        t        j                  j                  t        t              d        }t        j                  j                  t        t        t              d        }t        t        j                  dd            sJ t        t        j                  ddd	            sJ 	 t        `y # t        `w xY w)
Nc                       e Zd Zy).test_polyadic_predicate.<locals>.SexyPredicateNr  rv   r\   rZ   SexyPredicater  A	  r  r\   r  c                 d    t        | |g      }t        fd|D              sy|d   |d   z
  dk(  S )Nc              3   \   K   | ]#  }t        t        j                  |             % y wr   r   r   rU   r=  r   r   s     rZ   r?  z5test_polyadic_predicate.<locals>._.<locals>.<genexpr>I	  !     BTs1771:{3T   ),FrG   r      rB  all)int1int2r   r   s     ` rZ   r!  z"test_polyadic_predicate.<locals>._F	  s:    4,'DBTBB7T!W$))r\   c                     t        | ||g      }t        fd|D              sy|d   |d   z
  dk(  xr |d   |d   z
  dk(  S )Nc              3   \   K   | ]#  }t        t        j                  |             % y w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	  sT    4t,-DBTBB7T!W$)Dd1gQ.?1.DDr\   r   r^   r         )r   r   	sexyprimer$  r    r   )r  r!  s     rZ   test_polyadic_predicater  ?	  s    	 #o	
		gw	/	* 
0	* 
		gw	8	E 
9	E 1;;q"%&&&1;;q"b)***KAKs   B4C Cc                      t        d      j                  J  G d dt               }  | t        d            } | t        d            }|j                  |j                  u sJ y )Nmypredicatec                       e Zd Zy)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	  sY     ]#++333i 
c%j
!C
c%j
!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 y rk  )r   r   r   r   ri   rh   nerv   r\   rZ   test_relationalr  g	  s    qttAqz166!9%%%1441:qyy|,,,1441:qvvay)))qttAqz199Q<(((r\   c                     t        t        j                  t              t        j                  t              t        j
                  t        t              z        J t        t        j                  t              t        j                  t              dt        kD  z        J t        t        j                  t              t        j                  t              t        j                  dt              z        J y rk  )r   r   r   r   rp   rP   r   gtrv   r\   rZ   test_issue_25221r  n	  s    q"AKKNQZZ!_$DEMMMq"AKKNa!e$<=EEEq"AKKNQTT!AY$>?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  rL  rN  rP  rU  rX  rZ  r`  rb  rd  rg  ri  rl  r  r  r  r  r  rv   r\   rZ   <module>r     s   2 2 2  L L .F F 1  B B "   2 2 > D D = 90 0 0 E E /  ,(,(,(&,R+*,,121424-0-&`,(^,B,*,*,*h"Ts2l , ,.. H) H)VCDL T TU: <= <=~fBR LX LX^2,',T=:;<GCT T TTD$ 8: 8:v::2.<8 & &B,0 *= *=Z%%F9
K$0=%5P*	B
/ - -?&
6/>
R
,. 7 7C'L#((V6
&)Hr\   