U
    ZÊ¹jS€ ã                   @   s$  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d„ ZXdd„ ZYdd„ ZZdd„ Z[dd„ Z\d d!„ Z]d"d#„ Z^d$d%„ Z_d&d'„ Z`d(d)„ Zad*d+„ Zbd,d-„ Zcd.d/„ Zdd0d1„ Zed2d3„ Zfd4d5„ Zgd6d7„ Zhd8d9„ ZieRd:d;„ ƒZjd<d=„ ZkeVd>d?„ ƒZld@dA„ ZmeRdBdC„ ƒZndDdE„ ZodFdG„ ZpeVdHdI„ ƒZqdJdK„ ZreVdLdM„ ƒZsdNdO„ ZtdPdQ„ ZudRdS„ ZvdTdU„ ZwdVdW„ ZxeRdXdY„ ƒZydZd[„ Zzd\d]„ Z{eVd^d_„ ƒZ|d`da„ Z}dbdc„ Z~ddde„ Zdfdg„ Z€eVdhdi„ ƒZ�djdk„ Z‚eVdldm„ ƒZƒdndo„ Z„dpdq„ Z…drds„ Z†dtdu„ Z‡dvdw„ Zˆdxdy„ Z‰dzd{„ ZŠd|d}„ Z‹d~d„ ZŒd€d�„ Z�d‚dƒ„ ZŽeSd„d…„ ƒZ�d†d‡„ Z�dˆd‰„ Z‘dŠd‹„ Z’dŒd�„ Z“dŽd�„ Z”d�d‘„ Z•d’d“„ Z–eRd”d•„ ƒZ—d–d—„ Z˜d˜d™„ Z™dšd›„ Zšdœd�„ Z›dždŸ„ Zœd d¡„ Z�d¢d£„ Zžd¤d¥„ ZŸdS )¦é    )
ÚtÚwÚxÚyÚzÚnÚkÚmÚpÚi)ÚaskÚAssumptionsContextÚQÚregister_handlerÚremove_handler)ÚassumingÚglobal_assumptionsÚ	Predicate)ÚCNFÚLiteral)Úsingle_fact_lookupÚget_known_factsÚgenerate_known_facts_dictÚget_known_facts_keys)Ú
AskHandler)Úget_all_known_factsÚget_known_facts_dict)ÚAdd)ÚIÚIntegerÚRationalÚooÚzooÚpi)ÚS)ÚPow)ÚStrÚsymbolsÚSymbol)Ú	factorial)ÚAbsÚimÚreÚsign)ÚexpÚlog)Úsqrt)ÚacosÚacotÚasinÚatanÚcosÚcotÚsinÚtan)Ú
EquivalentÚImpliesÚXorÚAndÚto_cnf)ÚMatrixÚSparseMatrix)ÚXFAILÚslowÚraisesÚwarns_deprecated_sympyÚ_both_exp_powNc                  C   sr  d} t t | ¡ƒdkst‚t t | ¡ƒdks0t‚t t | ¡ƒdksFt‚t t | ¡ƒdks\t‚t t | ¡ƒdksrt‚t t | ¡ƒdksˆt‚t t 	| ¡ƒdksžt‚t t 
| ¡ƒdks´t‚t t | ¡ƒdksÊt‚t t | ¡ƒdksàt‚t t | ¡ƒdksöt‚t t | ¡ƒdk�st‚t t | ¡ƒdk�s&t‚t t | ¡ƒdk�s>t‚t t | ¡ƒdk�sVt‚t t | ¡ƒdk�snt‚d S )Né   TF©r   r   ÚcommutativeÚAssertionErrorÚintegerÚrationalÚrealÚcomplexÚ
irrationalÚ	imaginaryÚpositiveÚnegativeÚevenÚoddÚfiniteÚprimeÚ	compositeÚ	hermitianÚantihermitian©r   © rY   úa/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/assumptions/tests/test_query.pyÚ
test_int_1   s"    r[   c                  C   sr  d} t t | ¡ƒdkst‚t t | ¡ƒdks0t‚t t | ¡ƒdksFt‚t t | ¡ƒdks\t‚t t | ¡ƒdksrt‚t t | ¡ƒdksˆt‚t t 	| ¡ƒdksžt‚t t 
| ¡ƒdks´t‚t t | ¡ƒdksÊt‚t t | ¡ƒdksàt‚t t | ¡ƒdksöt‚t t | ¡ƒdk�st‚t t | ¡ƒdk�s&t‚t t | ¡ƒdk�s>t‚t t | ¡ƒdk�sVt‚t t | ¡ƒdk�snt‚d S )Né   TFrF   rX   rY   rY   rZ   Útest_int_111   s"    r]   c                  C   sr  d} t t | ¡ƒdkst‚t t | ¡ƒdks0t‚t t | ¡ƒdksFt‚t t | ¡ƒdks\t‚t t | ¡ƒdksrt‚t t | ¡ƒdksˆt‚t t 	| ¡ƒdksžt‚t t 
| ¡ƒdks´t‚t t | ¡ƒdksÊt‚t t | ¡ƒdksàt‚t t | ¡ƒdksöt‚t t | ¡ƒdk�st‚t t | ¡ƒdk�s&t‚t t | ¡ƒdk�s>t‚t t | ¡ƒdk�sVt‚t t | ¡ƒdk�snt‚d S )Né   TFrF   rX   rY   rY   rZ   Útest_int_12E   s"    r_   c                  C   s  d} t t | ¡ƒdkst‚t t | ¡ƒd ks0t‚t t | ¡ƒd ksFt‚t t | ¡ƒdks\t‚t t | ¡ƒdksrt‚t t | ¡ƒd ksˆt‚t t 	| ¡ƒdksžt‚t t 
| ¡ƒdks´t‚t t | ¡ƒdksÊt‚t t | ¡ƒd ksàt‚t t | ¡ƒd ksöt‚t t | ¡ƒdk�st‚t t | ¡ƒd k�s&t‚t t | ¡ƒd k�s>t‚t t | ¡ƒdk�sVt‚t t | ¡ƒdk�snt‚d} t t | ¡ƒdk�sŠt‚t t | ¡ƒdk�s¢t‚t t | ¡ƒd k�sºt‚t t | ¡ƒdk�sÒt‚t t | ¡ƒdk�sêt‚t t | ¡ƒd k�st‚t t 	| ¡ƒdk�st‚t t 
| ¡ƒdk�s2t‚t t | ¡ƒdk�sJt‚t t | ¡ƒdk�sbt‚t t | ¡ƒdk�szt‚t t | ¡ƒdk�s’t‚t t | ¡ƒdk�sªt‚t t | ¡ƒdk�sÂt‚t t | ¡ƒdk�sÚt‚t t | ¡ƒdk�sòt‚t t tj¡ƒd k�st‚d S )Nç      ð?TFgaÃÓ+eÙ@)r   r   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   Úmathr#   rX   rY   rY   rZ   Útest_float_1Y   sF    rb   c                  C   sŽ  t dƒ} tt | ¡ƒdkst‚tt | ¡ƒdks4t‚tt | ¡ƒdksJt‚tt | ¡ƒdks`t‚tt | ¡ƒdksvt‚tt 	| ¡ƒdksŒt‚tt 
| ¡ƒdks¢t‚tt | ¡ƒdks¸t‚tt | ¡ƒdksÎt‚tt | ¡ƒdksät‚tt | ¡ƒdksút‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s*t‚tt | ¡ƒdk�sBt‚tt | ¡ƒdk�sZt‚tt | ¡ƒdk�srt‚tt | ¡ƒdk�sŠt‚d S )Nr   FT)r   r   r   ÚnonzerorH   ÚzerorG   rI   rJ   rK   rL   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rY   rZ   Útest_zero_0‚   s$    re   c                  C   s¦  t dƒ} tt | ¡ƒdkst‚tt | ¡ƒdks4t‚tt | ¡ƒdksJt‚tt | ¡ƒdks`t‚tt | ¡ƒdksvt‚tt 	| ¡ƒdksŒt‚tt 
| ¡ƒdks¢t‚tt | ¡ƒdks¸t‚tt | ¡ƒdksÎt‚tt | ¡ƒdksät‚tt | ¡ƒdksút‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s*t‚tt | ¡ƒdk�sBt‚tt | ¡ƒdk�sZt‚tt | ¡ƒdk�srt‚tt | ¡ƒdk�sŠt‚tt | ¡ƒdk�s¢t‚d S )NéÿÿÿÿTF)r   r   r   rc   rH   rd   rG   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rY   rZ   Útest_negativeone—   s&    rg   c                   C   sþ  t t t¡ƒdkst‚t t t¡ƒdks,t‚t t t¡ƒdksBt‚t t t¡ƒdksXt‚t t t¡ƒdksnt‚t t 	t¡ƒdks„t‚t t 
t¡ƒdksšt‚t t t¡ƒdks°t‚t t t¡ƒdksÆt‚t t t¡ƒdksÜt‚t t t¡ƒdksòt‚t t t¡ƒdk�s
t‚t t t¡ƒdk�s"t‚t t t¡ƒdk�s:t‚t t t¡ƒdk�sRt‚t t t¡ƒdk�sjt‚t t t¡ƒdk�s‚t‚t t t¡ƒdk�sšt‚t t t¡ƒdk�s²t‚t t t¡ƒdk�sÊt‚t t t¡ƒdk�sât‚t t t¡ƒdk�sút‚d S ©NTF)r   r   rG   r!   rH   rI   rJ   Ú	algebraicrK   Úextended_realrL   rM   rN   rO   Úextended_positiverP   rQ   rR   rS   ÚinfiniterT   rU   rV   rW   Úpositive_infiniteÚnegative_infiniterY   rY   rY   rZ   Útest_infinity­   s,    ro   c                  C   s  t j} tt | ¡ƒdkst‚tt | ¡ƒdks2t‚tt | ¡ƒdksHt‚tt | ¡ƒdks^t‚tt 	| ¡ƒdkstt‚tt 
| ¡ƒdksŠt‚tt | ¡ƒdks t‚tt | ¡ƒdks¶t‚tt | ¡ƒdksÌt‚tt | ¡ƒdksât‚tt | ¡ƒdksøt‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s(t‚tt | ¡ƒdk�s@t‚tt | ¡ƒdk�sXt‚tt t¡ƒdk�spt‚tt | ¡ƒdk�sˆt‚tt | ¡ƒdk�s t‚tt | ¡ƒdk�s¸t‚tt | ¡ƒdk�sÐt‚tt t ¡ƒdk�sêt‚tt t ¡ƒdk�st‚d S rh   )r$   ÚNegativeInfinityr   r   rG   rH   rI   rJ   ri   rK   rj   rL   rM   rN   rO   rP   Úextended_negativerQ   rR   rS   rl   r!   rT   rU   rV   rW   rm   rn   )ÚmmrY   rY   rZ   Útest_neg_infinityÆ   s.    rs   c                   C   s  t t t¡ƒdkst‚t t t¡ƒdks,t‚t t t¡ƒdksBt‚t t t¡ƒdksXt‚t t t¡ƒdksnt‚t t 	t¡ƒdks„t‚t t 
t¡ƒdksšt‚t t t¡ƒdks°t‚t t t¡ƒdksÆt‚t t t¡ƒdksÜt‚t t t¡ƒdksòt‚t t t¡ƒdk�s
t‚t t t¡ƒdk�s"t‚t t t¡ƒdk�s:t‚t t t¡ƒdk�sRt‚t t t¡ƒdk�sjt‚t t t¡ƒdk�s‚t‚t t t¡ƒdk�sšt‚t t t¡ƒdk�s²t‚t t t¡ƒdk�sÊt‚t t t¡ƒdk�sât‚t t t¡ƒdk�sút‚t t t¡ƒdk�st‚d S rh   )r   r   rG   r"   rH   rI   rJ   ri   rK   rj   rL   rM   rN   rO   rP   rd   rc   rQ   rR   rS   rl   rT   rU   rV   rW   rm   rn   rY   rY   rY   rZ   Útest_complex_infinityà   s.    rt   c                  C   sÔ  t j} tt | ¡ƒdkst‚tt | ¡ƒd ks2t‚tt | ¡ƒd ksHt‚tt | ¡ƒd ks^t‚tt 	| ¡ƒd kstt‚tt 
| ¡ƒd ksŠt‚tt | ¡ƒd ks t‚tt | ¡ƒd ks¶t‚tt | ¡ƒd ksÌt‚tt | ¡ƒd ksât‚tt | ¡ƒd ksøt‚tt | ¡ƒd k�st‚tt | ¡ƒd k�s(t‚tt | ¡ƒd k�s@t‚tt | ¡ƒd k�sXt‚tt | ¡ƒd k�spt‚tt | ¡ƒd k�sˆt‚tt | ¡ƒd k�s t‚tt | ¡ƒd k�s¸t‚tt | ¡ƒd k�sÐt‚d S ©NT)r$   ÚNaNr   r   rG   rH   rI   rJ   ri   rK   rj   rL   rM   rN   rO   rc   rd   rQ   rR   rS   rl   rT   rU   rV   rW   )ÚnanrY   rY   rZ   Útest_nanú   s*    rx   c                  C   s  t ddƒ} tt | ¡ƒdks t‚tt | ¡ƒdks6t‚tt | ¡ƒdksLt‚tt | ¡ƒdksbt‚tt | ¡ƒdksxt‚tt 	| ¡ƒdksŽt‚tt 
| ¡ƒdks¤t‚tt | ¡ƒdksºt‚tt | ¡ƒdksÐt‚tt | ¡ƒdksæt‚tt | ¡ƒdksüt‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s,t‚tt | ¡ƒdk�sDt‚tt | ¡ƒdk�s\t‚tt | ¡ƒdk�stt‚t ddƒ} tt | ¡ƒdk�s–t‚tt | ¡ƒdk�s®t‚t ddƒ} tt | ¡ƒdk�sÐt‚tt | ¡ƒdk�sèt‚t ddƒ} tt | ¡ƒdk�s
t‚tt | ¡ƒdk�s"t‚t ddƒ} tt | ¡ƒdk�sDt‚tt | ¡ƒdk�s\t‚t ddƒ} tt | ¡ƒdk�s~t‚tt | ¡ƒdk�s–t‚t d	dƒ} tt | ¡ƒdk�s¸t‚tt | ¡ƒdk�sÐt‚t d	dƒ} tt | ¡ƒdk�sòt‚tt | ¡ƒdk�s
t‚d S )
Né   é   TFrE   é   éýÿÿÿrf   éûÿÿÿ)r    r   r   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   )ÚrrY   rY   rZ   Útest_Rational_number  sL    







r   c                  C   sv  t dƒ} tt | ¡ƒdkst‚tt | ¡ƒdks4t‚tt | ¡ƒdksJt‚tt | ¡ƒdks`t‚tt | ¡ƒdksvt‚tt 	| ¡ƒdksŒt‚tt 
| ¡ƒdks¢t‚tt | ¡ƒdks¸t‚tt | ¡ƒdksÎt‚tt | ¡ƒdksät‚tt | ¡ƒdksút‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s*t‚tt | ¡ƒdk�sBt‚tt | ¡ƒdk�sZt‚tt | ¡ƒdk�srt‚d S )Né   TF)r0   r   r   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rY   rZ   Útest_sqrt_2B  s"    r�   c                  C   s  t j} tt | ¡ƒdkst‚tt | ¡ƒdks2t‚tt | ¡ƒdksHt‚tt | ¡ƒdks^t‚tt 	| ¡ƒdkstt‚tt 
| ¡ƒdksŠt‚tt | ¡ƒdks t‚tt | ¡ƒdks¶t‚tt | ¡ƒdksÌt‚tt | ¡ƒdksât‚tt | ¡ƒdksøt‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s(t‚tt | ¡ƒdk�s@t‚tt | ¡ƒdk�sXt‚tt | ¡ƒdk�spt‚tt | ¡ƒdk�sˆt‚t jd } tt | ¡ƒdk�sªt‚tt | ¡ƒdk�sÂt‚tt | ¡ƒdk�sÚt‚tt | ¡ƒdk�sòt‚tt 	| ¡ƒdk�s
t‚tt 
| ¡ƒdk�s"t‚tt | ¡ƒdk�s:t‚tt | ¡ƒdk�sRt‚tt | ¡ƒdk�sjt‚tt | ¡ƒdk�s‚t‚tt | ¡ƒdk�sšt‚tt | ¡ƒdk�s²t‚tt | ¡ƒdk�sÊt‚tt | ¡ƒdk�sât‚tt | ¡ƒdk�sút‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s*t‚dt j } tt | ¡ƒdk�sLt‚tt | ¡ƒdk�sdt‚tt | ¡ƒdk�s|t‚tt | ¡ƒdk�s”t‚tt 	| ¡ƒdk�s¬t‚tt 
| ¡ƒdk�sÄt‚tt | ¡ƒdk�sÜt‚tt | ¡ƒdk�sôt‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s$t‚tt | ¡ƒdk�s<t‚tt | ¡ƒdk�sTt‚tt | ¡ƒdk�slt‚tt | ¡ƒdk�s„t‚tt | ¡ƒdk�sœt‚tt | ¡ƒdk�s´t‚tt | ¡ƒdk�sÌt‚t jd } tt | ¡ƒdk�sît‚tt | ¡ƒdk�st‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s6t‚tt 	| ¡ƒdk�sNt‚tt 
| ¡ƒdk�sft‚tt | ¡ƒdk�s~t‚tt | ¡ƒdk�s–t‚tt | ¡ƒdk�s®t‚tt | ¡ƒdk�sÆt‚tt | ¡ƒdk�sÞt‚tt | ¡ƒdk�söt‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s&t‚tt | ¡ƒdk�s>t‚tt | ¡ƒdk�sVt‚tt | ¡ƒdk�snt‚dt j d } tt | ¡ƒdk�s”t‚tt | ¡ƒdk�s¬t‚tt | ¡ƒdk�sÄt‚tt | ¡ƒdk�sÜt‚tt 	| ¡ƒdk�sôt‚tt 
| ¡ƒdk�st‚tt | ¡ƒdk�s$t‚tt | ¡ƒdk�s<t‚tt | ¡ƒdk�sTt‚tt | ¡ƒdk�slt‚tt | ¡ƒdk�s„t‚tt | ¡ƒdk�sœt‚tt | ¡ƒdk�s´t‚tt | ¡ƒdk�sÌt‚tt | ¡ƒdk�sät‚tt | ¡ƒdk�süt‚tt | ¡ƒdk�st‚d S ©NTFrE   r€   )r$   ÚPir   r   rG   rH   rI   rJ   ri   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rY   rZ   Útest_piV  s´    


r„   c                  C   sŒ  t j} tt | ¡ƒdkst‚tt | ¡ƒdks2t‚tt | ¡ƒdksHt‚tt | ¡ƒdks^t‚tt 	| ¡ƒdkstt‚tt 
| ¡ƒdksŠt‚tt | ¡ƒdks t‚tt | ¡ƒdks¶t‚tt | ¡ƒdksÌt‚tt | ¡ƒdksât‚tt | ¡ƒdksøt‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s(t‚tt | ¡ƒdk�s@t‚tt | ¡ƒdk�sXt‚tt | ¡ƒdk�spt‚tt | ¡ƒdk�sˆt‚d S rh   )r$   ZExp1r   r   rG   rH   rI   rJ   ri   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rY   rZ   Útest_E·  s$    r…   c                  C   sŒ  t j} tt | ¡ƒdkst‚tt | ¡ƒdks2t‚tt | ¡ƒdksHt‚tt | ¡ƒdks^t‚tt 	| ¡ƒdkstt‚tt 
| ¡ƒdksŠt‚tt | ¡ƒdks t‚tt | ¡ƒdks¶t‚tt | ¡ƒdksÌt‚tt | ¡ƒdksât‚tt | ¡ƒdksøt‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s(t‚tt | ¡ƒdk�s@t‚tt | ¡ƒdk�sXt‚tt | ¡ƒdk�spt‚tt | ¡ƒdk�sˆt‚d S rh   )r$   ZGoldenRatior   r   rG   rH   rI   rJ   ri   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rY   rZ   Útest_GoldenRatioÌ  s$    r†   c                  C   sŒ  t j} tt | ¡ƒdkst‚tt | ¡ƒdks2t‚tt | ¡ƒdksHt‚tt | ¡ƒdks^t‚tt 	| ¡ƒdkstt‚tt 
| ¡ƒdksŠt‚tt | ¡ƒdks t‚tt | ¡ƒdks¶t‚tt | ¡ƒdksÌt‚tt | ¡ƒdksât‚tt | ¡ƒdksøt‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s(t‚tt | ¡ƒdk�s@t‚tt | ¡ƒdk�sXt‚tt | ¡ƒdk�spt‚tt | ¡ƒdk�sˆt‚d S rh   )r$   ZTribonacciConstantr   r   rG   rH   rI   rJ   ri   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rY   rZ   Útest_TribonacciConstantá  s$    r‡   c                  C   s€  t } tt | ¡ƒdkst‚tt | ¡ƒdks0t‚tt | ¡ƒdksFt‚tt | ¡ƒdks\t‚tt | ¡ƒdksrt‚tt 	| ¡ƒdksˆt‚tt 
| ¡ƒdksžt‚tt | ¡ƒdks´t‚tt | ¡ƒdksÊt‚tt | ¡ƒdksàt‚tt | ¡ƒdksöt‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s&t‚tt | ¡ƒdk�s>t‚tt | ¡ƒdk�sVt‚tt | ¡ƒdk�snt‚tt | ¡ƒdk�s†t‚dt  } tt | ¡ƒdk�s¦t‚tt | ¡ƒdk�s¾t‚tt | ¡ƒdk�sÖt‚tt | ¡ƒdk�sît‚tt | ¡ƒdk�st‚tt 	| ¡ƒdk�st‚tt 
| ¡ƒdk�s6t‚tt | ¡ƒdk�sNt‚tt | ¡ƒdk�sft‚tt | ¡ƒdk�s~t‚tt | ¡ƒdk�s–t‚tt | ¡ƒdk�s®t‚tt | ¡ƒdk�sÆt‚tt | ¡ƒdk�sÞt‚tt | ¡ƒdk�söt‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s&t‚t dt   } tt | ¡ƒdk�sJt‚tt | ¡ƒdk�sbt‚tt | ¡ƒdk�szt‚tt | ¡ƒdk�s’t‚tt | ¡ƒdk�sªt‚tt 	| ¡ƒdk�sÂt‚tt 
| ¡ƒdk�sÚt‚tt | ¡ƒdk�sòt‚tt | ¡ƒdk�s
t‚tt | ¡ƒdk�s"t‚tt | ¡ƒdk�s:t‚tt | ¡ƒdk�sRt‚tt | ¡ƒdk�sjt‚tt | ¡ƒdk�s‚t‚tt | ¡ƒdk�sšt‚tt | ¡ƒdk�s²t‚tt | ¡ƒdk�sÊt‚t t  } tt | ¡ƒdk�sêt‚tt | ¡ƒdk�st‚t  t  } tt | ¡ƒdk�s$t‚tt | ¡ƒdk�s<t‚dt  t  } tt | ¡ƒdk�s`t‚tt | ¡ƒdk�sxt‚dt  } tt | ¡ƒdk�s˜t‚tt | ¡ƒdk�s°t‚dt  } tt | ¡ƒdk�sÐt‚tt | ¡ƒdk�sèt‚dt  t  } tt | ¡ƒdk�st‚tt | ¡ƒdk�s$t‚t t d  } tt | ¡ƒdk�sHt‚tt | ¡ƒdk�s`t‚t t d  } tt | ¡ƒdk�s„t‚tt | ¡ƒdk�sœt‚t d } tt | ¡ƒdk�s¼t‚tt | ¡ƒdk�sÔt‚t d } tt | ¡ƒdk�sôt‚tt | ¡ƒdk�st‚dt  } tt | ¡ƒdk�s,t‚tt | ¡ƒdk�sDt‚t d } tt | ¡ƒdk�sdt‚tt | ¡ƒdk�s|t‚d S )NTFrE   ry   rf   r€   r   )r   r   r   rG   rH   rI   rJ   ri   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rY   rZ   Útest_Iö  s´    
rˆ   c                  C   sR3  t dƒ\} }}| | }|j\} }tt |¡t |¡ƒd ks>t‚tt | ¡ƒd ksTt‚tt | ¡t | ¡ƒdksrt‚tt | ¡t |¡ƒd ks�t‚tt | ¡t | ¡ƒdks®t‚tt | ¡t | ¡ƒd ksÌt‚tt | d ¡ƒd ksæt‚tt | d ¡t | ¡ƒdk�s
t‚| | }|j\} }tt |¡t | ¡t |¡@ ƒdk�sFt‚tt |¡t 	| ¡t |¡@ ƒdk�spt‚tt |¡t | ¡t 	|¡@ ƒdk�sšt‚tt |¡t 	| ¡t 	|¡@ ƒdk�sÄt‚tt |¡t 	| ¡t |¡@ t 	|¡ @ ƒdk�sút‚tt |¡t | ¡t 	| ¡ @ t 	|¡@ ƒdk�s0t‚tt |¡t | ¡t |¡@ t 	| ¡ @ t 	|¡ @ ƒdk�srt‚tt |¡t | ¡t |¡ @ ƒdk�sžt‚tt |¡t 	| ¡t |¡ @ ƒdk�sÊt‚tt |¡t | ¡t |¡@ ƒdk�sôt‚tt |¡t 	| ¡t |¡@ ƒdk�st‚tt |¡t 	| ¡t |¡ @ t 	|¡ @ ƒdk�sVt‚tt |¡t | ¡t 	| ¡ @ t |¡@ ƒdk�sŒt‚tt |¡t | ¡t 	| ¡ @ t |¡ @ t 	|¡ @ ƒdk�sÐt‚tt |¡t | ¡ƒd k�sðt‚tt |¡t 	| ¡ƒd k�st‚tt |¡t | ¡t 
|¡@ ƒd k�s:t‚tt |¡t 	| ¡t 
|¡@ ƒd k�sdt‚tt |¡t 	| ¡t 	|¡ @ ƒd k�s�t‚tt |¡t | ¡t 	| ¡ @ t 
|¡@ ƒd k�sÆt‚tt |¡t | ¡t 	| ¡ @ t 	|¡ @ ƒd k�sþt‚tt |¡t | ¡ t |¡ @ ƒd k�s,t‚tt |¡t | ¡t |¡ @ ƒd k�sXt‚tt |¡t | ¡ t |¡@ ƒd k�s„t‚tt |¡t | ¡t |¡@ ƒdk�s®t‚tt |¡t | ¡t |¡ @ t 
|¡ @ ƒd k�sæt‚tt |¡t | ¡ t 
| ¡ @ t |¡@ ƒd k�st‚tt |¡t | ¡ t |¡ @ t 
| ¡ @ t 
|¡ @ ƒdk�sdt‚tt |¡t |¡ ƒd k�s†t‚tt |¡t 
| ¡t |¡ @ ƒd k�s²t‚tt |¡t |¡ƒd k�sÒt‚tt |¡t 
| ¡t |¡@ ƒdk�süt‚tt |¡t 
| ¡t |¡ @ t 
|¡ @ ƒd k�s4t‚tt |¡t 
| ¡ t |¡@ ƒd k�s`t‚tt |¡t 
| ¡ t |¡ @ t 
|¡ @ ƒdk�sšt‚tt |¡ƒd k�s²t‚tt |¡t 
| ¡ƒd k�sÒt‚tt |¡t 
|¡ƒd k�sòt‚tt |¡t 
| ¡t 
|¡@ ƒd k�st‚tt |¡t 
| ¡t 
|¡ @ ƒd k�sHt‚tt |¡t 
| ¡ t 
|¡@ ƒd k�stt‚tt |¡t 
| ¡ t 
|¡ @ ƒd k�s¢t‚t dƒ\} }}| | | }|j\} }}tt |¡t | ¡t |¡@ t |¡@ ƒdk�süt‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�	s0t‚tt |¡t | ¡t |¡@ t 	|¡@ ƒdk�	sdt‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�	s˜t‚tt |¡t | ¡t |¡@ t |¡ @ ƒdk�	sÎt‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�
st‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�
s6t‚tt |¡t | ¡t |¡@ ƒd k�
s`t‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�
s”t‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�
sÈt‚tt |¡t | ¡t |¡@ t 	|¡@ ƒdk�
süt‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�s0t‚tt |¡t | ¡t |¡@ t |¡ @ ƒdk�sft‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�sšt‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�sÎt‚tt |¡t | ¡t |¡@ ƒd k�søt‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�s,t‚tt |¡t | ¡t 	|¡@ t 	|¡@ ƒdk�s`t‚tt |¡t | ¡t 	|¡@ t |¡@ ƒdk�s”t‚tt |¡t | ¡t 	|¡@ t |¡ @ ƒdk�sÊt‚tt |¡t | ¡t 	|¡@ t |¡@ ƒdk�sþt‚tt |¡t | ¡t 	|¡@ t |¡@ ƒd k�s2t‚tt |¡t | ¡t 
|¡@ t |¡@ ƒd k�sft‚tt |¡t | ¡t 	|¡@ t 
|¡@ ƒd k�sšt‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�sÎt‚tt |¡t | ¡t |¡@ t |¡ @ ƒd k�st‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�s8t‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�slt‚tt |¡t | ¡t |¡@ ƒd k�s–t‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�sÊt‚tt |¡t | ¡t |¡ @ t |¡ @ ƒd k�st‚tt |¡t | ¡t |¡ @ t |¡@ ƒd k�s8t‚tt |¡t | ¡t |¡ @ t |¡@ ƒd k�snt‚tt |¡t | ¡t |¡ @ ƒd k�sšt‚tt |¡t | ¡t |¡ @ t 
|¡@ ƒd k�sÐt‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�st‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�s8t‚tt |¡t | ¡t |¡@ ƒd k�sbt‚tt |¡t | ¡t |¡@ t 
|¡@ ƒdk�s–t‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�sÊt‚tt |¡t | ¡t |¡@ ƒd k�sôt‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�s(t‚tt |¡t | ¡ƒd k�sHt‚tt |¡t | ¡t 
|¡@ ƒd k�srt‚tt |¡t | ¡t 
|¡@ t 
|¡@ ƒd k�s¦t‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�sÚt‚tt |¡t | ¡t |¡@ t 	|¡@ ƒdk�st‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�sBt‚tt |¡t | ¡t |¡@ t |¡ @ ƒdk�sxt‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�s¬t‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�sàt‚tt |¡t | ¡t |¡@ ƒd k�s
t‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�s>t‚tt |¡t | ¡t 	|¡@ t 	|¡@ ƒdk�srt‚tt |¡t | ¡t 	|¡@ t |¡@ ƒdk�s¦t‚tt |¡t | ¡t 	|¡@ t |¡ @ ƒdk�sÜt‚tt |¡t | ¡t 	|¡@ t |¡@ ƒdk�st‚tt |¡t | ¡t 	|¡@ t |¡@ ƒd k�sDt‚tt |¡t | ¡t 	|¡@ ƒd k�snt‚tt |¡t | ¡t 	|¡@ t 
|¡@ ƒd k�s¢t‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�sÖt‚tt |¡t | ¡t |¡@ t |¡ @ ƒd k�st‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�s@t‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�stt‚tt |¡t | ¡t |¡@ ƒd k�sžt‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�sÒt‚tt |¡t | ¡t |¡ @ t |¡ @ ƒd k�s
t‚tt |¡t | ¡t |¡ @ t |¡@ ƒd k�s@t‚tt |¡t | ¡t |¡ @ t |¡@ ƒd k�svt‚tt |¡t | ¡t |¡ @ ƒd k�s¢t‚tt |¡t | ¡t |¡ @ t 
|¡@ ƒd k�sØt‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�st‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�s@t‚tt |¡t | ¡t |¡@ ƒd k�sjt‚tt |¡t | ¡t |¡@ t 
|¡@ ƒdk�sžt‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�sÒt‚tt |¡t | ¡t |¡@ ƒd k�süt‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�s0t‚tt |¡t | ¡ƒd k�sPt‚tt |¡t | ¡t 
|¡@ ƒd k�szt‚tt |¡t | ¡t 
|¡@ t 
|¡@ ƒd k�s®t‚tt |¡t 	| ¡t 	|¡@ t 	|¡@ ƒdk�sât‚tt |¡t 	| ¡t 	|¡@ t |¡@ ƒdk�st‚tt |¡t 	| ¡t 	|¡@ t |¡ @ ƒdk�sLt‚tt |¡t 	| ¡t 	|¡@ t |¡@ ƒdk�s€t‚tt |¡t 	| ¡t 	|¡@ t |¡@ ƒd k�s´t‚tt |¡t 	| ¡t 	|¡@ ƒd k�sÞt‚tt |¡t 	| ¡t 	|¡@ t 
|¡@ ƒd k�st‚tt |¡t 	| ¡t |¡@ t |¡@ ƒdk�sFt‚tt |¡t 	| ¡t |¡@ t |¡ @ ƒd k�s|t‚tt |¡t 	| ¡t |¡@ t |¡@ ƒd k�s°t‚tt |¡t 	| ¡t |¡@ t |¡@ ƒdk�sät‚tt |¡t 	| ¡t |¡@ ƒd k�st‚tt |¡t 	| ¡t |¡@ t 
|¡@ ƒd k�sBt‚tt |¡t 	| ¡t |¡ @ t |¡ @ ƒd k�szt‚tt |¡t 	| ¡t |¡ @ t |¡@ ƒd k�s°t‚tt |¡t 	| ¡t |¡ @ t |¡@ ƒd k�sæt‚tt |¡t 	| ¡t |¡ @ ƒd k�st‚tt |¡t 	| ¡t |¡ @ t 
|¡@ ƒd k�sHt‚tt |¡t 	| ¡t |¡@ t |¡@ ƒdk�s|t‚tt |¡t 	| ¡t |¡@ t |¡@ ƒd k�s°t‚tt |¡t 	| ¡t |¡@ ƒd k�sÚt‚tt |¡t 	| ¡t |¡@ t 
|¡@ ƒdk�st‚tt |¡t 	| ¡t |¡@ t |¡@ ƒd k�sBt‚tt |¡t 	| ¡t |¡@ ƒd k�slt‚tt |¡t 	| ¡t |¡@ t 
|¡@ ƒd k�s t‚tt |¡t 	| ¡ƒd k�sÀt‚tt |¡t 	| ¡t 
|¡@ ƒd k�sêt‚tt |¡t 	| ¡t 
|¡@ t 
|¡@ ƒd k�st‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�sRt‚tt |¡t | ¡t |¡@ t |¡ @ ƒd k�sˆt‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�s¼t‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�sðt‚tt |¡t | ¡t |¡@ ƒd k�st‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�sNt‚tt |¡t | ¡t |¡ @ t |¡ @ ƒd k�s†t‚tt |¡t | ¡t |¡ @ t |¡@ ƒd k�s¼t‚tt |¡t | ¡t |¡ @ t |¡@ ƒd k�sòt‚tt |¡t | ¡t |¡ @ ƒd k� st‚tt |¡t | ¡t |¡ @ t 
|¡@ ƒd k� sTt‚tt |¡t | ¡t |¡@ t |¡@ ƒd k� sˆt‚tt |¡t | ¡t |¡@ t |¡@ ƒd k� s¼t‚tt |¡t | ¡t |¡@ ƒd k� sæt‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�!st‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�!sNt‚tt |¡t | ¡t |¡@ ƒd k�!sxt‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�!s¬t‚tt |¡t | ¡ƒd k�!sÌt‚tt |¡t | ¡t 
|¡@ ƒd k�!söt‚tt |¡t | ¡t 
|¡@ t 
|¡@ ƒd k�"s*t‚tt |¡t | ¡ t |¡ @ t |¡ @ ƒd k�"sdt‚tt |¡t | ¡ t |¡@ t |¡ @ ƒd k�"sœt‚tt |¡t | ¡ t |¡ @ t |¡@ ƒd k�"sÔt‚tt |¡t | ¡ t |¡ @ ƒd k�#st‚tt |¡t | ¡ t |¡ @ t 
|¡@ ƒd k�#s:t‚tt |¡t | ¡ t |¡@ t |¡@ ƒd k�#spt‚tt |¡t | ¡ t |¡@ t |¡@ ƒd k�#s¦t‚tt |¡t | ¡ t |¡@ ƒd k�#sÒt‚tt |¡t | ¡ t |¡@ t 
|¡@ ƒd k�$st‚tt |¡t | ¡ t |¡@ t |¡@ ƒd k�$s>t‚tt |¡t | ¡ t |¡@ ƒd k�$sjt‚tt |¡t | ¡ t |¡@ t 
|¡@ ƒd k�$s t‚tt |¡t | ¡ ƒd k�$sÂt‚tt |¡t | ¡ t 
|¡@ ƒd k�$sît‚tt |¡t | ¡ t 
|¡@ t 
|¡@ ƒd k�%s$t‚tt |¡t | ¡t |¡@ t |¡@ ƒdk�%sXt‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�%sŒt‚tt |¡t | ¡t |¡@ ƒd k�%s¶t‚tt |¡t | ¡t |¡@ t 
|¡@ ƒdk�%sêt‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�&st‚tt |¡t | ¡t |¡@ ƒd k�&sHt‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�&s|t‚tt |¡t | ¡ƒd k�&sœt‚tt |¡t | ¡t 
|¡@ ƒd k�&sÆt‚tt |¡t | ¡t 
|¡@ t 
|¡@ ƒdk�&sút‚tt |¡t | ¡t |¡@ t |¡@ ƒd k�'s.t‚tt |¡t | ¡t |¡@ ƒd k�'sXt‚tt |¡t | ¡t |¡@ t 
|¡@ ƒd k�'sŒt‚tt |¡t | ¡ƒd k�'s¬t‚tt |¡t | ¡t 
|¡@ ƒd k�'sÖt‚tt |¡t | ¡t 
|¡@ t 
|¡@ ƒd k�(s
t‚tt |¡ƒd k�(s"t‚tt |¡t 
|¡ƒd k�(sBt‚tt |¡t 
|¡t 
|¡@ ƒd k�(slt‚tt |¡t 
| ¡t 
|¡@ t 
|¡@ ƒd k�(s t‚tt d|  ¡ƒd k�(s¼t‚tt d|  ¡t | ¡ƒdk�(sàt‚t dƒ\} }}| | }|j\} }tt |¡t | ¡t |¡@ ƒdk�)s*t‚tt |¡t | ¡t |¡ @ ƒdk�)sVt‚tt |¡t | ¡ƒd k�)svt‚tt |¡t | ¡ t |¡@ ƒdk�)s¢t‚tt |¡t | ¡ t |¡ @ ƒdk�)sÐt‚tt |¡t | ¡ ƒd k�)sòt‚tt |¡t |¡ƒd k�*st‚tt |¡t |¡ ƒd k�*s4t‚tt |¡ƒd k�*sLt‚| | | }|j\} }}tt |¡t | ¡t |¡@ t |¡@ ƒdk�*s˜t‚tt |¡t | ¡t |¡@ t |¡ @ ƒdk�*sÎt‚tt |¡t | ¡t |¡@ ƒd k�*søt‚tt |¡t | ¡t |¡ @ t |¡@ ƒdk�+s.t‚tt |¡t | ¡t |¡ @ t |¡ @ ƒdk�+sft‚tt |¡t | ¡t |¡ @ ƒd k�+s’t‚tt |¡t | ¡t |¡@ ƒd k�+s¼t‚tt |¡t | ¡t |¡ @ ƒd k�+sèt‚tt |¡t | ¡ƒd k�,st‚tt |¡t | ¡ t |¡@ t |¡@ ƒdk�,s>t‚tt |¡t | ¡ t |¡@ t |¡ @ ƒdk�,svt‚tt |¡t | ¡ t |¡@ ƒd k�,s¢t‚tt |¡t | ¡ t |¡ @ t |¡@ ƒdk�,sÚt‚tt |¡t | ¡ t |¡ @ t |¡ @ ƒdk�-st‚tt |¡t | ¡ t |¡ @ ƒd k�-sBt‚tt |¡t | ¡ t |¡@ ƒd k�-snt‚tt |¡t | ¡ t |¡ @ ƒd k�-sœt‚tt |¡t | ¡ ƒd k�-s¾t‚tt |¡t |¡t |¡@ ƒd k�-sèt‚tt |¡t |¡t |¡ @ ƒd k�.st‚tt |¡t |¡ƒd k�.s4t‚tt |¡t |¡ t |¡@ ƒd k�.s`t‚tt |¡t |¡ t |¡ @ ƒd k�.sŽt‚tt |¡t |¡ ƒd k�.s°t‚tt |¡t |¡ƒd k�.sÐt‚tt |¡t |¡ ƒd k�.sòt‚tt |¡t |¡ t | ¡@ t |¡@ t |¡@ ƒd k�/s2t‚tt |¡t | ¡t |¡ @ t |¡@ t |¡ @ t |¡@ ƒdk�/s~t‚t dƒ\} }}tt | d ¡ƒd k�/s¨t‚tt d|  ¡ƒd k�/sÄt‚tt d|  ¡t | ¡ƒdk�/sèt‚tt | |  ¡ƒd k�0st‚tt tj|  ¡ƒd k�0s"t‚tt tj|  ¡t 
| ¡ƒdk�0sHt‚tt tj|  ¡t | ¡ƒd k�0snt‚tt d|  ¡t | ¡ƒdk�0s’t‚tt t| ƒ¡ƒd k�0s®t‚tt d|  ¡t | ¡ ƒdk�0sÔt‚tt | d ¡t | ¡ ƒdk�0sút‚tt t| ƒ¡ƒdk�1st‚tt t| ƒ¡t | ¡ ƒdk�1s<t‚tt t| ƒ¡ƒd k�1sXt‚tt t| ƒ¡t | ¡ƒd k�1s|t‚tt t| ƒ¡t | ¡ ƒdk�1s¢t‚tt t| ƒ¡t | ¡ƒdk�1sÆt‚tt t| ƒ¡t | ¡ƒdk�1sêt‚tt t| ƒ¡ƒd k�2st‚tt t| ƒ¡t | ¡ƒdk�2s*t‚tt tdƒ¡ƒdk�2sFt‚tt t| ƒ¡ƒdk�2sbt‚tt t| ƒ¡t | ¡ ƒdk�2sˆt‚tt t| ƒ¡ƒdk�2s¤t‚tt t| ƒ¡t | ¡ ƒdk�2sÊt‚tt dt| ƒ ¡ƒdk�2sêt‚tt t| ƒd ¡ƒdk�3s
t‚tt t| ƒd ¡ƒdk�3s*t‚tt t| ƒt| ƒ ¡ƒdk�3sNt‚d S )Nzx,y,zTrE   Fr€   )r'   Úargsr   r   rS   rm   rH   rL   rj   rO   rk   rP   rn   rq   Zextended_nonzeror$   ZHalfr0   r-   r/   rd   rl   r.   r7   r5   )r   r   r   ÚarY   rY   rZ   Útest_bounded`  sŠ   
$
****
ÿÿ
ÿÿ
(
ÿÿ
,,ÿÿ
ÿÿ

ÿÿ
ÿÿ
*
ÿÿ
  ÿÿ
ÿÿ
,ÿÿ

ÿÿ
.
ÿÿ
ÿÿ
ÿÿ

ÿÿ
 ÿÿ
 
ÿ
ÿÿ
"
ÿÿ
 ÿÿ

ÿ
ÿÿ
ÿÿ
 
ÿÿ
  ÿÿ

ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
*ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
*ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
,ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
 ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
*ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
*ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
,ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
 ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
*ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
,ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
 ÿÿ
ÿÿ
ÿÿÿ
ÿ
ÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ

ÿ
ÿÿ

ÿÿÿ

ÿÿÿ

ÿÿ

ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ
 ÿÿ
ÿÿÿ
 
ÿÿ

ÿÿ
 ÿÿ
. ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
"ÿÿ
ÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ
 ÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ
 ÿÿ
ÿÿÿ
 ÿÿ
ÿÿÿ
$
*, ,." "ÿÿ

ÿÿ
*ÿÿ

ÿÿ
,*, ÿÿ

ÿÿ
, ÿÿ
 
ÿÿ
.,."*, ,." "ÿÿÿ
ÿ
ÿþþ
$&&$&&&$&$$$&&   r‹   c                   C   s@   t t ttƒt ¡ƒdkst‚t t ttƒt ¡ƒdks<t‚dS )z4We need to support relations in ask for this to workTN)r   r   rS   r7   r   rH   r5   rY   rY   rY   rZ   Útest_bounded_xfailV  s    rŒ   c                   C   s²  t t t¡ƒdkst‚t t t¡t t¡ ƒdks6t‚t t t¡t t¡ƒdksTt‚t t t¡t t¡ƒdksrt‚t t t¡t t¡ƒdks�t‚t t t¡t t¡ƒdks®t‚t t t¡t t	¡ ƒdksÎt‚t t dt ¡ƒdksèt‚t t dt ¡t t¡ ƒdk�st‚t t td ¡ƒdk�s*t‚t t td ¡t t¡ ƒdk�sPt‚t t td ¡ƒdk�slt‚t t td ¡t t¡ ƒdk�s’t‚t t t
tƒ¡ƒdk�s®t‚dS )zdBy default objects are Q.commutative that is why it returns True
    for both key=True and key=FalseTFr€   rE   N)r   r   rG   r   rH   rL   rN   rK   rO   r   r/   rY   rY   rY   rZ   Útest_commutative]  s      &&&r�   c                   C   sö  t t t¡ƒd kst‚t t t¡t t¡ƒdks4t‚t t t¡t t¡ƒd ksRt‚t t t¡t t¡ ƒdksrt‚t t t¡t t¡ƒdks�t‚t t t¡t t¡ ƒd ks°t‚t t t¡t t¡ƒdksÎt‚t t t¡t t¡ƒdksìt‚t t t¡t 	t¡ƒdk�st‚t t t¡t 
t¡ƒdk�s,t‚t t t¡t t¡ƒdk�sLt‚t t td ¡t t¡ƒdk�spt‚t t td ¡t t¡ƒdk�s”t‚t t td ¡t t¡ƒdk�s¸t‚t t td ¡t t¡ƒdk�sÜt‚t t td ¡t 
t¡ƒdk�s t‚t t td ¡t t¡ƒdk�s$t‚t t td ¡t t¡ƒdk�sHt‚t t td ¡t t¡ƒdk�slt‚t t tt ¡t t¡t t¡@ ƒdk�sšt‚t t tt ¡t t¡t 
t¡@ ƒdk�sÈt‚t t dt d ¡t t¡ƒdk�sðt‚t t dt d ¡t t¡ƒdk�st‚t t dt d ¡t 	t¡ƒdk�s@t‚t t dt d ¡t t¡ƒdk�sht‚t t dt d ¡t t¡ƒdk�s�t‚t t dt d ¡t 
t¡ƒdk�s¸t‚t t dt d ¡t t¡ƒdk�sàt‚t t dt d ¡t t¡ƒdk�st‚t t dt d ¡t t¡ƒdk�s0t‚t t td ¡t t¡ƒdk�sTt‚t t td ¡t t¡ƒdk�sxt‚t t td ¡t 	t¡ƒdk�sœt‚t t td ¡t t¡ƒdk�sÀt‚t t td ¡t t¡ƒdk�sät‚t t td ¡t 
t¡ƒdk�st‚t t td ¡t t¡ƒdk�s,t‚t t td ¡t t¡ƒdk�sPt‚t t td ¡t t¡ƒdk�stt‚t t dt ¡t t¡ƒdk�s˜t‚t t dt ¡t t¡ƒdk�s¼t‚t t dt ¡t 	t¡ƒdk�sàt‚t t dt ¡t t¡ƒdk�st‚t t dt ¡t t¡ƒdk�s(t‚t t dt ¡t 
t¡ƒdk�sLt‚t t dt ¡t t¡ƒdk�spt‚t t dt ¡t t¡ƒdk�s”t‚t t dt ¡t t¡ƒdk�s¸t‚t t tt ¡t t¡t t¡@ ƒdk�sæt‚t t ttƒ¡ƒdk�st‚t t tdt d ƒ¡ƒdk�s&t‚t t ttƒ¡ƒdk�sBt‚t t tdt d ƒ¡ƒdk�sft‚t t ttƒ¡ƒdk�s‚t‚t t ttƒ¡ƒdk�sžt‚t t ttƒ¡ƒdk�sºt‚t t ttƒ¡ƒdk�sÖt‚t t ttƒ¡ƒdk�sòt‚d S r‚   )r   r   rL   r   rH   r   rK   rJ   rM   rO   rN   ri   rI   rQ   rR   r7   r5   r.   r*   r,   r+   rY   rY   rY   rZ   Útest_complext  st         $$$$$$$$..((((((((($$$$$$$$$$$$$$$$$$.$$rŽ   c                   C   sŽ  t t t¡ƒd kst‚t t t¡t t¡ƒd ks4t‚t t t¡t t¡ ƒdksTt‚t t t¡t t¡ƒd ksrt‚t t t¡t t¡ƒd ks�t‚t t dt ¡ƒd ksªt‚t t dt ¡t t¡ƒdksÌt‚t t dt ¡t t¡ƒdksît‚t t dt ¡t t¡ƒdk�st‚t t dt ¡t 	t¡ƒdk�s6t‚t t dt ¡t t¡ ƒd k�s\t‚t t dt ¡t t¡ƒd k�s€t‚t t dt ¡t t¡ƒdk�s¤t‚t t dt ¡t 	t¡ƒdk�sÈt‚t t td ¡t 	t¡ƒdk�sìt‚t t td ¡t t¡ƒdk�st‚t t td ¡t 	t¡ƒdk�s4t‚t t td ¡t t¡ƒdk�sXt‚t t dt ¡t 	t¡ƒdk�s|t‚t t dt ¡t 	t¡ƒdk�s t‚t t tt
 ¡t 	t¡t 	t
¡@ ƒdk�sÎt‚t t tt
 ¡t 	t¡t t
¡@ ƒdk�süt‚t t tt
 ¡t t¡t t
¡@ ƒdk�s*t‚t t dt d ¡t t¡ƒdk�sRt‚t t dt t
 ¡t t¡t t¡@ ƒd k�s„t‚t t dt t
 ¡t t¡t t¡@ ƒd k�s¶t‚t t tt
 t ¡t 	t¡t 	t
¡@ t t¡@ ƒdk�sòt‚t t tt
 t t ¡t 	t¡t 	t
¡@ t t¡@ t t¡@ ƒd k�s<t‚t t ttƒ¡t t¡ƒdk�s`t‚t t ttƒ¡t t¡ ƒd k�s†t‚t t ttƒ¡t t¡ƒdk�sªt‚t t ttƒ¡t t¡ ƒd k�sÐt‚t t ttƒ¡t t¡ƒdk�sôt‚t t ttƒ¡t t¡ƒdk�st‚t t dt ¡t t¡ƒdk�s<t‚t t td ¡t t¡ƒdk�s`t‚t t td ¡t 	t¡ƒdk�s„t‚t t dt ¡t t¡ƒd k�s¨t‚t t td ¡ƒd k�sÄt‚t t tt ¡t t¡t t¡@ t t¡ @ ƒd k�sþt‚t t tt ¡t 	t¡t t¡@ t t¡ @ ƒdk�s8t‚t t tt ¡t t¡t t¡@ t t¡@ ƒdk�spt‚t t tt ¡t 	t¡t t¡@ t t¡@ ƒdk�s¨t‚t t tt ¡t t¡t t¡@ t t¡ @ ƒd k�sât‚t t tt ¡t t¡t t¡@ t t¡@ ƒd k�st‚t t tt ¡t 	t¡t t¡@ t t¡ @ ƒd k�sTt‚t t tt ¡t 	t¡t t¡@ t t¡@ ƒd k�sŒt‚t t tt ¡t t¡ƒd k�s°t‚t t tt ¡t 	t¡ƒd k�sÔt‚t t tt
 ¡t t¡t t
¡@ ƒd k�st‚t t tt ¡t t¡ƒd k�s&t‚t t ttt
  ¡t t¡t 	t
¡@ ƒdk�sXt‚t t ttt
  ¡t t¡t t
¡@ ƒd k�sŠt‚d S )NFr€   Try   rE   é   rf   )r   r   rQ   r   rH   rI   rJ   rO   rM   rR   r   r   r   r*   r,   r+   rK   r   r   r	   rP   r
   rY   rY   rY   rZ   Útest_even_queryÀ  sr     ""$$&$$$$$$$$$...(22<&ÿÿ
$&$&$$$$$$::88:8:8$$.$2r�   c                   C   s€   t t tt tt  ¡t t¡t t¡@ t t¡@ ƒdks>t‚t t tt tt  ¡t t¡t t¡@ t t¡@ ƒdks|t‚d S ru   )	r   r   rQ   r   r   r   rI   rR   rH   rY   rY   rY   rZ   Ú1test_evenness_in_ternary_integer_product_with_odd  s    >r‘   c                   C   sB   t t tt tt  ¡t t¡t t¡@ t t¡@ ƒd ks>t‚d S ©N)r   r   rQ   r   r   r   rI   rH   rY   rY   rY   rZ   Ú2test_evenness_in_ternary_integer_product_with_even  s    r“   c                   C   s  t t t¡t t¡ƒdkst‚t t t¡t t¡ƒdks<t‚t t t¡t t¡ƒdksZt‚t t t¡t t¡ƒdksxt‚t t t¡t 	t¡ƒdks–t‚t t t ¡t t¡ƒdks¶t‚t t t ¡t t¡ƒdksÖt‚t t tt
j ¡t t¡ƒdksút‚t t t¡t t¡ƒd k�st‚d S ru   )r   r   rj   r   rm   rH   rO   rd   rP   rn   r$   ÚInfinityrK   rl   rY   rY   rY   rZ   Útest_extended_real  s      $r•   c                  C   sÔ  t t t¡t t¡ƒdkst‚t t t¡t t¡ƒdks<t‚t t t¡t t¡ƒd ksZt‚t t t¡t t¡ƒd ksxt‚t t t¡t 	t¡ƒd ks–t‚t t t¡t 
t¡ƒd ks´t‚t t t¡t t¡ ƒdksÔt‚t t dt ¡t t¡ƒdksöt‚t t dt ¡t t¡ƒdk�st‚t t dt ¡t t¡ƒdk�s>t‚t t dt ¡t t¡ƒdk�sbt‚t t dt ¡t t¡ƒdk�s†t‚t t td ¡t t¡ƒdk�sªt‚t t td ¡t t¡ƒdk�sÎt‚t t td ¡t t¡ƒdk�sòt‚t t td ¡t t¡ƒdk�st‚t t td ¡t t¡ƒdk�s:t‚t t dt ¡t t¡ƒdk�s^t‚t t dt ¡t t¡ƒdk�s‚t‚t t dt ¡t t¡ƒdk�s¦t‚t t dt ¡t t¡ƒdk�sÊt‚t t dt ¡t t¡ƒdk�sît‚t t dt ¡t t¡ƒdk�st‚t t dt ¡t t¡ƒdk�s6t‚t t dt ¡t t¡ƒdk�sZt‚t t dt ¡t t¡ƒdk�s~t‚t t dt ¡t t¡ƒdk�s¢t‚t t t¡t t¡ ƒdk�sÄt‚t t tt ¡t t¡t t¡@ ƒd k�sòt‚t t tt ¡t t¡t t¡@ ƒdk�s t‚t t tt ¡t t¡t t¡@ ƒdk�sNt‚t t tt ¡t t¡t t¡@ ƒdk�s|t‚t t tt ¡t t¡t t¡@ ƒdk�sªt‚t t tt ¡t t¡t t¡@ ƒdk�sØt‚ttttttfD ]´} t t | dƒ¡ƒdk�st‚t t | ddd�¡ƒdk�s(t‚t t | ddd�¡ƒdk�sHt‚t t | tƒ¡t t¡ƒd k�slt‚t t | tƒ¡t t¡t 
t¡@ ƒdk�sèt‚�qèttfD ]¸}t t |dƒ¡ƒdk�sÆt‚t t |ddd�¡ƒdk�sæt‚t t |ddd�¡ƒdk�st‚t t |tƒ¡t t¡ƒd k�s*t‚t t |tƒ¡t t¡t 
td ¡@ ƒdk�s¦t‚�q¦ttfD ]f}t t |dƒ¡ƒdk�sˆt‚t t |ddd�¡ƒdk�s¨t‚t t |tƒ¡t t¡ƒdk�sht‚�qhd S )NTFr€   rE   r�   ©Úevaluater   )r   r   rJ   r   rI   rH   rM   rK   rO   rP   rc   ri   rQ   rR   r   r.   r7   r8   r3   r4   r5   r/   r1   r6   r2   ©ÚfÚgÚhrY   rY   rZ   Útest_rational"  sd     "$$$$$$$$$$$$$$$$$$$"......  $2  $6 rœ   c                   C   sX  t t t¡ƒd kst‚t t t¡t t¡ƒd ks4t‚t t t¡t t¡ƒdksRt‚t t t¡t t¡ƒdkspt‚t t t¡t t¡ƒdksŽt‚t t t¡t 	t¡ƒdks¬t‚t t td ¡t t¡ƒd ksÎt‚t t td ¡t 
t¡ƒd ksðt‚t t td ¡t t¡ƒdk�st‚t t td ¡t t¡ƒdk�s8t‚t t td ¡t t¡ƒdk�s\t‚t t tt ¡t t¡ƒd k�s€t‚t t tt ¡t 
t¡ƒd k�s¤t‚t t tt ¡t t¡ƒdk�sÈt‚t t tt ¡t t¡ƒd k�sìt‚t t tt ¡t t¡ƒdk�st‚t t tt ¡t t¡t t¡@ ƒd k�s>t‚t t tt ¡t t¡t 
t¡@ ƒd k�slt‚t t tt ¡t t¡t t¡@ ƒd k�sšt‚t t tt ¡t t¡t t¡@ ƒd k�sÈt‚t t tt ¡t t¡t t¡@ ƒd k�söt‚t t tt ¡t t¡t 
t¡@ ƒd k�s$t‚t t tt ¡t t¡t t¡@ ƒdk�sRt‚t t tt ¡t t¡t t¡@ ƒdk�s€t‚t t tt ¡t t¡t t¡@ ƒdk�s®t‚t t tt ¡t t¡t 
t¡@ ƒd k�sÜt‚t t tt ¡t t¡t t¡@ ƒd k�s
t‚t t tt ¡t t¡t t¡@ ƒdk�s8t‚t t tt ¡t t¡t 
t¡@ ƒd k�sft‚t t tt ¡t t¡t t¡@ ƒdk�s”t‚t t tt ¡t t¡ƒdk�s¸t‚t t tt ¡t 
t¡ƒd k�sÜt‚t t tt ¡t t¡ƒdk�s t‚t t tt ¡t t¡ƒdk�s$t‚t t tt ¡t t¡ƒdk�sHt‚t t tt ¡t t¡t t¡@ ƒdk�svt‚t t tt t ¡t t¡t t¡@ t t¡@ ƒdk�s²t‚t t tt t ¡t t¡t t¡@ t t¡@ ƒdk�sît‚t t tt t ¡t t¡t t¡@ t t¡@ ƒd k�s*t‚t t tt t ¡t t¡t t¡@ t t¡@ ƒd k�sft‚t t t¡ƒd k�s~t‚t t t¡t t¡ƒdk�sžt‚t t t¡t t¡ƒdk�s¾t‚t t td ¡t t¡ƒdk�sât‚t t td ¡t 
t¡ƒd k�st‚t t td ¡t t¡ƒd k�s*t‚t t td ¡t t¡ƒdk�sNt‚t t td ¡t t¡ƒd k�srt‚t t tt ¡t t¡ƒdk�s–t‚t t tt ¡t 
t¡ƒd k�sºt‚t t tt ¡t t¡ƒd k�sÞt‚t t tt ¡t t¡ƒdk�st‚t t tt ¡t t¡ƒdk�s&t‚t t t¡t 	t¡ƒdk�sFt‚t t tt ¡t t¡t t¡@ ƒdk�stt‚t t tt ¡t t¡t 
t¡@ ƒd k�s¢t‚t t tt ¡t t¡t t¡@ ƒd k�sÐt‚t t tt ¡t t¡t t¡@ ƒdk�sþt‚t t tt ¡t t¡t t¡@ ƒdk�	s,t‚t t tt ¡t t¡t 
t¡@ ƒd k�	sZt‚t t tt ¡t t¡t t¡@ ƒd k�	sˆt‚t t tt ¡t t¡t t¡@ ƒd k�	s¶t‚t t tt ¡t t¡t t¡@ ƒd k�	sät‚t t tt ¡t t¡t 
t¡@ ƒd k�
st‚t t tt ¡t t¡t t¡@ ƒdk�
s@t‚t t tt ¡t t¡t t¡@ ƒdk�
snt‚t t tt ¡t t¡t 
t¡@ ƒd k�
sœt‚t t tt ¡t t¡t t¡@ ƒd k�
sÊt‚t t tt ¡t t¡ƒdk�
sît‚t t tt ¡t t¡ƒdk�st‚t t tt ¡t 
t¡ƒd k�s6t‚t t tt ¡t t¡t t¡@ ƒdk�sdt‚t t tt t ¡t t¡t t¡@ t t¡@ ƒd k�s t‚t t tt t ¡t t¡t t¡@ t t¡@ ƒd k�sÜt‚t t tt t ¡t t¡t t¡@ t t¡@ ƒdk�st‚t t tt t ¡t t¡t t¡@ t t¡@ ƒdk�sTt‚d S )NFTrE   )r   r   rV   r   rH   rW   rN   rT   rK   rd   rL   r   r   r   rY   rY   rY   rZ   Útest_hermitianb  s(   ""$$$$$$$$ ÿÿ
. ÿÿ
...........$$$$$. ÿÿ
ÿÿ
ÿÿ
ÿÿ
  $$$$$$$$$$  ÿþ
 ÿÿ
 ÿÿ
 ÿÿ
"ÿ
."ÿ
 ÿÿ
......$$$.ÿÿ
ÿÿ
ÿÿ
ÿÿr�   c                  C   s^
  t t t¡ƒd kst‚t t t¡t t¡ƒdks4t‚t t t¡t t¡ƒdksRt‚t t td ¡t t¡ƒdkstt‚t t td ¡t t¡ƒdks–t‚t t tt ¡t t¡ƒdks¸t‚t t tt ¡t t¡ƒdksÚt‚t t tt ¡t t¡t t¡@ ƒdk�st‚t t tt ¡t t¡t t¡@ ƒdk�s6t‚t t tt ¡t t¡t t¡@ ƒdk�sdt‚t t tt ¡t 	t¡t t¡@ ƒd k�s’t‚t t tt t
 ¡t t¡t t¡@ t t
¡@ ƒdk�sÎt‚t t tt t
 ¡t t¡t t¡@ t t
¡@ ƒd k�s
t‚t t tt t
 ¡t t¡t t¡@ t t
¡@ ƒdk�sFt‚t t tt ¡t t¡ƒdk�sjt‚t t tt ¡t t¡ƒdk�sŽt‚t t tt ¡t 	t¡ƒd k�s²t‚t t tt ¡t t¡t t¡@ ƒdk�sàt‚t t tt ¡t t¡t t¡@ ƒdk�st‚t t tt ¡t t¡ƒd k�s2t‚t t tt ¡t t¡ƒd k�sVt‚t t tt ¡t t¡ƒdk�szt‚t t tt ¡t t¡ƒdk�sžt‚t t tt ¡t t¡ƒdk�sÂt‚t t dt t ¡t t¡ƒdk�sêt‚t t td ¡t t¡ƒdk�st‚t t tt ¡t t¡t t¡@ ƒd k�s<t‚t t tt ¡t t¡t t¡@ ƒd k�sjt‚t t tt ¡t t¡t t¡@ ƒd k�s˜t‚t t tt ¡t t¡t t¡@ ƒd k�sÆt‚t t tt ¡t t¡t t¡@ ƒd k�sôt‚t t tt ¡t t¡t t¡@ ƒd k�s"t‚t t tt ¡t t¡t t¡@ ƒdk�sPt‚t t tt ¡t t¡t t¡@ ƒd k�s~t‚t t tt ¡t t¡t t¡@ ƒdk�s¬t‚t t tt ¡t t¡t t¡@ ƒdk�sÚt‚t t tt ¡t t¡t t¡@ ƒdk�st‚t t tt ¡t t¡t t¡@ ƒd k�s6t‚t t tt ¡t t¡t t¡@ t t¡ @ ƒdk�spt‚t t tt ¡t t¡t t¡@ ƒd k�sžt‚t t tt ¡t t¡t t¡@ t dt ¡@ ƒdk�sÚt‚t t tt ¡t t¡t t¡@ t dt ¡ @ ƒdk�st‚t t tt ¡t t¡t t¡@ ƒd k�sFt‚t t tt ¡t t¡t t¡@ t dt ¡ @ ƒdk�s„t‚t t tt ¡t t¡t t¡@ t dt ¡@ ƒd k�sÀt‚t t ttƒ¡ƒdk�sÜt‚t t tdt ƒ¡ƒdk�süt‚t t ttd ƒ¡ƒdk�st‚t t ttƒ¡t 	t¡ƒd k�s@t‚t t ttƒ¡t t¡ƒd k�sdt‚t t ttƒ¡t t¡ƒdk�sˆt‚t t tttƒƒ¡t 	t¡ƒd k�s°t‚t t tttƒƒ¡t t¡ƒd k�sØt‚t t tttƒƒ¡ƒdk�søt‚t t ttƒt ¡t t¡ƒdk�	s t‚tttt t dd�tdd�} t t | ¡t t¡ƒdk�	s^t‚tttt t d dd�tdd�} t t | ¡t t¡ƒdk�	s t‚t t tdt t t ƒt ¡t t¡ƒdk�	sÔt‚t t tdt t dd�¡ƒdk�	süt‚t t ttt d dd�¡ƒdk�
s$t‚t t tttddƒƒ¡t t¡t t¡@ ƒdk�
sZt‚d S )	NFrE   Tr€   r   r–   ry   rz   )r   r   rN   r   rH   rK   rT   r   r   rL   r   rP   rO   rQ   rR   rI   rJ   r/   r.   r%   r#   r    ©ÚeqrY   rY   rZ   Útest_imaginaryË  s˜    """".... ÿÿ
ÿÿ
ÿÿ
$$$..$$$$$($............:.<>.><  $$$(( ( " 4((r    c                   C   sR  t t t¡ƒd kst‚t t t¡t t¡ƒdks4t‚t t t¡t t¡ ƒdksTt‚t t t¡t t¡ ƒdkstt‚t t t¡t t¡ ƒd ks”t‚t t t¡t t¡t t¡B ƒdks¼t‚t t dt ¡t t¡ƒdksÞt‚t t dt ¡t t¡ƒdk�st‚t t dt ¡t 	t¡ƒdk�s&t‚t t dt ¡t 
t¡ƒd k�sJt‚t t dt ¡t t¡ƒd k�snt‚t t tdƒt ¡t t¡ƒdk�s–t‚t t tdƒt ¡t t¡ƒd k�s¾t‚t t td ¡t t¡ƒdk�sât‚t t td ¡t t¡ƒdk�st‚t t td ¡t t¡ƒd k�s*t‚t t td ¡t t¡ƒd k�sNt‚d S )NTFr€   ry   )r   r   rI   r   rH   rK   rO   rQ   rR   rT   rJ   r0   rM   rY   rY   rY   rZ   Útest_integer  s"       ("$$$$(($$$r¡   c                   C   sT  t t t¡t t¡ƒdkst‚t t t¡t t¡ƒdks<t‚t t t¡t t¡ ƒdks\t‚t t t¡t t¡ƒdkszt‚t t t¡t t¡ ƒd ksšt‚t t t ¡t t¡ƒdksºt‚t t t ¡t t¡ ƒd ksÜt‚t t t ¡t t¡ƒdksüt‚t t t ¡t t¡ƒdk�st‚t t td ¡t t¡ƒdk�sBt‚t t tt ¡ƒd k�s^t‚t t tt ¡t t¡ƒd k�s‚t‚t t tt ¡t t¡t t¡@ ƒdk�s°t‚t t tt ¡t t¡t 	t¡@ ƒdk�sÞt‚t t dt
 ¡ƒdk�sút‚t t tt
ƒd tt
ƒd  d ¡ƒd k�s*t‚t t t
 t
tdƒd tdƒd    ¡ƒd k�s`t‚t t td ¡ƒd k�s|t‚t t td ¡t t¡ƒdk�s t‚t t td ¡t t¡ƒd k�sÄt‚t t tt
 ¡t t¡ƒd k�sèt‚t t tt ¡ƒd k�st‚t t tt ¡t t¡t t¡@ ƒdk�s2t‚t t tt ¡t t¡t t¡@ ƒdk�s`t‚t t tt ¡t t¡t t¡@ ƒd k�sŽt‚t t tt ¡ƒd k�sªt‚t t tt ¡t t¡t t¡@ ƒdk�sØt‚t t tt ¡t t¡t t¡@ ƒdk�st‚t t tt ¡t t¡t t¡@ ƒdk�s4t‚t t ttƒ¡ƒdk�sPt‚d S )NTFrE   r€   gffffffö?)r   r   rP   r   rH   rO   rK   rT   r   Únonpositiver   r5   r7   rL   rQ   rR   rI   r*   rY   rY   rY   rZ   Útest_negative1  s<       " "$$..06$$$......r£   c                   C   s¬  t t t¡ƒd kst‚t t t¡t t¡ƒd ks4t‚t t t¡t t¡ƒdksRt‚t t t¡t t¡ƒdkspt‚t t t¡t t¡t t¡B ƒdks˜t‚t t tt ¡ƒd ks²t‚t t tt ¡t t¡t t¡@ ƒdksÞt‚t t tt ¡t t¡t t¡@ ƒd k�st‚t t tt ¡t t¡t t¡@ ƒdk�s:t‚t t dt ¡ƒd k�sVt‚t t dt ¡t t¡ƒdk�szt‚t t dt ¡t t¡ƒdk�sžt‚t t tt ¡t t¡ƒd k�sÂt‚t t tt ¡t t¡t t¡@ ƒdk�sðt‚t t tt ¡t t¡ƒdk�st‚t t t	tƒ¡ƒd k�s0t‚t t t	tƒ¡t t¡ƒdk�sTt‚t t t
tdt ƒƒ¡ƒdk�sxt‚t t tdƒd tdƒd  d ¡ƒd k�s¨t‚d S )NTr€   FrE   )r   r   rc   r   rH   rK   rO   rP   r   r*   r/   r.   r   r5   r7   rY   rY   rY   rZ   Útest_nonzero[  s&    (,..$$$.$$$r¤   c                   C   sþ  t t t¡ƒd kst‚t t t¡t t¡ƒd ks4t‚t t t¡t t¡ƒdksRt‚t t t¡t t¡ƒdkspt‚t t t¡t t¡t t¡B ƒdks˜t‚t t t¡t t¡t 	t¡@ ƒdksÀt‚t t tt
 ¡ƒd ksÚt‚t t tt
 ¡t t¡t t
¡@ ƒdk�st‚t t tt
 ¡t t¡t t
¡@ ƒd k�s6t‚t t tt
 ¡t t¡t t
¡@ ƒdk�sdt‚t t dt ¡ƒd k�s€t‚t t dt ¡t t¡ƒdk�s¤t‚t t dt ¡t t¡ƒdk�sÈt‚t t tt
 ¡t t¡ƒd k�sìt‚t t ttƒ¡ƒd k�st‚t t ttƒ¡t t¡ƒdk�s,t‚t t t¡t t¡ƒdk�sLt‚t t t¡t t¡ƒdk�slt‚t t t¡t t¡ƒdk�sŒt‚t t t¡t t¡ƒd k�s¬t‚t t t¡t t¡ƒdk�sÌt‚t t t¡t t
¡B t tt
 ¡ƒdk�sút‚d S )NFTr€   )r   r   rd   r   rH   rK   rO   rP   Únonnegativer¢   r   rc   r*   rI   rQ   rR   rY   rY   rY   rZ   Ú	test_zerox  s,    ((...$$$$     r¦   c                   C   s	  t t t¡ƒd kst‚t t t¡t t¡ƒdks4t‚t t t¡t t¡ƒd ksRt‚t t t¡t t¡ ƒdksrt‚t t t¡t t¡ƒd ks�t‚t t t¡t t¡ƒd ks®t‚t t t ¡t t¡ƒdksÎt‚t t dt ¡ƒd ksèt‚t t dt ¡t t¡ƒdk�st‚t t dt ¡t t¡ƒdk�s0t‚t t dt ¡t t¡ƒdk�sTt‚t t dt ¡t t¡ ƒd k�szt‚t t dt ¡t t¡ƒd k�sžt‚t t td ¡t t¡ƒd k�sÂt‚t t td ¡t 	t¡ƒd k�sæt‚t t td ¡t 	t¡ƒdk�s
t‚t t td ¡t 	t¡ƒdk�s.t‚t t td ¡t t¡ƒdk�sRt‚t t dt ¡t t¡ƒdk�svt‚t t dt ¡t 	t¡ƒdk�sšt‚t t dt ¡t t¡ƒdk�s¾t‚t t dt ¡t 	t¡ƒdk�sât‚t t tt
 ¡t t¡t t
¡@ ƒdk�st‚t t tt
 ¡t t¡t 	t
¡@ ƒdk�s>t‚t t tt
 ¡t 	t¡t t
¡@ ƒdk�slt‚t t tt
 ¡t t¡t t
¡@ ƒdk�sšt‚t t tt
 t ¡t t¡t t
¡@ t 	t¡@ ƒdk�sÖt‚t t tt
 t t ¡t t¡t t
¡@ t 	t¡@ t t¡@ ƒd k�s t‚t t dt d ¡t t¡ƒdk�sHt‚t t dt t
 ¡t t¡t t
¡@ ƒdk�szt‚t t dt t
 ¡t t¡t 	t
¡@ ƒdk�s¬t‚t t dt t
 ¡t t¡t t
¡@ ƒd k�sÞt‚t t tt
 ¡t t¡t 	t
¡@ ƒdk�st‚t t tt
 ¡t t¡t t
¡@ ƒdk�s:t‚t t dt t
 ¡t t¡t t¡@ ƒd k�slt‚t t dt t
 ¡t t¡t t¡@ ƒd k�sžt‚t t ttƒ¡t t¡ƒdk�sÂt‚t t dt ¡t t¡ƒdk�sæt‚t t td ¡t 	t¡ƒdk�s
t‚t t td ¡t t¡ƒdk�s.t‚t t dt ¡t 	t¡ƒd k�sRt‚t t tt ¡t 	t¡t t¡@ t t¡ @ ƒd k�sŒt‚t t tt ¡t t¡t t¡@ t t¡ @ ƒdk�sÆt‚t t tt ¡t 	t¡t t¡@ t t¡@ ƒdk�sþt‚t t tt ¡t t¡t t¡@ t t¡@ ƒdk�s6t‚t t tt ¡t 	t¡t t¡@ t t¡ @ ƒd k�spt‚t t tt ¡t 	t¡t t¡@ t t¡@ ƒd k�s¨t‚t t tt ¡t t¡t t¡@ t t¡ @ ƒd k�sât‚t t tt ¡t t¡t t¡@ t t¡@ ƒd k�st‚t t tt ¡t 	t¡ƒd k�s>t‚t t tt ¡t t¡ƒd k�sbt‚t t tt
 ¡t t¡t t
¡@ ƒd k�s�t‚t t tt ¡t t¡ƒd k�s´t‚t t ttt
  ¡t t¡t t
¡@ ƒdk�sæt‚t t ttt
  ¡t t¡t 	t
¡@ ƒd k�	st‚d S )NTFr€   ry   rE   rf   )r   r   rR   r   rH   rI   rJ   rO   rM   rQ   r   r   r   r*   r   r   r	   rP   r
   rY   rY   rY   rZ   Útest_odd_query–  sv      $$$&$$$$$$$$$$....<&ÿÿ
(222..22$$$$$::88:8:8$$.$2r§   c                   C   s€   t t tt tt  ¡t t¡t t¡@ t t¡@ ƒdks>t‚t t tt tt  ¡t t¡t t¡@ t t¡@ ƒdks|t‚d S ©NF)r   r   rR   r   r   r   rI   rH   rY   rY   rY   rZ   Ú0test_oddness_in_ternary_integer_product_with_oddà  s    >r©   c                   C   sB   t t tt tt  ¡t t¡t t¡@ t t¡@ ƒd ks>t‚d S r’   )	r   r   rR   r   r   r   rI   rQ   rH   rY   rY   rY   rZ   Ú1test_oddness_in_ternary_integer_product_with_evené  s    rª   c                   C   sÂ  t t t¡t t¡ƒdkst‚t t t¡t t¡ ƒdks>t‚t t t¡t t¡ƒd ks\t‚t t t¡t t¡ ƒdks|t‚t t dt ¡t t¡ƒd ksžt‚t t tt ¡ƒd ks¸t‚t t tt ¡t t¡ƒd ksÚt‚t t tt ¡t t¡t t¡@ ƒd k�st‚t t dt ¡t t¡ƒdk�s,t‚t t dt ¡ƒd k�sHt‚t t td ¡t t¡ƒdk�slt‚t t td ¡t t¡ƒdk�s�t‚t t tt ¡t t¡t t¡@ ƒdk�s¾t‚d S )NTFr€   rz   )r   r   rT   r   rH   rI   r   rY   rY   rY   rZ   Ú
test_primeí  s      "".$$$r«   c                  C   s&  t t ttƒd ttƒd  d ¡ƒd ks.t‚t t t¡t t¡ƒdksLt‚t t t¡t t¡ƒdksjt‚t t t¡t 	t¡ƒd ksˆt‚t t t ¡t t¡ƒdks¨t‚t t t ¡t t¡ƒdksÈt‚t t tt
 ¡t t¡t t
¡@ ƒdksôt‚t t tt
 ¡t t¡t t
¡@ ƒdk�s"t‚t t tt
 ¡t t¡t t
¡@ ƒd k�sPt‚t t tt
 ¡t t¡t t
¡@ ƒdk�s~t‚t t dt ¡t t¡ƒdk�s¢t‚t t¡t t
¡@ t t¡@ t t¡@ } t t tt
 t ¡ƒd k�sêt‚t t tt
 t ¡| ƒdk�st‚t t t t
 t ¡| ƒdk�s0t‚t t tt ¡t t¡ƒd k�sTt‚t t td ¡t t¡ƒdk�sxt‚t t td ¡t t¡ƒdk�sœt‚t t td ¡t t¡ƒdk�sÀt‚t t ddtd   ¡t t¡ƒdk�sìt‚t t dt ¡ƒdk�st‚t t dt ¡ƒdk�s$t‚t t ttƒd ttƒd  d ¡ƒd k�sTt‚t t t ttdƒd tdƒd    ¡ƒd k�sŠt‚t t ttƒ¡t t¡ƒdk�s®t‚t t ttƒ¡ t t¡ƒdk�sÔt‚t t tttƒ ¡t t¡ƒd k�süt‚t t ttƒ¡t t¡ƒd k�s t‚t t tdt t dd�¡t t¡ƒdk�sPt‚t t ttt dd�¡t t¡ƒdk�s|t‚t t ttt t ƒ¡t t¡ƒdk�s¨t‚t t ttt t ƒ¡t t¡ƒdk�sÔt‚t t ttt t ƒ¡t t¡ƒd k�s t‚t t ttƒ¡t t¡ƒdk�s$t‚t t ttƒ¡t t¡ƒdk�sHt‚t t ttƒ¡t t¡ƒd k�slt‚t t ttd ƒ¡t t¡ƒdk�s”t‚t t ttƒ¡t t¡t t¡@ ƒ�s¾t‚t t ttƒ¡t t¡ƒd k�sât‚t t ttƒ¡ƒd k�sþt‚t t ttƒ¡t t¡ƒdk�s"t‚d S )Nr€   rE   TFry   r–   )r   r   rO   r5   r   r7   rH   r   rP   rc   r   r¥   rN   r   r   rK   r.   r#   rQ   rR   r/   r)   rI   r*   ©ÚassumptionsrY   rY   rZ   Útest_positiveÿ  sR    .  ,...$( "$$$$$,06$&($0,,,,$$$(*$r®   c                   C   s°   t t d¡ƒst‚t t d¡ƒs$t‚t t d¡ƒdks:t‚t t t¡ t t¡ƒsVt‚t t t¡t t¡ƒdkstt‚t t tdƒ¡ƒdksŽt‚t t t¡t t¡ƒdks¬t‚d S )Nrf   r   rE   F)r   r   r¢   rH   rO   r   r0   rN   rY   rY   rY   rZ   Útest_nonpositive;  s    r¯   c                   C   s°   t t d¡ƒdkst‚t t d¡ƒs(t‚t t d¡ƒs:t‚t t t¡ t t¡ƒsVt‚t t t¡t t¡ƒdkstt‚t t tdƒ¡ƒdksŽt‚t t t¡t t¡ƒdks¬t‚d S )Nrf   Fr   rE   )r   r   r¥   rH   rP   r   r0   rN   rY   rY   rY   rZ   Útest_nonnegativeE  s    r°   c                   C   s8  t t t¡ƒd kst‚t t t¡t t¡ƒdks4t‚t t t¡t t¡ƒdksRt‚t t t¡t t¡ƒdkspt‚t t t¡t t¡ƒdksŽt‚t t t¡t t¡ƒdks¬t‚t t t¡t 	t¡ƒdksÊt‚t t t¡t 
t¡ƒdksèt‚t t ttdƒ ¡t t¡ƒdk�st‚t t ttdƒ ¡t t¡ƒdk�s8t‚t t td ¡t t¡ƒdk�s\t‚t t tt ¡t t¡ƒdk�s€t‚t t tt ¡t t¡ƒd k�s¤t‚t t dt ¡t t¡ƒdk�sÈt‚t t tt ¡t t¡ƒdk�sìt‚t t tt ¡t t¡ƒdk�st‚t t tt ¡t t¡ƒd k�s4t‚d S )NTr€   éþÿÿÿFrE   )r   r   rK   r   rH   rc   rO   rP   rI   rQ   rT   r0   r   rL   rN   rY   rY   rY   rZ   Útest_real_basicN  s"    (($$$$$$r²   c                   C   s¦  t t td ¡t t¡ƒdks"t‚t t ttƒ¡t t¡ƒdksDt‚t t tt ¡t t¡t t¡@ ƒdkspt‚t t tt ¡t t¡t t¡@ ƒd ksœt‚t t tt ¡t 	t¡t t¡@ ƒdksÈt‚t t tt ¡t 
t¡t 
t¡@ ƒd ksôt‚t t tt ¡t 
t¡t t¡@ ƒd k�s"t‚t t tt ¡t t¡t 
t¡@ ƒd k�sPt‚t t td ¡t 
t¡ƒdk�stt‚t t tt ¡t t¡t t¡@ ƒdk�s¢t‚t t tt ¡t 	t¡t t¡@ ƒdk�sÐt‚t t tt ¡t t¡t t¡@ ƒd k�sþt‚t t tt ¡t 
t¡t t¡@ ƒd k�s,t‚t t tt ¡t 
t¡t t¡@ ƒdk�sZt‚t t tt ¡t 
t¡t t¡@ ƒdk�sˆt‚t t ttt  ¡t t¡t tt ¡@ t tt ¡@ t t¡@ t 	t¡@ ƒdk�sàt‚t t ttt  ¡t t¡t tt ¡@ t t¡@ t t¡@ ƒdk�s*t‚t t ttt  ¡t t¡t tt ¡@ ƒdk�s`t‚t t ttt  ¡t t¡t tt ¡@ t 	t¡@ ƒdk�s t‚t t ttt  ¡t t¡t tt ¡@ t t¡@ ƒdk�sàt‚t t t t ¡t 
t¡ƒdk�st‚t t tt ¡t 
t¡ƒdk�s*t‚t t tt ¡t 
t¡ƒd k�sNt‚t t tt ¡t 
t¡ƒd k�srt‚t t ttt ttƒ  ¡t t¡ƒdk�s¢t‚d S )Nr€   TFr   )r   r   rK   r   rH   r0   rP   r   rI   rO   rN   rJ   rR   rQ   r   r   r   r#   r/   rY   rY   rY   rZ   Útest_real_powe  s2    "",,,,..$......XJ6@@&$$$r³   c                  C   s  t t ttƒ¡ƒd kst‚t t ttƒ¡ƒd ks4t‚t t ttƒ¡t t¡ƒdksVt‚t t ttƒ¡t t¡ƒdksxt‚t t ttƒ¡ƒd ks’t‚t t ttƒ¡t t¡ƒdks´t‚t t tttƒ ¡t t¡ƒdksÚt‚t t tdt t	 dd�¡ƒdk�st‚t t ttt	 dd�¡ƒdk�s&t‚t t ttt	 d dd�¡ƒdk�sNt‚t t t
t	ƒ¡ƒdk�sjt‚t t t
dt	 ƒ¡ƒdk�sŠt‚t t t
t	d ƒ¡ƒdk�sªt‚t t t
tƒ¡t t¡ƒd k�sÎt‚t t t
tƒ¡t t¡ƒdk�sòt‚t t t
ttƒƒ¡t t¡ƒd k�st‚t t t
ttƒƒ¡t t¡ƒd k�sBt‚ttdt t	 t dd�tdd�} t t | ¡t t¡ƒdk�s„t‚t t ttƒt ¡t t¡ƒdk�s¬t‚t t ttƒt ¡t t¡ƒd k�sÔt‚t t ttƒ¡ƒdk�sðt‚t t ttƒ¡ƒdk�st‚d S )NTr€   Fr–   rE   )r   r   rK   r7   r   rH   r5   r.   r#   r   r/   rL   rN   r%   rI   r,   r+   rž   rY   rY   rZ   Útest_real_functions�  s.    """&($(  $$((" ((r´   c               	   C   sB  t t tddt dgdt dtgdt dggƒ¡ƒdks<t‚t t tddt dgdt dtgdt dggƒ¡ƒdksxt‚tddd�} t t tddt | gdt dtgdt dggƒ¡ƒd ksÀt‚t t td	ƒ¡ƒdksÚt‚t t td
dtdfdfƒ¡ƒdk�st‚t t td
d| dfdfƒ¡ƒd k�s*t‚tddt dgdt dt gdt dggƒ}tt dt dgdt ddt gddt t ggƒ}t t |¡ƒdk�s¢t‚t t |¡ƒdk�sºt‚t t |d ¡ƒdk�sÖt‚|d }| 	¡  t t |¡ƒdk�sþt‚tddt dg| dt gdt dggƒ}t t |¡ƒd k�s>t‚d S )Nr€   rz   ry   rE   TFr   ©rL   )©é   é   r}   )r¸   é   r   ©r}   r   r\   r¶   r¸   r   rº   r±   )
r   r   rV   r>   r   rH   r'   r?   rW   Úsimplify)r   ÚAÚBÚCZ_ArY   rY   rZ   Útest_matrix£  s"    <<<((,4(r¿   c               	   C   sð  t t t¡ƒd kst‚t t t¡ƒdks,t‚t t dt ¡ƒdksFt‚t t td ¡ƒdks`t‚t t tdƒ¡ƒdkszt‚t t dtdƒ ¡ƒdks˜t‚t t tdƒd ¡ƒdks¶t‚t t ttdƒ ¡ƒdksÔt‚t t tdttdƒ  ƒ¡ƒdksút‚t t dttdƒtddƒ   ¡ƒdk�s(t‚t t dttdƒdt    ¡ƒdk�sTt‚t	t
ttttfD ]´} t t | dƒ¡ƒdk�s„t‚t t | ddd	�¡ƒdk�s¤t‚t t | d
dd	�¡ƒdk�sÄt‚t t | tƒ¡t t¡ƒd k�sèt‚t t | tƒ¡t t¡t t¡@ ƒdk�sdt‚�qdttfD ]¸}t t |dƒ¡ƒdk�sBt‚t t |ddd	�¡ƒdk�sbt‚t t |ddd	�¡ƒdk�s‚t‚t t |tƒ¡t t¡ƒd k�s¦t‚t t |tƒ¡t t¡t td ¡@ ƒdk�s"t‚�q"ttfD ]f}t t |dƒ¡ƒdk�st‚t t |ddd	�¡ƒdk�s$t‚t t |tƒ¡t t¡ƒdk�sät‚�qät t tt
dƒƒ¡ƒdk�slt‚t t ttttdƒ  ƒ¡ƒd k�s”t‚t t d¡ƒdk�s¬t‚t t t¡t t¡ƒdk�sÌt‚t t t¡t t¡ƒdk�sìt‚d S )NTr€   ry   r�   rE   é   é   Fr–   r   gÃõ(\�Â@)r   r   ri   r   rH   r   r0   r    r#   r.   r7   r8   r3   r4   r5   rc   r/   r1   r6   r2   r   Útranscendentalr˜   rY   rY   rZ   Útest_algebraic»  s@    &.,  $2  $6 ( ( rÃ   c                   C   s^   t t t¡ƒdkst‚t t t¡¡ t t t¡ƒdks<t‚t ¡  t t t¡ƒdksZt‚dS )z Test ask with global assumptionsNT)r   r   rI   r   rH   r   ÚaddÚclearrY   rY   rY   rZ   Útest_globalé  s
    rÆ   c                  C   s`   t t t¡ƒdkst‚tƒ } |  t t¡¡ t t t¡| d�dksFt‚t t t¡ƒdks\t‚dS )z(Test ask with custom assumptions contextN)ÚcontextT)r   r   rI   r   rH   r   rÄ   )Zlocal_contextrY   rY   rZ   Útest_custom_contextò  s
    rÈ   c                   C   s€   t t t¡t t¡t t¡? ƒdks(t‚t t t¡tt t¡t t¡ƒƒdksRt‚t t t¡tt t¡t t¡ƒƒdks|t‚d S r¨   )	r   r   rP   r   rK   rO   rH   r9   r;   rY   rY   rY   rZ   Útest_functions_in_assumptionsû  s    (*rÉ   c                   C   s8   t t t¡t t¡@ t t¡t t¡? d�dks4t‚d S )Nr¬   F)r   r   rP   r   rI   rK   rO   rH   rY   rY   rY   rZ   Útest_composite_ask  s
    ÿÿrÊ   c                   C   s&  t dƒdkst‚t dƒdks t‚t t t¡ t t¡ƒdks@t‚t t t¡ t t¡ƒd ks`t‚t t t¡t t¡@ t t¡ƒdksˆt‚t t t¡t t¡@ ƒd ks¨t‚t t t¡t t¡B t t¡ƒdksÐt‚t t t¡t t¡B ƒd ksðt‚t t t¡t t¡? t t¡ƒdk�st‚t t	t t¡t t¡dd�t t¡ƒdk�sJt‚t t	t t¡t t¡dd�ƒd k�srt‚t t
t t¡t t¡ƒt t¡ƒdk�sžt‚t t
t t¡t t¡ƒƒd k�sÂt‚t t
t t¡t t¡ƒt t¡ƒd k�sît‚t t t¡t t¡B t t¡t t¡B ƒdk�s"t‚d S )NTFr–   )r   rH   r   rP   r   rO   rK   rG   rI   r:   r9   rQ   rY   rY   rY   rZ   Útest_composite_proposition  s.      ( ( *  ÿÿÿ
(,$,rË   c                   C   sH   t t t¡t t¡ B ƒdks"t‚t t t¡t t¡ @ ƒdksDt‚d S rh   )r   r   rK   r   rH   rY   rY   rY   rZ   Útest_tautology  s    "rÌ   c                   C   s¦   t t t¡t t¡t t¡@ ƒdks(t‚t t t¡t t¡t t¡B ƒd ksPt‚t t t¡t t¡t t¡? ƒd ksxt‚t t t¡t t¡t t¡?  ƒdks¢t‚d S ru   )r   r   rK   r   r   rH   rO   rY   rY   rY   rZ   Útest_composite_assumptions  s    (((rÍ   c                  C   sB  t tdd„ ƒ G dd„ dtƒ} zttƒ � td| ƒ W 5 Q R X tƒ � tt t	¡ƒdksZt
‚W 5 Q R X tƒ �  tt t	d ¡ƒdks†t
‚W 5 Q R X W 5 tƒ � td| ƒ W 5 Q R X t`X t td	d„ ƒ G d
d„ dtƒ}zT|ƒ t_tj t¡dd„ ƒ}tt t	¡ƒdk�s
t
‚tt t	d ¡ƒdk�s&t
‚W 5 t`X t tdd„ ƒ dS )z7test that you can add keys to the ask system at runtimec                   S   s   t t t¡ƒS r’   ©r   r   Úmy_keyr   rY   rY   rY   rZ   Ú<lambda>%  ó    z(test_key_extensibility.<locals>.<lambda>c                   @   s   e Zd Zedd„ ƒZdS )z,test_key_extensibility.<locals>.MyAskHandlerc                 S   s   dS ru   rY   ©Úexprr­   rY   rY   rZ   r(   )  s    z3test_key_extensibility.<locals>.MyAskHandler.SymbolN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr(   rY   rY   rY   rZ   ÚMyAskHandler(  s   rØ   rÏ   TrE   Nc                   S   s   t t t¡ƒS r’   rÎ   rY   rY   rY   rZ   rÐ   9  rÑ   c                   @   s   e Zd ZdS )z+test_key_extensibility.<locals>.MyPredicateN©rÔ   rÕ   rÖ   rY   rY   rY   rZ   ÚMyPredicate<  s   rÚ   c                 S   s   dS ru   rY   rÒ   rY   rY   rZ   Ú_@  s    z!test_key_extensibility.<locals>._c                   S   s   t t t¡ƒS r’   rÎ   rY   rY   rY   rZ   rÐ   G  rÑ   )rB   ÚAttributeErrorr   rC   r   r   rÏ   r   r   r   rH   r   Úregisterr(   )rØ   rÚ   rÛ   rY   rY   rZ   Útest_key_extensibility"  s,     (

 rÞ   c                  C   sL   ddl m}  G dd„ d| ƒ}tj |¡dd„ ƒ}tt |ƒ ¡ƒdksHt‚dS )	zBtest that new types can be added to the ask system at runtime
    r   )ÚBasicc                   @   s   e Zd ZdS )z'test_type_extensibility.<locals>.MyTypeNrÙ   rY   rY   rY   rZ   ÚMyTypeO  s   rà   c                 S   s   dS ru   rY   rÒ   rY   rY   rZ   rÛ   R  s    z"test_type_extensibility.<locals>._TN)Z
sympy.corerß   r   rT   rÝ   r   rH   )rß   rà   rÛ   rY   rY   rZ   Útest_type_extensibilityJ  s
    

rá   c                  C   sr   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snt	‚d S r’   )
r<   r:   r   rI   rJ   rK   rL   r=   r   rH   )Úknown_factsÚknown_facts_keysZknown_facts_cnfÚmappingrY   rY   rZ   Útest_single_fact_lookupY  s    þ
rå   c               
   C   sÔ   t tt t¡t t¡ƒtt t¡t t¡ƒtt t¡t t¡ƒƒ} t t¡t t¡t t¡t 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Ðt
‚d S r’   )r<   r:   r   rI   r   rJ   rK   rL   r   ÚsetrH   )râ   rã   rY   rY   rZ   Útest_generate_known_facts_dicte  s    þ$   ýÿrç   c                     st   t dƒ‰ tˆ ƒ} t | ¡}tƒ }| dd„ |jD ƒ¡ tƒ |ksDt‚‡ fdd„t	ƒ D ƒ}t
|| ƒ}tƒ |kspt‚dS )z)"Test that ask_generated.py is up-to-dater   c                 s   s(   | ] }t d d„ t|td�D ƒƒV  qdS )c                 s   s   | ]}t |jj|jƒV  qd S r’   )r   ÚargÚfunctionZis_Not)Ú.0ZlitrY   rY   rZ   Ú	<genexpr>z  s     z8test_known_facts_consistent.<locals>.<genexpr>.<genexpr>)ÚkeyN)Ú	frozensetÚsortedÚstr)rê   ÚclrY   rY   rZ   rë   z  s     z.test_known_facts_consistent.<locals>.<genexpr>c                    s   g | ]}|ˆ ƒ‘qS rY   rY   )rê   Úpred©r   rY   rZ   Ú
<listcomp>}  s     z/test_known_facts_consistent.<locals>.<listcomp>N)r(   r   r   Zto_CNFræ   ÚupdateÚclausesr   rH   r   r   r   )ZfactZcnfrõ   Úkeysrä   rY   rò   rZ   Útest_known_facts_consistentr  s    

r÷   c                   C   sª   t t dtdƒd tdƒd   ¡ƒdks.t‚t t ttdƒtdƒdd�¡ƒdksVt‚t t ttdƒtdƒdd�¡ƒdks~t‚t t 	ttdƒtdƒdd�¡ƒdks¦t‚d S )Nl   Ò
>V3&¥Z
 rE   r€   Tr   r–   F)
r   r   rT   r5   r7   rH   rQ   r   r$   rI   rY   rY   rY   rZ   Útest_Add_queries‚  s    .((rø   c                	   C   s4   t t td ¡ƒ� tt t¡ƒr&t‚W 5 Q R X d S )NrE   )r   r   rO   r   r   rH   rY   rY   rY   rZ   Útest_positive_assuming‰  s    rù   c                   C   s   t tdd„ ƒ d S )Nc                   S   s   t tttƒ tjƒS r’   )r   r#   r/   r   r   rK   rY   rY   rY   rZ   rÐ   �  rÑ   z!test_issue_5421.<locals>.<lambda>©rB   Ú	TypeErrorrY   rY   rY   rZ   Útest_issue_5421Ž  s    rü   c                   C   s   t tdd„ ƒ d S )Nc                   S   s
   t tjƒS r’   )r   r   rO   rY   rY   rY   rZ   rÐ   “  rÑ   z!test_issue_3906.<locals>.<lambda>rú   rY   rY   rY   rZ   Útest_issue_3906’  s    rý   c                   C   sR   t t ttƒd ¡t t¡ƒd ks&t‚t t ttƒd ¡ t t¡ƒdksNt‚d S )Nr€   T)r   r   rO   r/   r   rH   rP   rY   rY   rY   rZ   Útest_issue_5833–  s    &rþ   c                   C   s    t tdd„ ƒ t tdd„ ƒ d S )Nc                   S   s    t t t¡t t¡t t¡@ ƒS r’   )r   r   rO   r   rP   rY   rY   rY   rZ   rÐ   œ  rÑ   z!test_issue_6732.<locals>.<lambda>c                   S   s    t t t¡t t¡t t¡@ ƒS r’   )r   r   rP   r   rO   rY   rY   rY   rZ   rÐ   �  rÑ   )rB   Ú
ValueErrorrY   rY   rY   rZ   Útest_issue_6732›  s    r   c                   C   sx  t t ttƒ¡t t¡ƒdks"t‚t t ttƒ¡t t¡ƒdksDt‚t t ttƒ¡t t¡ƒdksft‚t t ttƒ¡ƒd ks€t‚t t t	tƒ¡t t¡ƒd ks¢t‚t t t	tƒ¡t t¡ƒd ksÄt‚t t t	t
ddƒƒ¡ƒdksät‚t t t	tƒ¡t t¡t td ¡@ ƒdk�st‚t t t	tƒ¡t t¡t td ¡@ ƒdk�sHt‚t t ttƒ¡t t¡ƒd k�slt‚t t tt
ddƒƒ¡ƒdk�sŽt‚t t ttƒ¡t td ¡t td ¡@ ƒdk�sÄt‚t t ttƒ¡t td ¡ƒd k�sìt‚t t ttƒ¡t t¡ƒdk�st‚t t ttƒ¡t t¡ƒdk�s4t‚t t ttƒ¡t t¡ƒdk�sXt‚t t ttƒ¡ƒd k�stt‚d S )NTFrE   r�   )r   r   rO   r4   r
   rH   rP   rd   r   r3   r    r¢   r¥   r1   r2   rK   rN   rY   rY   rY   rZ   Útest_issue_7246   s"    """"" 22$"6($$$r  c                   C   s&   t t ttƒ¡t t¡ƒdks"t‚d S ru   )r   r   rO   r1   r   rd   rH   rY   rY   rY   rZ   Útest_issue_7246_failing·  s    r  c                  C   sî  t ddd�} tt | ¡ƒdks"t‚tt | ¡ƒdks8t‚tt | ¡ƒdksNt‚t ddd�} tt | ¡ƒdkspt‚tt | ¡ƒdks†t‚tt | ¡ƒdksœt‚t ddd�} tt | ¡ƒd ks¾t‚tt | ¡ƒdksÔt‚t ddd�} tt | ¡ƒdksöt‚tt | ¡ƒdk�st‚tt | ¡ƒdk�s&t‚t ddd�} tt 	| ¡ƒdk�sJt‚t ddd	�} tt | ¡ƒdk�snt‚tt | ¡ƒdk�s†t‚t ddd
�} tt | ¡ƒdk�sªt‚tt | ¡ƒd k�sÂt‚tt 
| ¡ƒd k�sÚt‚t ddd�} tt | ¡ƒdk�sþt‚t ddd�} tt | ¡ƒdk�s"t‚tt | ¡ƒdk�s:t‚t ddd�} tt | ¡ƒdk�s^t‚tt | ¡ƒdk�svt‚t ddd�} tt | ¡ƒdk�sšt‚tt | ¡ƒdk�s²t‚t ddd�} tt | ¡ƒdk�sÖt‚tt | ¡ƒdk�sît‚t ddd�} tt | ¡ƒdk�st‚tt 
| ¡ƒdk�s*t‚t ddd�} tt 
| ¡ƒdk�sNt‚t ddd�} tt | ¡ƒdk�srt‚t ddd�} tt | ¡ƒdk�s–t‚tt | ¡ƒdk�s®t‚t ddd�} tt | ¡ƒdk�sÒt‚tt | ¡ƒdk�sêt‚d S )Nr   T)rK   F)rN   rµ   )rO   )rG   )rP   )r¥   )rS   )rT   )rU   )rQ   )rR   )rc   )rd   ©rI   )rJ   )rM   )r'   r   r   rK   rH   rN   rL   rO   rP   rG   rd   rS   rT   rU   rQ   rR   rc   rI   rJ   rM   rò   rY   rY   rZ   Útest_check_old_assumption¾  sf    r  c                   C   sr   t t d¡ƒd kst‚t t d¡ƒd ks,t‚t t d¡ƒd ksBt‚t t d¡ƒd ksXt‚t t d¡ƒd ksnt‚d S )Nr`   g      @g      @g       @)r   r   rI   rH   rT   rU   rQ   rR   rY   rY   rY   rZ   Útest_issue_9636	  s
    r  c                   C   sp   t t dt ¡ƒd kst‚t t dt  ¡ƒd ks6t‚t t dt ¡ƒd ksPt‚t t dt  ¡ƒd kslt‚d S ©Nr   )r   r   rN   r   rH   rK   rY   rY   rY   rZ   Útest_autosimp_used_to_fail	  s    r  c               	      s&  ddl m‰  G ‡ fdd„dtƒ} z|tƒ � td| ƒ W 5 Q R X tddd�}tƒ � tt d	¡ƒsdt	‚W 5 Q R X tƒ �  tt |¡t |¡ƒs�t	‚W 5 Q R X W 5 t`X G d
d„ dt
ƒ}zf|ƒ t_tj t¡dd„ ƒ}tj t¡‡ fdd„ƒ}tt d	¡ƒsüt	‚tt |¡t |¡ƒ�st	‚W 5 t`X d S )Nr   ©Ú	conjunctsc                       s(   e Zd Zedd„ ƒZe‡ fdd„ƒZdS )z/test_custom_AskHandler.<locals>.MersenneHandlerc                 S   s    t t t| d dƒ¡ƒrdS d S ©NrE   r€   T©r   r   rI   r/   rÒ   rY   rY   rZ   r   	  s    z7test_custom_AskHandler.<locals>.MersenneHandler.Integerc                    s   | ˆ |ƒkrdS d S ru   rY   rÒ   r  rY   rZ   r(   	  s    z6test_custom_AskHandler.<locals>.MersenneHandler.SymbolN)rÔ   rÕ   rÖ   r×   r   r(   rY   r  rY   rZ   ÚMersenneHandler	  s   
r  Úmersenner   Tr  r�   c                   @   s   e Zd ZdS )z1test_custom_AskHandler.<locals>.MersennePredicateNrÙ   rY   rY   rY   rZ   ÚMersennePredicate-	  s   r  c                 S   s    t t t| d dƒ¡ƒrdS d S r
  r  rÒ   rY   rY   rZ   rÛ   1	  s    z!test_custom_AskHandler.<locals>._c                    s   | ˆ |ƒkrdS d S ru   rY   rÒ   r  rY   rZ   rÛ   5	  s    )Úsympy.logic.boolalgr	  r   r   r  rC   r   r(   r   rH   r   rÝ   r   )r  r   r  rÛ   rY   r  rZ   Útest_custom_AskHandler	  s*    	(


 r  c                  C   s€   G dd„ dt ƒ} zd| ƒ t_tj tt¡dd„ ƒ}tj ttt¡dd„ ƒ}tt dd¡ƒs\t‚tt dd	d
¡ƒsrt‚W 5 t`X d S )Nc                   @   s   e Zd ZdS )z.test_polyadic_predicate.<locals>.SexyPredicateNrÙ   rY   rY   rY   rZ   ÚSexyPredicateA	  s   r  c                    s:   t | |gƒ}t‡ fdd„|D ƒƒs&dS |d |d  dkS )Nc                 3   s   | ]}t t |¡ˆ ƒV  qd S r’   ©r   r   rT   ©rê   rŠ   r¬   rY   rZ   rë   I	  s     ú5test_polyadic_predicate.<locals>._.<locals>.<genexpr>FrE   r   é   ©rî   Úall)Úint1Úint2r­   r‰   rY   r¬   rZ   rÛ   F	  s    z"test_polyadic_predicate.<locals>._c                    sP   t | ||gƒ}t‡ fdd„|D ƒƒs(dS |d |d  dkoN|d |d  dkS )Nc                 3   s   | ]}t t |¡ˆ ƒV  qd S r’   r  r  r¬   rY   rZ   rë   P	  s     r  Fr€   rE   r  r   r  )r  r  Zint3r­   r‰   rY   r¬   rZ   rÛ   M	  s    r{   r\   r�   é   é   )r   r   Z	sexyprimerÝ   r   r   rH   )r  rÛ   rY   rY   rZ   Útest_polyadic_predicate?	  s    

r  c                  C   sN   t dƒjd kst‚G dd„ dt ƒ} | tdƒƒ}| tdƒƒ}|j|jksJt‚d S )NZmypredicatec                   @   s   e Zd ZdS )z5test_Predicate_handler_is_unique.<locals>.MyPredicateNrÙ   rY   rY   rY   rZ   rÚ   `	  s   rÚ   Úmp1Úmp2)r   ÚhandlerrH   r&   )rÚ   r  r  rY   rY   rZ   Ú test_Predicate_handler_is_uniqueZ	  s
    r   c                   C   st   t t td¡t t¡ƒst‚t t td¡t t¡ƒr8t‚t t td¡t t¡ƒrTt‚t t td¡t t¡ƒspt‚d S r  )r   r   rŸ   r   rd   rH   rc   ÚnerY   rY   rY   rZ   Útest_relationalg	  s    r"  c                   C   s~   t t t¡t t¡t tt¡B ƒd ks*t‚t t t¡t t¡dtkB ƒd ksPt‚t t t¡t t¡t dt¡B ƒd kszt‚d S r  )	r   r   rÂ   r   ri   rO   r   rH   ÚgtrY   rY   rY   rZ   Útest_issue_25221n	  s    *&r$  ) Z	sympy.abcr   r   r   r   r   r   r   r	   r
   r   Zsympy.assumptionsr   r   r   r   r   Zsympy.assumptions.assumer   r   r   Zsympy.assumptions.cnfr   r   Zsympy.assumptions.factsr   r   r   r   Zsympy.assumptions.handlersr   Zsympy.assumptions.ask_generatedr   r   Zsympy.core.addr   Zsympy.core.numbersr   r   r    r!   r"   r#   Zsympy.core.singletonr$   Zsympy.core.powerr%   Zsympy.core.symbolr&   r'   r(   Z(sympy.functions.combinatorial.factorialsr)   Z$sympy.functions.elementary.complexesr*   r+   r,   r-   Z&sympy.functions.elementary.exponentialr.   r/   Z(sympy.functions.elementary.miscellaneousr0   Z(sympy.functions.elementary.trigonometricr1   r2   r3   r4   r5   r6   r7   r8   r  r9   r:   r;   r<   r=   Zsympy.matricesr>   r?   Zsympy.testing.pytestr@   rA   rB   rC   rD   ra   r[   r]   r_   rb   re   rg   ro   rs   rt   rx   r   r�   r„   r…   r†   r‡   rˆ   r‹   rŒ   r�   rŽ   r�   r‘   r“   r•   rœ   r�   r    r¡   r£   r¤   r¦   r§   r©   rª   r«   r®   r¯   r°   r²   r³   r´   r¿   rÃ   rÆ   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$  rY   rY   rY   rZ   Ú<module>   sÔ   0 ()0aj   y

KF

?i
O*J

;
	
!
-		(

F+