a
    ¬<bÏ~ ã                   @   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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u sJ t t | ¡du s0J t t | ¡du sFJ t t | ¡du s\J t t | ¡du srJ t t | ¡du sJ t t | ¡du sJ t t 	| ¡du sŽJ t t 
| ¡du sÊJ t t | ¡du sàJ t t | ¡du söJ t t | ¡du sJ t t | ¡du s&J t t | ¡du s>J t t | ¡du sVJ t t | ¡du snJ d S )Né   TF©r   r   ÚcommutativeÚintegerÚrationalÚrealÚcomplexÚ
irrationalÚ	imaginaryÚpositiveÚnegativeÚevenÚoddÚfiniteÚprimeÚ	compositeÚ	hermitianÚantihermitian©r   © rX   úr/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/assumptions/tests/test_query.pyÚ
test_int_1   s"    rZ   c                  C   sr  d} t t | ¡du sJ t t | ¡du s0J t t | ¡du sFJ t t | ¡du s\J t t | ¡du srJ t t | ¡du sJ t t | ¡du sJ t t 	| ¡du sŽJ t t 
| ¡du sÊJ t t | ¡du sàJ t t | ¡du söJ t t | ¡du sJ t t | ¡du s&J t t | ¡du s>J t t | ¡du sVJ t t | ¡du snJ d S )Né   TFrF   rW   rX   rX   rY   Útest_int_111   s"    r\   c                  C   sr  d} t t | ¡du sJ t t | ¡du s0J t t | ¡du sFJ t t | ¡du s\J t t | ¡du srJ t t | ¡du sJ t t | ¡du sJ t t 	| ¡du sŽJ t t 
| ¡du sÊJ t t | ¡du sàJ t t | ¡du söJ t t | ¡du sJ t t | ¡du s&J t t | ¡du s>J t t | ¡du sVJ t t | ¡du snJ d S )Né   TFrF   rW   rX   rX   rY   Útest_int_12E   s"    r^   c                  C   s  d} t t | ¡du sJ t t | ¡du s0J t t | ¡d u sFJ t t | ¡du s\J t t | ¡du srJ t t | ¡d u sJ t t | ¡du sJ t t 	| ¡du sŽJ t t 
| ¡du sÊJ t t | ¡du sàJ t t | ¡du söJ t t | ¡du sJ t t | ¡du s&J t t | ¡du s>J t t | ¡du sVJ t t | ¡du snJ d} t t | ¡du sJ t t | ¡du s¢J t t | ¡d u sºJ t t | ¡du sÒJ t t | ¡du sêJ t t | ¡d u sJ t t | ¡du sJ t t 	| ¡du s2J t t 
| ¡du sJJ t t | ¡du sbJ t t | ¡du szJ t t | ¡du sJ t t | ¡du sªJ t t | ¡du sÂJ t t | ¡du sÚJ t t | ¡du sòJ t t tj¡d u sJ d S )Nç      ð?TFgaÃÓ+eÙ@)r   r   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   Úmathr#   rW   rX   rX   rY   Útest_float_1Y   sF    ra   c                  C   s  t d} tt | ¡du sJ tt | ¡du s4J tt | ¡du sJJ tt | ¡du s`J tt | ¡du svJ tt | ¡du sJ tt 	| ¡du s¢J tt 
| ¡du sžJ tt | ¡du sÎJ tt | ¡du säJ tt | ¡du súJ tt | ¡du sJ tt | ¡du s*J tt | ¡du sBJ tt | ¡du sZJ tt | ¡du srJ tt | ¡du sJ d S )Nr   FT)r   r   r   ÚnonzeroÚzerorG   rH   rI   rJ   rK   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rX   rY   Útest_zero_0   s$    rd   c                  C   sŠ  t d} tt | ¡du sJ tt | ¡du s4J tt | ¡du sJJ tt | ¡du s`J tt | ¡du svJ tt | ¡du sJ tt 	| ¡du s¢J tt 
| ¡du sžJ tt | ¡du sÎJ tt | ¡du säJ tt | ¡du súJ tt | ¡du sJ tt | ¡du s*J tt | ¡du sBJ tt | ¡du sZJ tt | ¡du srJ tt | ¡du sJ tt | ¡du s¢J d S )NéÿÿÿÿTF)r   r   r   rb   rc   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rX   rY   Útest_negativeone   s&    rf   c                   C   sþ  t t t¡du sJ t t t¡du s,J t t t¡du sBJ t t t¡du sXJ t t t¡du snJ t t t¡du sJ t t 	t¡du sJ t t 
t¡du s°J t t t¡du sÆJ t t t¡du sÜJ t t t¡du sòJ t t t¡du s
J t t t¡du s"J t t t¡du s:J t t t¡du sRJ t t t¡du sjJ t t t¡du sJ t t t¡du sJ t t t¡du s²J t t t¡du sÊJ t t t¡du sâJ t t t¡du súJ d S ©NTF)r   r   rG   r!   rH   rI   Ú	algebraicrJ   Úextended_realrK   rL   rM   rN   Úextended_positiverO   rP   rQ   rR   ÚinfiniterS   rT   rU   rV   Úpositive_infiniteÚnegative_infiniterX   rX   rX   rY   Útest_infinity­   s,    rn   c                  C   s  t j} tt | ¡du sJ tt | ¡du s2J tt | ¡du sHJ tt | ¡du s^J tt | ¡du stJ tt 	| ¡du sJ tt 
| ¡du s J tt | ¡du s¶J tt | ¡du sÌJ tt | ¡du sâJ tt | ¡du søJ tt | ¡du sJ tt | ¡du s(J tt | ¡du s@J tt | ¡du sXJ tt t¡du spJ tt | ¡du sJ tt | ¡du s J tt | ¡du sžJ tt | ¡du sÐJ tt t ¡du sêJ tt t ¡du sJ d S rg   )r$   ÚNegativeInfinityr   r   rG   rH   rI   rh   rJ   ri   rK   rL   rM   rN   rO   Úextended_negativerP   rQ   rR   rk   r!   rS   rT   rU   rV   rl   rm   )ÚmmrX   rX   rY   Útest_neg_infinityÆ   s.    rr   c                   C   s  t t t¡du sJ t t t¡du s,J t t t¡du sBJ t t t¡du sXJ t t t¡du snJ t t t¡du sJ t t 	t¡du sJ t t 
t¡du s°J t t t¡du sÆJ t t t¡du sÜJ t t t¡du sòJ t t t¡du s
J t t t¡du s"J t t t¡du s:J t t t¡du sRJ t t t¡du sjJ t t t¡du sJ t t t¡du sJ t t t¡du s²J t t t¡du sÊJ t t t¡du sâJ t t t¡du súJ t t t¡du sJ d S rg   )r   r   rG   r"   rH   rI   rh   rJ   ri   rK   rL   rM   rN   rO   rc   rb   rP   rQ   rR   rk   rS   rT   rU   rV   rl   rm   rX   rX   rX   rY   Útest_complex_infinityà   s.    rs   c                  C   sÔ  t j} tt | ¡du sJ tt | ¡d u s2J tt | ¡d u sHJ tt | ¡d u s^J tt | ¡d u stJ tt 	| ¡d u sJ tt 
| ¡d u s J tt | ¡d u s¶J tt | ¡d u sÌJ tt | ¡d u sâJ tt | ¡d u søJ tt | ¡d u sJ tt | ¡d u s(J tt | ¡d u s@J tt | ¡d u sXJ tt | ¡d u spJ tt | ¡d u sJ tt | ¡d u s J tt | ¡d u sžJ tt | ¡d u sÐJ d S ©NT)r$   ÚNaNr   r   rG   rH   rI   rh   rJ   ri   rK   rL   rM   rN   rb   rc   rP   rQ   rR   rk   rS   rT   rU   rV   )ÚnanrX   rX   rY   Útest_nanú   s*    rw   c                  C   s  t dd} tt | ¡du s J tt | ¡du s6J tt | ¡du sLJ tt | ¡du sbJ tt | ¡du sxJ tt | ¡du sJ tt 	| ¡du s€J tt 
| ¡du sºJ tt | ¡du sÐJ tt | ¡du sæJ tt | ¡du süJ tt | ¡du sJ tt | ¡du s,J tt | ¡du sDJ tt | ¡du s\J tt | ¡du stJ t dd} tt 
| ¡du sJ tt | ¡du s®J t dd} tt | ¡du sÐJ tt 
| ¡du sèJ t dd} tt 
| ¡du s
J tt | ¡du s"J t dd} tt 
| ¡du sDJ tt | ¡du s\J t dd} tt 
| ¡du s~J tt | ¡du sJ t d	d} tt | ¡du sžJ tt 
| ¡du sÐJ t d	d} tt 
| ¡du sòJ tt | ¡du s
J d S )
Né   é   TFrE   é   éýÿÿÿre   éûÿÿÿ)r    r   r   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   )ÚrrX   rX   rY   Útest_Rational_number  sL    







r~   c                  C   sv  t d} tt | ¡du sJ tt | ¡du s4J tt | ¡du sJJ tt | ¡du s`J tt | ¡du svJ tt | ¡du sJ tt 	| ¡du s¢J tt 
| ¡du sžJ tt | ¡du sÎJ tt | ¡du säJ tt | ¡du súJ tt | ¡du sJ tt | ¡du s*J tt | ¡du sBJ tt | ¡du sZJ tt | ¡du srJ 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   rX   rY   Útest_sqrt_2B  s"    r   c                  C   s  t j} tt | ¡du sJ tt | ¡du s2J tt | ¡du sHJ tt | ¡du s^J tt | ¡du stJ tt 	| ¡du sJ tt 
| ¡du s J tt | ¡du s¶J tt | ¡du sÌJ tt | ¡du sâJ tt | ¡du søJ tt | ¡du sJ tt | ¡du s(J tt | ¡du s@J tt | ¡du sXJ tt | ¡du spJ tt | ¡du sJ t jd } tt | ¡du sªJ tt | ¡du sÂJ tt | ¡du sÚJ tt | ¡du sòJ tt | ¡du s
J tt 	| ¡du s"J tt 
| ¡du s:J tt | ¡du sRJ tt | ¡du sjJ tt | ¡du sJ tt | ¡du sJ tt | ¡du s²J tt | ¡du sÊJ tt | ¡du sâJ tt | ¡du súJ tt | ¡du sJ tt | ¡du s*J dt j } tt | ¡du sLJ tt | ¡du sdJ tt | ¡du s|J tt | ¡du sJ tt | ¡du s¬J tt 	| ¡du sÄJ tt 
| ¡du sÜJ tt | ¡du sôJ tt | ¡du sJ tt | ¡du s$J tt | ¡du s<J tt | ¡du sTJ tt | ¡du slJ tt | ¡du sJ tt | ¡du sJ tt | ¡du sŽJ tt | ¡du sÌJ t jd } tt | ¡du sîJ tt | ¡du sJ tt | ¡du sJ tt | ¡du s6J tt | ¡du sNJ tt 	| ¡du sfJ tt 
| ¡du s~J tt | ¡du sJ tt | ¡du s®J tt | ¡du sÆJ tt | ¡du sÞJ tt | ¡du söJ tt | ¡du sJ tt | ¡du s&J tt | ¡du s>J tt | ¡du sVJ tt | ¡du snJ dt j d } tt | ¡du sJ tt | ¡du s¬J tt | ¡du sÄJ tt | ¡du sÜJ tt | ¡du sôJ tt 	| ¡du sJ tt 
| ¡du s$J tt | ¡du s<J tt | ¡du sTJ tt | ¡du slJ tt | ¡du sJ tt | ¡du sJ tt | ¡du sŽJ tt | ¡du sÌJ tt | ¡du säJ tt | ¡du süJ tt | ¡du sJ d S ©NTFrE   r   )r$   ÚPir   r   rG   rH   rI   rh   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rX   rY   Útest_piV  sŽ    


r   c                  C   s  t j} tt | ¡du sJ tt | ¡du s2J tt | ¡du sHJ tt | ¡du s^J tt | ¡du stJ tt 	| ¡du sJ tt 
| ¡du s J tt | ¡du s¶J tt | ¡du sÌJ tt | ¡du sâJ tt | ¡du søJ tt | ¡du sJ tt | ¡du s(J tt | ¡du s@J tt | ¡du sXJ tt | ¡du spJ tt | ¡du sJ d S rg   )r$   ZExp1r   r   rG   rH   rI   rh   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rX   rY   Útest_E·  s$    r   c                  C   s  t j} tt | ¡du sJ tt | ¡du s2J tt | ¡du sHJ tt | ¡du s^J tt | ¡du stJ tt 	| ¡du sJ tt 
| ¡du s J tt | ¡du s¶J tt | ¡du sÌJ tt | ¡du sâJ tt | ¡du søJ tt | ¡du sJ tt | ¡du s(J tt | ¡du s@J tt | ¡du sXJ tt | ¡du spJ tt | ¡du sJ d S rg   )r$   ZGoldenRatior   r   rG   rH   rI   rh   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rX   rY   Útest_GoldenRatioÌ  s$    r   c                  C   s  t j} tt | ¡du sJ tt | ¡du s2J tt | ¡du sHJ tt | ¡du s^J tt | ¡du stJ tt 	| ¡du sJ tt 
| ¡du s J tt | ¡du s¶J tt | ¡du sÌJ tt | ¡du sâJ tt | ¡du søJ tt | ¡du sJ tt | ¡du s(J tt | ¡du s@J tt | ¡du sXJ tt | ¡du spJ tt | ¡du sJ d S rg   )r$   ZTribonacciConstantr   r   rG   rH   rI   rh   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rX   rY   Útest_TribonacciConstantá  s$    r   c                  C   s  t } tt | ¡du sJ tt | ¡du s0J tt | ¡du sFJ tt | ¡du s\J tt | ¡du srJ tt | ¡du sJ tt 	| ¡du sJ tt 
| ¡du sŽJ tt | ¡du sÊJ tt | ¡du sàJ tt | ¡du söJ tt | ¡du sJ tt | ¡du s&J tt | ¡du s>J tt | ¡du sVJ tt | ¡du snJ tt | ¡du sJ dt  } tt | ¡du sŠJ tt | ¡du sŸJ tt | ¡du sÖJ tt | ¡du sîJ tt | ¡du sJ tt | ¡du sJ tt 	| ¡du s6J tt 
| ¡du sNJ tt | ¡du sfJ tt | ¡du s~J tt | ¡du sJ tt | ¡du s®J tt | ¡du sÆJ tt | ¡du sÞJ tt | ¡du söJ tt | ¡du sJ tt | ¡du s&J t dt   } tt | ¡du sJJ tt | ¡du sbJ tt | ¡du szJ tt | ¡du sJ tt | ¡du sªJ tt | ¡du sÂJ tt 	| ¡du sÚJ tt 
| ¡du sòJ tt | ¡du s
J tt | ¡du s"J tt | ¡du s:J tt | ¡du sRJ tt | ¡du sjJ tt | ¡du sJ tt | ¡du sJ tt | ¡du s²J tt | ¡du sÊJ t t  } tt 
| ¡du sêJ tt | ¡du sJ t  t  } tt 
| ¡du s$J tt | ¡du s<J dt  t  } tt 
| ¡du s`J tt | ¡du sxJ dt  } tt 
| ¡du sJ tt | ¡du s°J dt  } tt 
| ¡du sÐJ tt | ¡du sèJ dt  t  } tt 
| ¡du sJ tt | ¡du s$J t t d  } tt 
| ¡du sHJ tt | ¡du s`J t t d  } tt 
| ¡du sJ tt | ¡du sJ t d } tt 
| ¡du sŒJ tt | ¡du sÔJ t d } tt 
| ¡du sôJ tt | ¡du sJ dt  } tt 
| ¡du s,J tt | ¡du sDJ t d } tt 
| ¡du sdJ tt | ¡du s|J d S )NTFrE   rx   re   r   r   )r   r   r   rG   rH   rI   rh   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rX   rY   Útest_Iö  sŽ    
r   c                  C   s 3  t d\} }}tt | ¡d u s$J tt | ¡t | ¡du sBJ tt | ¡t |¡d u s`J tt | ¡t | ¡du s~J tt | ¡t | ¡d u sJ tt | d ¡d u s¶J tt | d ¡t | ¡du sØJ | | }|j\} }tt |¡t | ¡t |¡@ du sJ tt |¡t | ¡t |¡@ du s>J tt |¡t | ¡t |¡@ du shJ tt |¡t | ¡t |¡@ du sJ tt |¡t | ¡t |¡@ t |¡ @ du sÈJ tt |¡t | ¡t | ¡ @ t |¡@ du sþJ tt |¡t | ¡t |¡@ t | ¡ @ t |¡ @ du s@J tt |¡t | ¡t |¡ @ du slJ tt |¡t | ¡t |¡ @ du sJ tt |¡t | ¡t |¡@ du sÂJ tt |¡t | ¡t |¡@ du sìJ tt |¡t | ¡t |¡ @ t |¡ @ du s$J tt |¡t | ¡t | ¡ @ t |¡@ du sZJ tt |¡t | ¡t | ¡ @ t |¡ @ t |¡ @ du sJ tt |¡t | ¡d u sŸJ tt |¡t | ¡d u sÞJ tt |¡t | ¡t 	|¡@ d u sJ tt |¡t | ¡t 	|¡@ d u s2J tt |¡t | ¡t |¡ @ d u s^J tt |¡t | ¡t | ¡ @ t 	|¡@ d u sJ tt |¡t | ¡t | ¡ @ t |¡ @ d u sÌJ tt |¡t | ¡ t |¡ @ d u súJ tt |¡t | ¡t |¡ @ d u s&J tt |¡t | ¡ t |¡@ d u sRJ tt |¡t | ¡t |¡@ du s|J tt |¡t | ¡t |¡ @ t 	|¡ @ d u sŽJ tt |¡t | ¡ t 	| ¡ @ t |¡@ d u sìJ tt |¡t | ¡ t |¡ @ t 	| ¡ @ t 	|¡ @ du s2J tt |¡t |¡ d u sTJ tt |¡t 	| ¡t |¡ @ d u sJ tt |¡t |¡d u s J tt |¡t 	| ¡t |¡@ du sÊJ tt |¡t 	| ¡t |¡ @ t 	|¡ @ d u sJ tt |¡t 	| ¡ t |¡@ d u s.J tt |¡t 	| ¡ t |¡ @ t 	|¡ @ du shJ tt |¡d u sJ tt |¡t 	| ¡d u s J tt |¡t 	|¡d u sÀJ tt |¡t 	| ¡t 	|¡@ d u sêJ tt |¡t 	| ¡t 	|¡ @ d u sJ tt |¡t 	| ¡ t 	|¡@ d u sBJ tt |¡t 	| ¡ t 	|¡ @ d u spJ t d\} }}| | | }|j\} }}tt |¡t 
| ¡t 
|¡@ t 
|¡@ du sÊJ tt |¡t 
| ¡t 
|¡@ t |¡@ du sþJ tt |¡t 
| ¡t 
|¡@ t |¡@ du 	s2J tt |¡t 
| ¡t 
|¡@ t |¡@ du 	sfJ tt |¡t 
| ¡t 
|¡@ t |¡ @ du 	sJ tt |¡t 
| ¡t 
|¡@ t |¡@ du 	sÐJ tt |¡t 
| ¡t 
|¡@ t |¡@ d u 
sJ tt |¡t 
| ¡t 
|¡@ d u 
s.J tt |¡t 
| ¡t 
|¡@ t 	|¡@ d u 
sbJ tt |¡t 
| ¡t |¡@ t |¡@ du 
sJ tt |¡t 
| ¡t |¡@ t |¡@ du 
sÊJ tt |¡t 
| ¡t |¡@ t |¡@ du 
sþJ tt |¡t 
| ¡t |¡@ t |¡ @ du s4J tt |¡t 
| ¡t |¡@ t |¡@ du shJ tt |¡t 
| ¡t |¡@ t |¡@ d u sJ tt |¡t 
| ¡t |¡@ d u sÆJ tt |¡t 
| ¡t |¡@ t 	|¡@ d u súJ tt |¡t 
| ¡t |¡@ t |¡@ du s.J tt |¡t 
| ¡t |¡@ t |¡@ du sbJ tt |¡t 
| ¡t |¡@ t |¡ @ du sJ tt |¡t 
| ¡t |¡@ t |¡@ du sÌJ tt |¡t 
| ¡t |¡@ t |¡@ d u s J tt |¡t 
| ¡t 	|¡@ t |¡@ d u s4J tt |¡t 
| ¡t |¡@ t 	|¡@ d u shJ tt |¡t 
| ¡t |¡@ t |¡@ du sJ tt |¡t 
| ¡t |¡@ t |¡ @ d u sÒJ tt |¡t 
| ¡t |¡@ t |¡@ d u sJ tt |¡t 
| ¡t |¡@ t |¡@ du s:J tt |¡t 
| ¡t |¡@ d u sdJ tt |¡t 
| ¡t |¡@ t 	|¡@ d u sJ tt |¡t 
| ¡t |¡ @ t |¡ @ d u sÐJ tt |¡t 
| ¡t |¡ @ t |¡@ d u sJ tt |¡t 
| ¡t |¡ @ t |¡@ d u s<J tt |¡t 
| ¡t |¡ @ d u shJ tt |¡t 
| ¡t |¡ @ t 	|¡@ d u sJ tt |¡t 
| ¡t |¡@ t |¡@ du sÒJ tt |¡t 
| ¡t |¡@ t |¡@ d u sJ tt |¡t 
| ¡t |¡@ d u s0J tt |¡t 
| ¡t |¡@ t 	|¡@ du sdJ tt |¡t 
| ¡t |¡@ t |¡@ d u sJ tt |¡t 
| ¡t |¡@ d u sÂJ tt |¡t 
| ¡t |¡@ t 	|¡@ d u söJ tt |¡t 
| ¡d u sJ tt |¡t 
| ¡t 	|¡@ d u s@J tt |¡t 
| ¡t 	|¡@ t 	|¡@ d u stJ tt |¡t | ¡t |¡@ t |¡@ du sšJ tt |¡t | ¡t |¡@ t |¡@ du sÜJ tt |¡t | ¡t |¡@ t |¡@ du sJ tt |¡t | ¡t |¡@ t |¡ @ du sFJ tt |¡t | ¡t |¡@ t |¡@ du szJ tt |¡t | ¡t |¡@ t |¡@ d u s®J tt |¡t | ¡t |¡@ d u sØJ tt |¡t | ¡t |¡@ t 	|¡@ d u sJ tt |¡t | ¡t |¡@ t |¡@ du s@J tt |¡t | ¡t |¡@ t |¡@ du stJ tt |¡t | ¡t |¡@ t |¡ @ du sªJ tt |¡t | ¡t |¡@ t |¡@ du sÞJ tt |¡t | ¡t |¡@ t |¡@ d u sJ tt |¡t | ¡t |¡@ d u s<J tt |¡t | ¡t |¡@ t 	|¡@ d u spJ tt |¡t | ¡t |¡@ t |¡@ du s€J tt |¡t | ¡t |¡@ t |¡ @ d u sÚJ tt |¡t | ¡t |¡@ t |¡@ d u sJ tt |¡t | ¡t |¡@ t |¡@ du sBJ tt |¡t | ¡t |¡@ d u slJ tt |¡t | ¡t |¡@ t 	|¡@ d u s J tt |¡t | ¡t |¡ @ t |¡ @ d u sØJ tt |¡t | ¡t |¡ @ t |¡@ d u sJ tt |¡t | ¡t |¡ @ t |¡@ d u sDJ tt |¡t | ¡t |¡ @ d u spJ tt |¡t | ¡t |¡ @ t 	|¡@ d u sŠJ tt |¡t | ¡t |¡@ t |¡@ du sÚJ tt |¡t | ¡t |¡@ t |¡@ d u sJ tt |¡t | ¡t |¡@ d u s8J tt |¡t | ¡t |¡@ t 	|¡@ du slJ tt |¡t | ¡t |¡@ t |¡@ d u s J tt |¡t | ¡t |¡@ d u sÊJ tt |¡t | ¡t |¡@ t 	|¡@ d u sþJ tt |¡t | ¡d u sJ tt |¡t | ¡t 	|¡@ d u sHJ tt |¡t | ¡t 	|¡@ t 	|¡@ d u s|J tt |¡t | ¡t |¡@ t |¡@ du s°J tt |¡t | ¡t |¡@ t |¡@ du säJ tt |¡t | ¡t |¡@ t |¡ @ du sJ tt |¡t | ¡t |¡@ t |¡@ du sNJ tt |¡t | ¡t |¡@ t |¡@ d u sJ tt |¡t | ¡t |¡@ d u s¬J tt |¡t | ¡t |¡@ t 	|¡@ d u sàJ tt |¡t | ¡t |¡@ t |¡@ du sJ tt |¡t | ¡t |¡@ t |¡ @ d u sJJ tt |¡t | ¡t |¡@ t |¡@ d u s~J tt |¡t | ¡t |¡@ t |¡@ du s²J tt |¡t | ¡t |¡@ d u sÜJ tt |¡t | ¡t |¡@ t 	|¡@ d u sJ tt |¡t | ¡t |¡ @ t |¡ @ d u sHJ tt |¡t | ¡t |¡ @ t |¡@ d u s~J tt |¡t | ¡t |¡ @ t |¡@ d u sŽJ tt |¡t | ¡t |¡ @ d u sàJ tt |¡t | ¡t |¡ @ t 	|¡@ d u sJ tt |¡t | ¡t |¡@ t |¡@ du sJJ tt |¡t | ¡t |¡@ t |¡@ d u s~J tt |¡t | ¡t |¡@ d u sšJ tt |¡t | ¡t |¡@ t 	|¡@ du sÜJ tt |¡t | ¡t |¡@ t |¡@ d u sJ tt |¡t | ¡t |¡@ d u s:J tt |¡t | ¡t |¡@ t 	|¡@ d u snJ tt |¡t | ¡d u sJ tt |¡t | ¡t 	|¡@ d u sžJ tt |¡t | ¡t 	|¡@ t 	|¡@ d u sìJ tt |¡t | ¡t |¡@ t |¡@ du s J tt |¡t | ¡t |¡@ t |¡ @ d u sVJ tt |¡t | ¡t |¡@ t |¡@ d u sJ tt |¡t | ¡t |¡@ t |¡@ du sŸJ tt |¡t | ¡t |¡@ d u sèJ tt |¡t | ¡t |¡@ t 	|¡@ d u sJ tt |¡t | ¡t |¡ @ t |¡ @ d u sTJ tt |¡t | ¡t |¡ @ t |¡@ d u sJ tt |¡t | ¡t |¡ @ t |¡@ d u sÀJ tt |¡t | ¡t |¡ @ d u sìJ tt |¡t | ¡t |¡ @ t 	|¡@ d u  s"J tt |¡t | ¡t |¡@ t |¡@ d u  sVJ tt |¡t | ¡t |¡@ t |¡@ d u  sJ tt |¡t | ¡t |¡@ d u  sŽJ tt |¡t | ¡t |¡@ t 	|¡@ d u  sèJ tt |¡t | ¡t |¡@ t |¡@ du !sJ tt |¡t | ¡t |¡@ d u !sFJ tt |¡t | ¡t |¡@ t 	|¡@ d u !szJ tt |¡t | ¡d u !sJ tt |¡t | ¡t 	|¡@ d u !sÄJ tt |¡t | ¡t 	|¡@ t 	|¡@ d u !søJ tt |¡t | ¡ t |¡ @ t |¡ @ d u "s2J tt |¡t | ¡ t |¡@ t |¡ @ d u "sjJ tt |¡t | ¡ t |¡ @ t |¡@ d u "s¢J tt |¡t | ¡ t |¡ @ d u "sÐJ tt |¡t | ¡ t |¡ @ t 	|¡@ d u #sJ tt |¡t | ¡ t |¡@ t |¡@ d u #s>J tt |¡t | ¡ t |¡@ t |¡@ d u #stJ tt |¡t | ¡ t |¡@ d u #s J tt |¡t | ¡ t |¡@ t 	|¡@ d u #sÖJ tt |¡t | ¡ t |¡@ t |¡@ d u $sJ tt |¡t | ¡ t |¡@ d u $s8J tt |¡t | ¡ t |¡@ t 	|¡@ d u $snJ tt |¡t | ¡ d u $sJ tt |¡t | ¡ t 	|¡@ d u $sŒJ tt |¡t | ¡ t 	|¡@ t 	|¡@ d u $sòJ tt |¡t | ¡t |¡@ t |¡@ du %s&J tt |¡t | ¡t |¡@ t |¡@ d u %sZJ tt |¡t | ¡t |¡@ d u %sJ tt |¡t | ¡t |¡@ t 	|¡@ du %sžJ tt |¡t | ¡t |¡@ t |¡@ d u %sìJ tt |¡t | ¡t |¡@ d u &sJ tt |¡t | ¡t |¡@ t 	|¡@ d u &sJJ tt |¡t | ¡d u &sjJ tt |¡t | ¡t 	|¡@ d u &sJ tt |¡t | ¡t 	|¡@ t 	|¡@ du &sÈJ tt |¡t | ¡t |¡@ t |¡@ d u &süJ tt |¡t | ¡t |¡@ d u 's&J tt |¡t | ¡t |¡@ t 	|¡@ d u 'sZJ tt |¡t | ¡d u 'szJ tt |¡t | ¡t 	|¡@ d u 's€J tt |¡t | ¡t 	|¡@ t 	|¡@ d u 'sØJ tt |¡d u 'sðJ tt |¡t 	|¡d u (sJ tt |¡t 	|¡t 	|¡@ d u (s:J tt |¡t 	| ¡t 	|¡@ t 	|¡@ d u (snJ tt d|  ¡d u (sJ tt d|  ¡t | ¡du (s®J t d\} }}| | }|j\} }tt |¡t | ¡t |¡@ du (søJ tt |¡t | ¡t |¡ @ du )s$J tt |¡t | ¡d u )sDJ tt |¡t | ¡ t |¡@ du )spJ tt |¡t | ¡ t |¡ @ du )sJ tt |¡t | ¡ d u )sÀJ tt |¡t |¡d u )sàJ tt |¡t |¡ d u *sJ tt |¡d u *sJ | | | }|j\} }}tt |¡t | ¡t |¡@ t |¡@ du *sfJ tt |¡t | ¡t |¡@ t |¡ @ du *sJ tt |¡t | ¡t |¡@ d u *sÆJ tt |¡t | ¡t |¡ @ t |¡@ du *süJ tt |¡t | ¡t |¡ @ t |¡ @ du +s4J tt |¡t | ¡t |¡ @ d u +s`J tt |¡t | ¡t |¡@ d u +sJ tt |¡t | ¡t |¡ @ d u +s¶J tt |¡t | ¡d u +sÖJ tt |¡t | ¡ t |¡@ t |¡@ du ,sJ tt |¡t | ¡ t |¡@ t |¡ @ du ,sDJ tt |¡t | ¡ t |¡@ d u ,spJ tt |¡t | ¡ t |¡ @ t |¡@ du ,sšJ tt |¡t | ¡ t |¡ @ t |¡ @ du ,sâJ tt |¡t | ¡ t |¡ @ d u -sJ tt |¡t | ¡ t |¡@ d u -s<J tt |¡t | ¡ t |¡ @ d u -sjJ tt |¡t | ¡ d u -sJ tt |¡t |¡t |¡@ d u -s¶J tt |¡t |¡t |¡ @ d u -sâJ tt |¡t |¡d u .sJ tt |¡t |¡ t |¡@ d u .s.J tt |¡t |¡ t |¡ @ d u .s\J tt |¡t |¡ d u .s~J tt |¡t |¡d u .sJ tt |¡t |¡ d u .sÀJ tt |¡t |¡ t | ¡@ t |¡@ t |¡@ d u /s J tt |¡t | ¡t |¡ @ t |¡@ t |¡ @ t |¡@ du /sLJ t d\} }}tt | d ¡d u /svJ tt d|  ¡d u /sJ tt d|  ¡t | ¡du /s¶J tt | |  ¡d u /sÒJ tt tj|  ¡d u /sðJ tt tj|  ¡t 	| ¡du 0sJ tt tj|  ¡t | ¡d u 0s<J tt d|  ¡t | ¡du 0s`J tt t| ¡d u 0s|J tt d|  ¡t | ¡ du 0s¢J tt | d ¡t | ¡ du 0sÈJ tt t| ¡du 0säJ tt t| ¡t | ¡ du 1s
J tt t| ¡d u 1s&J tt t| ¡t | ¡d u 1sJJ tt t| ¡t | ¡ du 1spJ tt t| ¡t | ¡du 1sJ tt t| ¡t | ¡du 1sžJ tt t| ¡d u 1sÔJ tt t| ¡t | ¡du 1søJ tt td¡du 2sJ tt t| ¡du 2s0J tt t| ¡t | ¡ du 2sVJ tt t| ¡du 2srJ tt t| ¡t | ¡ du 2sJ tt dt|  ¡du 2sžJ tt t| d ¡du 2sØJ tt t| d ¡du 2søJ tt t| t|  ¡du 3sJ d S )Nzx,y,zTrE   Fr   )r'   r   r   rR   rK   ri   ÚargsrN   rl   rj   rO   rm   rp   Zextended_nonzeror$   ZHalfr0   r-   r/   rc   rk   r.   r7   r5   )r   r   r   ÚarX   rX   rY   Útest_bounded`  s   "
****
ÿÿ
ÿÿ
(
ÿÿ
,,ÿÿ
ÿÿ

ÿÿ
ÿÿ
*
ÿÿ
  ÿÿ
ÿÿ
,ÿÿ

ÿÿ
.
ÿÿ
ÿÿ
ÿÿ

ÿÿ
 ÿÿ
 
ÿ
ÿÿ
"
ÿÿ
 ÿÿ

ÿ
ÿÿ
ÿÿ
 
ÿÿ
  ÿÿ

ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
*ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
*ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
,ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
 ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
*ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
*ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
,ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
 ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
*ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ

ÿÿ
ÿÿ
ÿÿ
,ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
 ÿÿ
ÿÿ
ÿÿÿ
ÿ
ÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ

ÿ
ÿÿ

ÿÿÿ

ÿÿÿ

ÿÿ

ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ
 ÿÿ
ÿÿÿ
 
ÿÿ

ÿÿ
 ÿÿ
. ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
"ÿÿ
ÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ
 ÿÿ
ÿÿÿ
ÿÿÿ
ÿÿ
ÿÿÿ
 ÿÿ
ÿÿÿ
 ÿÿ
ÿÿÿ
$
*, ,." "ÿÿ

ÿÿ
*ÿÿ

ÿÿ
,*, ÿÿ

ÿÿ
, ÿÿ
 
ÿÿ
.,."*, ,." "ÿÿÿ
ÿ
ÿþþ
$&&$&&&$&$$$&&   r   c                   C   s@   t t ttt ¡du sJ t t ttt ¡du s<J dS )z4We need to support relations in ask for this to workTN)r   r   rR   r7   r   r5   rX   rX   rX   rY   Útest_bounded_xfailS  s    r   c                   C   s²  t t t¡du sJ t t t¡t t¡ du s6J t t t¡t t¡du sTJ t t t¡t t¡du srJ t t t¡t t¡du sJ t t t¡t t¡du s®J t t t¡t t¡ du sÎJ t t dt ¡du sèJ t t dt ¡t t¡ du sJ t t td ¡du s*J t t td ¡t t¡ du sPJ t t td ¡du slJ t t td ¡t t¡ du sJ t t t	t¡du s®J dS )zdBy default objects are Q.commutative that is why it returns True
    for both key=True and key=FalseTFr   rE   N)
r   r   rG   r   rK   rM   rJ   rN   r   r/   rX   rX   rX   rY   Útest_commutativeZ  s      &&&r   c                   C   sö  t t t¡d u sJ t t t¡t t¡du s4J t t t¡t t¡d u sRJ t t t¡t t¡ du srJ t t t¡t t¡du sJ t t t¡t t¡ d u s°J t t t¡t t¡du sÎJ t t t¡t t¡du sìJ t t t¡t t¡du sJ t t t¡t 	t¡du s,J t t t¡t 
t¡du sLJ t t td ¡t t¡du spJ t t td ¡t t¡du sJ t t td ¡t t¡du sžJ t t td ¡t t¡du sÜJ t t td ¡t 	t¡du s J t t td ¡t t¡du s$J t t td ¡t t¡du sHJ t t td ¡t t¡du slJ t t tt ¡t t¡t t¡@ du sJ t t tt ¡t t¡t 	t¡@ du sÈJ t t dt d ¡t t¡du sðJ t t dt d ¡t t¡du sJ t t dt d ¡t t¡du s@J t t dt d ¡t t¡du shJ t t dt d ¡t t¡du sJ t t dt d ¡t 	t¡du sžJ t t dt d ¡t t¡du sàJ t t dt d ¡t t¡du sJ t t dt d ¡t t¡du s0J t t td ¡t t¡du sTJ t t td ¡t t¡du sxJ t t td ¡t t¡du sJ t t td ¡t t¡du sÀJ t t td ¡t t¡du säJ t t td ¡t 	t¡du sJ t t td ¡t t¡du s,J t t td ¡t t¡du sPJ t t td ¡t t¡du stJ t t dt ¡t t¡du sJ t t dt ¡t t¡du sŒJ t t dt ¡t t¡du sàJ t t dt ¡t t¡du sJ t t dt ¡t t¡du s(J t t dt ¡t 	t¡du sLJ t t dt ¡t t¡du spJ t t dt ¡t t¡du sJ t t dt ¡t t¡du sžJ t t tt ¡t t¡t t¡@ du sæJ t t tt¡du sJ t t tdt d ¡du s&J t t tt¡du sBJ t t tdt d ¡du sfJ t t tt¡du sJ t t tt¡du sJ t t tt¡du sºJ t t tt¡du sÖJ t t tt¡du sòJ d S r   )r   r   rK   r   r   rJ   rI   rL   rN   rM   rh   rH   rP   rQ   r7   r5   r.   r*   r,   r+   rX   rX   rX   rY   Útest_complexq  st         $$$$$$$$..((((((((($$$$$$$$$$$$$$$$$$.$$r   c                   C   s  t t t¡d u sJ t t t¡t t¡d u s4J t t t¡t t¡ du sTJ t t t¡t t¡d u srJ t t t¡t t¡d u sJ t t dt ¡d u sªJ t t dt ¡t t¡du sÌJ t t dt ¡t t¡du sîJ t t dt ¡t t¡du sJ t t dt ¡t t¡du s6J t t dt ¡t t¡ d u s\J t t dt ¡t t¡d u sJ t t dt ¡t t¡du s€J t t dt ¡t t¡du sÈJ t t td ¡t t¡du sìJ t t td ¡t t¡du sJ t t td ¡t t¡du s4J t t td ¡t t¡du sXJ t t dt ¡t t¡du s|J t t dt ¡t t¡du s J t t tt	 ¡t t¡t t	¡@ du sÎJ t t tt	 ¡t t¡t t	¡@ du süJ t t tt	 ¡t t¡t t	¡@ du s*J t t dt d ¡t t¡du sRJ t t dt t	 ¡t t¡t t¡@ d u sJ t t dt t	 ¡t t¡t t¡@ d u s¶J t t tt	 t
 ¡t t¡t t	¡@ t t
¡@ du sòJ t t tt	 t
 t ¡t t¡t t	¡@ t t
¡@ t t¡@ d u s<J t t tt¡t t¡du s`J t t tt¡t t¡ d u sJ t t tt¡t t¡du sªJ t t tt¡t t¡ d u sÐJ t t tt¡t t¡du sôJ t t tt¡t t¡du sJ t t dt ¡t t¡du s<J t t td ¡t t¡du s`J t t td ¡t t¡du sJ t t dt ¡t t¡d u sšJ t t td ¡d u sÄJ t t tt ¡t t¡t t¡@ t t¡ @ d u sþJ t t tt ¡t t¡t t¡@ t t¡ @ du s8J t t tt ¡t t¡t t¡@ t t¡@ du spJ t t tt ¡t t¡t t¡@ t t¡@ du sšJ t t tt ¡t t¡t t¡@ t t¡ @ d u sâJ t t tt ¡t t¡t t¡@ t t¡@ d u sJ t t tt ¡t t¡t t¡@ t t¡ @ d u sTJ t t tt ¡t t¡t t¡@ t t¡@ d u sJ t t tt ¡t t¡d u s°J t t tt ¡t t¡d u sÔJ t t tt	 ¡t t¡t t	¡@ d u sJ t t tt ¡t t¡d u s&J t t ttt	  ¡t t¡t t	¡@ du sXJ t t ttt	  ¡t t¡t t	¡@ d u sJ d S )NFr   Trx   rE   é   re   )r   r   rP   r   rH   rI   rN   rL   rQ   r   r   r   r*   r,   r+   rJ   r   r   r	   rO   r
   rX   rX   rX   rY   Ú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u s>J t t tt tt  ¡t t¡t t¡@ t t¡@ du s|J d S rt   )r   r   rP   r   r   r   rH   rQ   rX   rX   rX   rY   Ú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 u s>J d S ©N)r   r   rP   r   r   r   rH   rX   rX   rX   rY   Ú2test_evenness_in_ternary_integer_product_with_even  s    r   c                   C   s  t t t¡t t¡du sJ t t t¡t t¡du s<J t t t¡t t¡du sZJ t t t¡t t¡du sxJ t t t¡t t¡du sJ t t t ¡t t¡du s¶J t t t ¡t t¡du sÖJ t t tt	j
 ¡t t¡du súJ t t t¡t t¡d u sJ d S rt   )r   r   ri   r   rl   rN   rc   rO   rm   r$   ÚInfinityrJ   rk   rX   rX   rX   rY   Útest_extended_real  s      $r   c                  C   sÔ  t t t¡t t¡du sJ t t t¡t t¡du s<J t t t¡t t¡d u sZJ t t t¡t t¡d u sxJ t t t¡t t¡d u sJ t t t¡t 	t¡d u sŽJ t t t¡t 
t¡ du sÔJ t t dt ¡t t¡du söJ t t dt ¡t t¡du sJ t t dt ¡t t¡du s>J t t dt ¡t t¡du sbJ t t dt ¡t t¡du sJ t t td ¡t t¡du sªJ t t td ¡t t¡du sÎJ t t td ¡t t¡du sòJ t t td ¡t t¡du sJ t t td ¡t t¡du s:J t t dt ¡t t¡du s^J t t dt ¡t t¡du sJ t t dt ¡t t¡du sŠJ t t dt ¡t t¡du sÊJ t t dt ¡t t¡du sîJ t t dt ¡t t¡du sJ t t dt ¡t t¡du s6J t t dt ¡t t¡du sZJ t t dt ¡t t¡du s~J t t dt ¡t t¡du s¢J t t t¡t 
t¡ du sÄJ t t tt ¡t t¡t t¡@ d u sòJ t t tt ¡t t¡t t¡@ du s J t t tt ¡t t¡t t¡@ du sNJ t t tt ¡t t¡t t¡@ du s|J t t tt ¡t t¡t t¡@ du sªJ t t tt ¡t t¡t t¡@ du sØJ ttttttfD ]Ž} t t | d¡du sJ t t | ddd¡du s(J t t | ddd¡du sHJ t t | t¡t t¡d u slJ t t | t¡t t¡t 	t¡@ du sèJ qèttfD ]ž}t t |d¡du sÆJ t t |ddd¡du sæJ t t |ddd¡du sJ t t |t¡t t¡d u s*J t t |t¡t t¡t 	td ¡@ du sŠJ qŠttfD ]f}t t |d¡du sJ t t |ddd¡du sšJ t t |t¡t t¡du shJ qhd S )NTFr   rE   r   ©Úevaluater   )r   r   rI   r   rH   rL   rJ   rN   rO   rb   rh   rP   rQ   r   r.   r7   r8   r3   r4   r5   r/   r1   r6   r2   ©ÚfÚgÚhrX   rX   rY   Útest_rational  sd     "$$$$$$$$$$$$$$$$$$$"......  $2  $6 r   c                   C   sX  t t t¡d u sJ t t t¡t t¡d u s4J t t t¡t t¡du sRJ t t t¡t t¡du spJ t t t¡t t¡du sJ t t t¡t t¡du s¬J t t td ¡t t¡d u sÎJ t t td ¡t 	t¡d u sðJ t t td ¡t t¡du sJ t t td ¡t t¡du s8J t t td ¡t t¡du s\J t t tt
 ¡t t¡d u sJ t t tt
 ¡t 	t¡d u s€J t t tt
 ¡t t¡du sÈJ t t tt
 ¡t t¡d u sìJ t t tt
 ¡t t¡du sJ t t tt ¡t t¡t t¡@ d u s>J t t tt ¡t t¡t 	t¡@ d u slJ t t tt ¡t t¡t t¡@ d u sJ t t tt ¡t t¡t t¡@ d u sÈJ t t tt ¡t t¡t t¡@ d u söJ t t tt ¡t t¡t 	t¡@ d u s$J t t tt ¡t t¡t t¡@ du sRJ t t tt ¡t t¡t t¡@ du sJ t t tt ¡t t¡t t¡@ du s®J t t tt ¡t t¡t 	t¡@ d u sÜJ t t tt ¡t t¡t t¡@ d u s
J t t tt ¡t t¡t t¡@ du s8J t t tt ¡t t¡t 	t¡@ d u sfJ t t tt ¡t t¡t t¡@ du sJ t t t
t ¡t t¡du sžJ t t t
t ¡t 	t¡d u sÜJ t t t
t ¡t t¡du s J t t t
t ¡t t¡du s$J t t t
t ¡t t¡du sHJ t t tt ¡t t¡t t¡@ du svJ t t tt t ¡t t¡t t¡@ t t¡@ du s²J t t tt t ¡t t¡t t¡@ t t¡@ du sîJ t t tt t ¡t t¡t t¡@ t t¡@ d u s*J t t tt t ¡t t¡t t¡@ t t¡@ d u sfJ t t t¡d u s~J t t t¡t t¡du sJ t t t¡t t¡du sŸJ t t td ¡t t¡du sâJ t t td ¡t 	t¡d u sJ t t td ¡t t¡d u s*J t t td ¡t t¡du sNJ t t td ¡t t¡d u srJ t t tt
 ¡t t¡du sJ t t tt
 ¡t 	t¡d u sºJ t t tt
 ¡t t¡d u sÞJ t t tt
 ¡t t¡du sJ t t tt
 ¡t t¡du s&J t t t¡t t¡du sFJ t t tt ¡t t¡t t¡@ du stJ t t tt ¡t t¡t 	t¡@ d u s¢J t t tt ¡t t¡t t¡@ d u sÐJ t t tt ¡t t¡t t¡@ du sþJ t t tt ¡t t¡t t¡@ du 	s,J t t tt ¡t t¡t 	t¡@ d u 	sZJ t t tt ¡t t¡t t¡@ d u 	sJ t t tt ¡t t¡t t¡@ d u 	s¶J t t tt ¡t t¡t t¡@ d u 	säJ t t tt ¡t t¡t 	t¡@ d u 
sJ t t tt ¡t t¡t t¡@ du 
s@J t t tt ¡t t¡t t¡@ du 
snJ t t tt ¡t t¡t 	t¡@ d u 
sJ t t tt ¡t t¡t t¡@ d u 
sÊJ t t t
t ¡t t¡du 
sîJ t t t
t ¡t t¡du sJ t t t
t ¡t 	t¡d u s6J t t tt ¡t t¡t t¡@ du sdJ t t tt t ¡t t¡t t¡@ t t¡@ d u s J t t tt t ¡t t¡t t¡@ t t¡@ d u sÜJ t t tt t ¡t t¡t t¡@ t t¡@ du sJ t t tt t ¡t t¡t t¡@ t t¡@ du sTJ d S )NFTrE   )r   r   rU   r   rV   rM   rS   rJ   rc   rK   r   r   r   rX   rX   rX   rY   Útest_hermitian_  s   ""$$$$$$$$ÿÿ
.ÿÿ
...........$$$$$.,ÿÿ
ÿÿ
ÿÿ
ÿÿ
  $$$$$$$$$$ ÿþ
ÿÿ
ÿÿ
ÿÿ
"ÿ
."ÿ
ÿÿ
......$$$.ÿÿ
ÿÿ
ÿÿ
ÿÿr   c                  C   s^
  t t t¡d u sJ t t t¡t t¡du s4J t t t¡t t¡du sRJ t t td ¡t t¡du stJ t t td ¡t t¡du sJ t t tt ¡t t¡du sžJ t t tt ¡t t¡du sÚJ t t tt ¡t t¡t t¡@ du sJ t t tt ¡t t¡t t¡@ du s6J t t tt ¡t t¡t t¡@ du sdJ t t tt ¡t t¡t t¡@ d u sJ t t tt t	 ¡t t¡t t¡@ t t	¡@ du sÎJ t t tt t	 ¡t t¡t t¡@ t t	¡@ d u s
J t t tt t	 ¡t t¡t t¡@ t t	¡@ du sFJ t t tt ¡t t¡du sjJ t t tt ¡t t¡du sJ t t tt ¡t t¡d u s²J t t tt ¡t t¡t t¡@ du sàJ t t tt ¡t t¡t t¡@ du sJ t t tt ¡t 
t¡d u s2J t t tt ¡t t¡d u sVJ t t tt ¡t t¡du szJ t t tt ¡t t¡du sJ t t tt ¡t t¡du sÂJ t t dt t ¡t t¡du sêJ t t td ¡t t¡du sJ t t tt ¡t t¡t t¡@ d u s<J t t tt ¡t t¡t t¡@ d u sjJ t t tt ¡t t¡t t¡@ d u sJ t t tt ¡t t¡t t¡@ d u sÆJ t t tt ¡t t¡t t¡@ d u sôJ t t tt ¡t t¡t t¡@ d u s"J t t tt ¡t t¡t t¡@ du sPJ t t tt ¡t t¡t t¡@ d u s~J t t tt ¡t t¡t t¡@ du s¬J t t tt ¡t t¡t t¡@ du sÚJ t t tt ¡t t¡t t¡@ du sJ t t tt ¡t 
t¡t t¡@ d u s6J t t tt ¡t 
t¡t t¡@ t t¡ @ du spJ t t tt ¡t t¡t t¡@ d u sJ t t tt ¡t 
t¡t t¡@ t dt ¡@ du sÚJ t t tt ¡t 
t¡t t¡@ t dt ¡ @ du sJ t t tt ¡t 
t¡t t¡@ d u sFJ t t tt ¡t t¡t t¡@ t dt ¡ @ du sJ t t tt ¡t t¡t t¡@ t dt ¡@ d u sÀJ t t tt¡du sÜJ t t tdt ¡du süJ t t ttd ¡du sJ t t tt¡t t¡d u s@J t t tt¡t t¡d u sdJ t t tt¡t t¡du sJ t t ttt¡t t¡d u s°J t t ttt¡t t¡d u sØJ t t ttt¡du søJ t t ttt ¡t t¡du 	s J tttt t ddtdd} t t | ¡t t¡du 	s^J tttt t d ddtdd} t t | ¡t t¡du 	s J t t tdt t t t ¡t t¡du 	sÔJ t t tdt t dd¡du 	süJ t t ttt d dd¡du 
s$J t t tttdd¡t t¡t 
t¡@ du 
sZJ d S )	NFrE   Tr   r   r   rx   ry   )r   r   rM   r   rJ   rS   r   r   rK   r   rO   rN   rP   rQ   rH   rI   r/   r.   r%   r#   r    ©ÚeqrX   rX   rY   Útest_imaginaryÈ  s    """"....,ÿÿ
ÿÿ
ÿÿ
$$$..$$$$$($............:.<>.><  $$$(( ( " 4((r   c                   C   sR  t t t¡d u sJ t t t¡t t¡du s4J t t t¡t t¡ du sTJ t t t¡t t¡ du stJ t t t¡t t¡ d u sJ t t t¡t t¡t t¡B du sŒJ t t dt ¡t t¡du sÞJ t t dt ¡t t¡du sJ t t dt ¡t t¡du s&J t t dt ¡t 	t¡d u sJJ t t dt ¡t t¡d u snJ t t t
dt ¡t t¡du sJ t t t
dt ¡t t¡d u sŸJ t t td ¡t t¡du sâJ t t td ¡t t¡du sJ t t td ¡t t¡d u s*J t t td ¡t t¡d u sNJ d S )NTFr   rx   )r   r   rH   r   rJ   rN   rP   rQ   rS   rI   r0   rL   rX   rX   rX   rY   Útest_integer  s"       ("$$$$(($$$r    c                   C   sT  t t t¡t t¡du sJ t t t¡t t¡du s<J t t t¡t t¡ du s\J t t t¡t t¡du szJ t t t¡t t¡ d u sJ t t t ¡t t¡du sºJ t t t ¡t t¡ d u sÜJ t t t ¡t t¡du süJ t t t ¡t t¡du sJ t t td ¡t t¡du sBJ t t tt ¡d u s^J t t tt ¡t t¡d u sJ t t tt ¡t t¡t t¡@ du s°J t t tt ¡t t¡t t¡@ du sÞJ t t dt	 ¡du súJ t t t
t	d tt	d  d ¡d u s*J t t t	 t	t
dd tdd    ¡d u s`J t t td ¡d u s|J t t td ¡t t¡du s J t t td ¡t t¡d u sÄJ t t tt	 ¡t t¡d u sèJ t t tt ¡d u sJ t t tt ¡t t¡t t¡@ du s2J t t tt ¡t t¡t t¡@ du s`J t t tt ¡t t¡t t¡@ d u sJ t t tt ¡d u sªJ t t tt ¡t t¡t t¡@ du sØJ t t tt ¡t t¡t t¡@ du sJ t t tt ¡t t¡t t¡@ du s4J t t tt¡du sPJ d S )NTFrE   r   gffffffö?)r   r   rO   r   rN   rJ   rS   r   Únonpositiver   r5   r7   rK   rP   rQ   rH   r*   rX   rX   rX   rY   Útest_negative.  s<       " "$$..06$$$......r¢   c                   C   s¬  t t t¡d u sJ t t t¡t t¡d u s4J t t t¡t t¡du sRJ t t t¡t t¡du spJ t t t¡t t¡t t¡B du sJ t t tt ¡d u s²J t t tt ¡t t¡t t¡@ du sÞJ t t tt ¡t t¡t t¡@ d u sJ t t tt ¡t t¡t t¡@ du s:J t t dt ¡d u sVJ t t dt ¡t t¡du szJ t t dt ¡t t¡du sJ t t tt ¡t t¡d u sÂJ t t tt ¡t t¡t t¡@ du sðJ t t tt ¡t t¡du sJ t t tt¡d u s0J t t tt¡t t¡du sTJ t t t	t
dt ¡du sxJ t t tdd tdd  d ¡d u sšJ d S )NTr   FrE   )r   r   rb   r   rJ   rN   rO   r   r*   r/   r.   r   r5   r7   rX   rX   rX   rY   Útest_nonzeroX  s&    (,..$$$.$$$r£   c                   C   sþ  t t t¡d u sJ t t t¡t t¡d u s4J t t t¡t t¡du sRJ t t t¡t t¡du spJ t t t¡t t¡t t¡B du sJ t t t¡t t¡t t¡@ du sÀJ t t tt	 ¡d u sÚJ t t tt	 ¡t t¡t t	¡@ du sJ t t tt	 ¡t t¡t t	¡@ d u s6J t t tt	 ¡t t¡t t	¡@ du sdJ t t dt ¡d u sJ t t dt ¡t t¡du s€J t t dt ¡t t¡du sÈJ t t tt	 ¡t 
t¡d u sìJ t t tt¡d u sJ t t tt¡t t¡du s,J t t t¡t t¡du sLJ t t t¡t t¡du slJ t t t¡t t¡du sJ t t t¡t t¡d u s¬J t t t¡t t¡du sÌJ t t t¡t t	¡B t tt	 ¡du súJ d S )NFTr   )r   r   rc   r   rJ   rN   rO   Únonnegativer¡   r   rb   r*   rH   rP   rQ   rX   rX   rX   rY   Ú	test_zerou  s,    ((...$$$$     r¥   c                   C   s	  t t t¡d u sJ t t t¡t t¡du s4J t t t¡t t¡d u sRJ t t t¡t t¡ du srJ t t t¡t t¡d u sJ t t t¡t t¡d u s®J t t t ¡t t¡du sÎJ t t dt ¡d u sèJ t t dt ¡t t¡du sJ t t dt ¡t t¡du s0J t t dt ¡t t¡du sTJ t t dt ¡t t¡ d u szJ t t dt ¡t t¡d u sJ t t td ¡t t¡d u sÂJ t t td ¡t t¡d u sæJ t t td ¡t t¡du s
J t t td ¡t t¡du s.J t t td ¡t t¡du sRJ t t dt ¡t t¡du svJ t t dt ¡t t¡du sJ t t dt ¡t t¡du sŸJ t t dt ¡t t¡du sâJ t t tt	 ¡t t¡t t	¡@ du sJ t t tt	 ¡t t¡t t	¡@ du s>J t t tt	 ¡t t¡t t	¡@ du slJ t t tt	 ¡t t¡t t	¡@ du sJ t t tt	 t
 ¡t t¡t t	¡@ t t
¡@ du sÖJ t t tt	 t
 t ¡t t¡t t	¡@ t t
¡@ t t¡@ d u s J t t dt d ¡t t¡du sHJ t t dt t	 ¡t t¡t t	¡@ du szJ t t dt t	 ¡t t¡t t	¡@ du s¬J t t dt t	 ¡t t¡t t	¡@ d u sÞJ t t tt	 ¡t t¡t t	¡@ du sJ t t tt	 ¡t t¡t t	¡@ du s:J t t dt t	 ¡t t¡t t¡@ d u slJ t t dt t	 ¡t t¡t t¡@ d u sJ t t tt¡t t¡du sÂJ t t dt ¡t t¡du sæJ t t td ¡t t¡du s
J t t td ¡t t¡du s.J t t dt ¡t t¡d u sRJ t t tt ¡t t¡t t¡@ t t¡ @ d u sJ t t tt ¡t t¡t t¡@ t t¡ @ du sÆJ t t tt ¡t t¡t t¡@ t t¡@ du sþJ t t tt ¡t t¡t t¡@ t t¡@ du s6J t t tt ¡t t¡t t¡@ t t¡ @ d u spJ t t tt ¡t t¡t t¡@ t t¡@ d u sšJ t t tt ¡t t¡t t¡@ t t¡ @ d u sâJ t t tt ¡t t¡t t¡@ t t¡@ d u sJ t t tt ¡t t¡d u s>J t t tt ¡t t¡d u sbJ t t tt	 ¡t t¡t t	¡@ d u sJ t t tt ¡t t¡d u sŽJ t t ttt	  ¡t t¡t t	¡@ du sæJ t t ttt	  ¡t t¡t t	¡@ d u 	sJ d S )NTFr   rx   rE   re   )r   r   rQ   r   rH   rI   rN   rL   rP   r   r   r   r*   r   r   r	   rO   r
   rX   rX   rX   rY   Ú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u s>J t t tt tt  ¡t t¡t t¡@ t t¡@ du s|J d S ©NF)r   r   rQ   r   r   r   rH   rX   rX   rX   rY   Ú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 u s>J d S r   )r   r   rQ   r   r   r   rH   rP   rX   rX   rX   rY   Ú1test_oddness_in_ternary_integer_product_with_evenæ  s    r©   c                   C   sÂ  t t t¡t t¡du sJ t t t¡t t¡ du s>J t t t¡t t¡d u s\J t t t¡t t¡ du s|J t t dt ¡t t¡d u sJ t t tt ¡d u sžJ t t tt ¡t t¡d u sÚJ t t tt ¡t t¡t t¡@ d u sJ t t dt ¡t t¡du s,J t t dt ¡d u sHJ t t td ¡t t¡du slJ t t td ¡t t¡du sJ t t tt ¡t t¡t t¡@ du sŸJ d S )NTFr   ry   )r   r   rS   r   rH   r   rX   rX   rX   rY   Ú
test_primeê  s      "".$$$rª   c                  C   sö  t t t¡t t¡du sJ t t t¡t t¡du s<J t t t¡t t¡d u sZJ t t t ¡t t¡du szJ t t t ¡t t¡du sJ t t tt ¡t t¡t t¡@ du sÆJ t t tt ¡t t¡t t¡@ du sòJ t t tt ¡t t¡t t¡@ d u s J t t tt ¡t t¡t t¡@ du sNJ t t dt ¡t t¡du srJ t t¡t t¡@ t t	¡@ t t
¡@ } t t tt t	 ¡d u sºJ t t tt t	 ¡| du sÜJ t t t t t	 ¡| du s J t t tt ¡t t¡d u s$J t t td ¡t t¡du sHJ t t td ¡t t¡du slJ t t td ¡t t¡du sJ t t ddtd   ¡t t¡du sŒJ t t dt ¡du sØJ t t dt ¡du sôJ t t ttd ttd  d ¡d u s$J t t t ttdd tdd    ¡d u sZJ t t tt¡t t¡du s~J t t tt¡ t t¡du s€J t t ttt ¡t t¡d u sÌJ t t tt¡t t¡d u sðJ t t tdt t dd¡t t¡du s J t t ttt dd¡t t¡du sLJ t t ttt t ¡t t¡du sxJ t t ttt t ¡t t¡du s€J t t ttt t ¡t t¡d u sÐJ t t tt¡t t¡du sôJ t t tt¡t t¡du sJ t t tt¡t t¡d u s<J t t ttd ¡t t¡du sdJ t t tt¡t t¡t t¡@ sJ t t tt¡t t¡d u s²J t t tt¡d u sÎJ t t tt¡t t¡du sòJ d S )NTFr   rx   rE   r   )r   r   rN   r   rO   rb   r   r€   rM   r   r   r   rJ   r5   r7   r.   r#   rP   rQ   r/   r)   rH   r*   ©ÚassumptionsrX   rX   rY   Útest_positiveü  sP      ,,..$( "$$$$$,06$&($0,,,,$$$(*$r­   c                   C   s°   t t d¡sJ t t d¡s$J t t d¡du s:J t t t¡ t t¡sVJ t t t¡t t¡du stJ t t td¡du sJ t t t¡t t¡du s¬J d S )Nre   r   rE   F)r   r   r¡   rN   r   r0   rM   rX   rX   rX   rY   Útest_nonpositive7  s    r®   c                   C   s°   t t d¡du sJ t t d¡s(J t t d¡s:J t t t¡ t t¡sVJ t t t¡t t¡du stJ t t td¡du sJ t t t¡t t¡du s¬J d S )Nre   Fr   rE   )r   r   r€   rO   r   r0   rM   rX   rX   rX   rY   Útest_nonnegativeA  s    r¯   c                   C   s8  t t t¡d u sJ t t t¡t t¡du s4J t t t¡t t¡du sRJ t t t¡t t¡du spJ t t t¡t t¡du sJ t t t¡t t¡du s¬J t t t¡t t¡du sÊJ t t t¡t 	t¡du sèJ t t tt
d ¡t t¡du sJ t t tt
d ¡t t¡du s8J t t td ¡t t¡du s\J t t tt ¡t t¡du sJ t t tt ¡t t¡d u s€J t t dt ¡t t¡du sÈJ t t tt ¡t t¡du sìJ t t tt ¡t t¡du sJ t t tt ¡t t¡d u s4J d S )NTr   éþÿÿÿFrE   )r   r   rJ   r   rb   rN   rO   rH   rP   rS   r0   r   rK   rM   rX   rX   rX   rY   Útest_real_basicJ  s"    (($$$$$$r±   c                   C   sŠ  t t td ¡t t¡du s"J t t tt¡t t¡du sDJ t t tt ¡t t¡t t¡@ du spJ t t tt ¡t t¡t t¡@ d u sJ t t tt ¡t t¡t t¡@ du sÈJ t t tt ¡t 	t¡t 	t¡@ d u sôJ t t tt ¡t 	t¡t t¡@ d u s"J t t tt ¡t t¡t 	t¡@ d u sPJ t t td ¡t 	t¡du stJ t t tt ¡t t¡t t¡@ du s¢J t t tt ¡t t¡t t¡@ du sÐJ t t tt ¡t t¡t 
t¡@ d u sþJ t t tt ¡t 	t¡t t¡@ d u s,J t t tt ¡t 	t¡t t¡@ du sZJ t t tt ¡t 	t¡t t¡@ du sJ t t ttt  ¡t t¡t tt ¡@ t 
tt ¡@ t t¡@ t t¡@ du sàJ t t ttt  ¡t t¡t 
tt ¡@ t t¡@ t t¡@ du s*J t t ttt  ¡t t¡t tt ¡@ du s`J t t ttt  ¡t t¡t tt ¡@ t t¡@ du s J t t ttt  ¡t t¡t tt ¡@ t t¡@ du sàJ t t t t ¡t 	t¡du sJ t t tt ¡t 	t¡du s*J t t tt ¡t 	t¡d u sNJ t t tt ¡t 	t¡d u srJ t t ttt tt  ¡t t¡du s¢J d S )Nr   TFr   )r   r   rJ   r   r0   rO   r   rH   rN   rM   rI   rQ   rP   r   r   r   r#   r/   rX   rX   rX   rY   Útest_real_powa  s2    "",,,,..$......XJ6@@&$$$r²   c                  C   s  t t tt¡d u sJ t t tt¡d u s4J t t tt¡t t¡du sVJ t t tt¡t t¡du sxJ t t tt¡d u sJ t t tt¡t t¡du sŽJ t t ttt ¡t t¡du sÚJ t t tdt t dd¡du sJ t t ttt dd¡du s&J t t ttt d dd¡du sNJ t t t	t¡du sjJ t t t	dt ¡du sJ t t t	td ¡du sªJ t t t	t¡t 
t¡d u sÎJ t t t	t¡t t¡du sòJ t t t	tt¡t t¡d u sJ t t t	tt¡t 
t¡d u sBJ ttdt t t ddtdd} t t | ¡t t¡du sJ t t ttt ¡t t¡du s¬J t t ttt ¡t 
t¡d u sÔJ t t tt¡du sðJ t t tt¡du sJ d S )NTr   Fr   rE   )r   r   rJ   r7   r   r5   r.   r#   r   r/   rK   rM   r%   rH   r,   r+   r   rX   rX   rY   Ú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<J t t tddt dgdt dtgdt dgg¡dksxJ tddd} t t tddt | gdt dtgdt dgg¡d ksÀJ t t td	¡dksÚJ t t td
dtdfdf¡dksJ t t td
d| dfdf¡d ks*J 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u s¢J t t |¡du sºJ t t |d ¡du sÖJ |d }| ¡  t t |¡du sþJ tddt dg| dt gdt dgg}t t |¡d u s>J d S )Nr   ry   rx   rE   TFr   ©rK   )©é   é   r|   )r·   é   r   ©r|   r   r[   rµ   r·   r   r¹   r°   )	r   r   rU   r>   r   r'   r?   rV   Zsimplify)r   ÚAÚBÚCZ_ArX   rX   rY   Útest_matrix  s"    <<<((,4(rœ   c               	   C   sð  t t t¡d u sJ t t t¡du s,J t t dt ¡du sFJ t t td ¡du s`J t t td¡du szJ t t dtd ¡du sJ t t tdd ¡du s¶J t t ttd ¡du sÔJ t t tdttd  ¡du súJ t t dttdtdd   ¡du s(J t t dttddt    ¡du sTJ tt	t
tttfD ]Ž} t t | d¡du sJ t t | ddd	¡du s€J t t | d
dd	¡du sÄJ t t | t¡t t¡d u sèJ t t | t¡t t¡t t¡@ du sdJ qdttfD ]ž}t t |d¡du sBJ t t |ddd	¡du sbJ t t |ddd	¡du sJ t t |t¡t t¡d u sŠJ t t |t¡t t¡t td ¡@ du s"J q"ttfD ]f}t t |d¡du sJ t t |ddd	¡du s$J t t |t¡t t¡du säJ qät t tt	d¡du slJ t t ttttd  ¡d u sJ t t d¡du s¬J t t t¡t t¡du sÌJ t t t¡t t¡du sìJ d S )NTr   rx   r   rE   é   é   Fr   r   gÃõ(\Â@)r   r   rh   r   r   r0   r    r#   r.   r7   r8   r3   r4   r5   rb   r/   r1   r6   r2   r   Ztranscendentalr   rX   rX   rY   Útest_algebraic·  s@    &.,  $2  $6 ( ( rÀ   c                   C   s^   t t t¡du sJ t t t¡¡ t t t¡du s<J t ¡  t t t¡du sZJ dS )z Test ask with global assumptionsNT)r   r   rH   r   r   ÚaddÚclearrX   rX   rX   rY   Útest_globalå  s
    rÃ   c                  C   s`   t t t¡du sJ t } |  t t¡¡ t t t¡| ddu sFJ t t t¡du s\J dS )z(Test ask with custom assumptions contextN)ÚcontextT)r   r   rH   r   r   rÁ   )Zlocal_contextrX   rX   rY   Útest_custom_contextî  s
    rÅ   c                   C   s   t t t¡t t¡t t¡? du s(J t t t¡tt t¡t t¡du sRJ t t t¡tt t¡t t¡du s|J d S r§   )r   r   rO   r   rJ   rN   r9   r;   rX   rX   rX   rY   Útest_functions_in_assumptions÷  s    (*rÆ   c                   C   s8   t t t¡t t¡@ t t¡t t¡? ddu s4J d S )Nr«   F)r   r   rO   r   rH   rJ   rN   rX   rX   rX   rY   Útest_composite_aský  s
    ÿÿrÇ   c                   C   s&  t ddu sJ t ddu s J t t t¡ t t¡du s@J t t t¡ t t¡d u s`J t t t¡t t¡@ t t¡du sJ t t t¡t t¡@ d u sšJ t t t¡t t¡B t t¡du sÐJ t t t¡t t¡B d u sðJ t t t¡t t¡? t t¡du sJ t tt t¡t t¡ddt t¡du sJJ t tt t¡t t¡ddd u srJ t t	t t¡t 
t¡t 
t¡du sJ t t	t t¡t 
t¡d u sÂJ t t	t t¡t t¡t t¡d u sîJ t t t¡t t¡B t t¡t t¡B du s"J d S )NTFr   )r   r   rO   r   rN   rJ   rG   rH   r:   r9   rP   rX   rX   rX   rY   Útest_composite_proposition  s*      ( ( *ÿÿÿ
(,$,rÈ   c                   C   sH   t t t¡t t¡ B du s"J t t t¡t t¡ @ du sDJ d S rg   )r   r   rJ   r   rX   rX   rX   rY   Útest_tautology  s    "rÉ   c                   C   sŠ   t t t¡t t¡t t¡@ du s(J t t t¡t t¡t t¡B d u sPJ t t t¡t t¡t t¡? d u sxJ t t t¡t t¡t t¡?  du s¢J d S rt   )r   r   rJ   r   r   rN   rX   rX   rX   rY   Útest_composite_assumptions  s    (((rÊ   c                  C   sÌ  t tdd  G dd dt} zät  td|  W d   n1 sF0    Y  t & tt t¡du snJ W d   n1 s0    Y  t * tt td ¡du s®J W d   n1 sÂ0    Y  W t  t	d|  W d   n1 sô0    Y  t`n8t  t	d|  W d   n1 s,0    Y  t`0 t td	d  G d
d dt
}zX| t_tj t¡dd }tt t¡du sJ tt td ¡du s¬J W t`nt`0 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   rX   rX   rX   rY   Ú<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 rt   rX   ©Úexprr¬   rX   rX   rY   r(   %  s    z3test_key_extensibility.<locals>.MyAskHandler.SymbolN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr(   rX   rX   rX   rY   ÚMyAskHandler$  s   rÕ   rÌ   NTrE   c                   S   s   t t t¡S r   rË   rX   rX   rX   rY   rÍ   5  rÎ   c                   @   s   e Zd ZdS )z+test_key_extensibility.<locals>.MyPredicateN©rÑ   rÒ   rÓ   rX   rX   rX   rY   ÚMyPredicate8  s   r×   c                 S   s   dS rt   rX   rÏ   rX   rX   rY   Ú_<  s    z!test_key_extensibility.<locals>._c                   S   s   t t t¡S r   rË   rX   rX   rX   rY   rÍ   C  rÎ   )rB   ÚAttributeErrorr   rC   r   r   r   rÌ   r   r   r   Úregisterr(   )rÕ   r×   rØ   rX   rX   rY   Útest_key_extensibility  s2    (4:(þ*

rÛ   c                  C   sL   ddl m}  G dd d| }tj |¡dd }tt | ¡du sHJ 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Ö   rX   rX   rX   rY   ÚMyTypeK  s   rÝ   c                 S   s   dS rt   rX   rÏ   rX   rX   rY   rØ   N  s    z"test_type_extensibility.<locals>._TN)Z
sympy.corerÜ   r   rS   rÚ   r   )rÜ   rÝ   rØ   rX   rX   rY   Útest_type_extensibilityF  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snJ d S r   )	r<   r:   r   rH   rI   rJ   rK   r=   r   )Úknown_factsÚknown_facts_keysZknown_facts_cnfÚmappingrX   rX   rY   Útest_single_fact_lookupU  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ÐJ d S r   )
r<   r:   r   rH   r   rI   rJ   rK   r   Úset)rß   rà   rX   rX   rY   Útest_generate_known_facts_dicta  s    þ$ýÿrä   c               	      s   t d t } t | ¡}t }|jD ]$}| tdd t|t	dD ¡ q&t
 |ksZJ  fddt D }t|| }t |ksJ dS )z)"Test that ask_generated.py is up-to-dater   c                 s   s   | ]}t |jj|jV  qd S r   )r   ÚargÚfunctionZis_Not)Ú.0ZlitrX   rX   rY   Ú	<genexpr>w  rÎ   z.test_known_facts_consistent.<locals>.<genexpr>)Úkeyc                    s   g | ]}| qS rX   rX   )rç   Úpred©r   rX   rY   Ú
<listcomp>z  rÎ   z/test_known_facts_consistent.<locals>.<listcomp>N)r(   r   r   Zto_CNFrã   ÚclausesrÁ   Ú	frozensetÚsortedÚstrr   r   r   r   )ZfactZcnfrí   ZclÚkeysrá   rX   rë   rY   Útest_known_facts_consistentn  s    

"
rò   c                   C   sª   t t dtdd tdd   ¡du s.J t t ttdtddd¡du sVJ t t ttdtddd¡du s~J t t ttdtddd¡du sŠJ d S )Nl   Ò
>V3&¥Z
 rE   r   Tr   r   F)	r   r   rS   r5   r7   rP   r   r$   rH   rX   rX   rX   rY   Útest_Add_queries  s    .((ró   c                   C   sH   t t td ¡" tt t¡r&J W d    n1 s:0    Y  d S )NrE   )r   r   rN   r   r   rX   rX   rX   rY   Ú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   rJ   rX   rX   rX   rY   rÍ     rÎ   z!test_issue_5421.<locals>.<lambda>©rB   Ú	TypeErrorrX   rX   rX   rY   Útest_issue_5421  s    r÷   c                   C   s   t tdd  d S )Nc                   S   s
   t tjS r   )r   r   rN   rX   rX   rX   rY   rÍ     rÎ   z!test_issue_3906.<locals>.<lambda>rõ   rX   rX   rX   rY   Útest_issue_3906  s    rø   c                   C   sR   t t ttd ¡t t¡d u s&J t t ttd ¡ t t¡du sNJ d S )Nr   T)r   r   rN   r/   r   rO   rX   rX   rX   rY   Ú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   rN   r   rO   rX   rX   rX   rY   rÍ     rÎ   z!test_issue_6732.<locals>.<lambda>c                   S   s    t t t¡t t¡t t¡@ S r   )r   r   rO   r   rN   rX   rX   rX   rY   rÍ     rÎ   )rB   Ú
ValueErrorrX   rX   rX   rY   Útest_issue_6732  s    rû   c                   C   sx  t t tt¡t t¡du s"J t t tt¡t t¡du sDJ t t tt¡t t¡du sfJ t t tt¡d u sJ t t tt¡t t¡d u s¢J t t tt¡t t¡d u sÄJ t t tt	dd¡du säJ t t tt¡t t¡t 
td ¡@ du sJ t t tt¡t t¡t td ¡@ du sHJ t t tt¡t t¡d u slJ t t tt	dd¡du sJ t t tt¡t td ¡t 
td ¡@ du sÄJ t t tt¡t td ¡d u sìJ t t tt¡t t¡du sJ t t tt¡t t¡du s4J t t tt¡t t¡du sXJ t t tt¡d u stJ d S )NTFrE   r   )r   r   rN   r4   r
   rO   rc   r   r3   r    r¡   r€   r1   r2   rJ   rM   rX   rX   rX   rY   Útest_issue_7246  s"    """"" 22$"6($$$rü   c                   C   s&   t t tt¡t t¡du s"J d S rt   )r   r   rN   r1   r   rc   rX   rX   rX   rY   Útest_issue_7246_failingŽ  s    rý   c                  C   sî  t ddd} tt | ¡du s"J tt | ¡du s8J tt | ¡du sNJ t ddd} tt | ¡du spJ tt | ¡du sJ tt | ¡du sJ t ddd} tt | ¡d u sŸJ tt | ¡du sÔJ t ddd} tt | ¡du söJ tt | ¡du sJ tt | ¡du s&J t ddd} tt | ¡du sJJ t ddd	} tt | ¡du snJ tt | ¡du sJ t ddd
} tt | ¡du sªJ tt | ¡d u sÂJ tt 	| ¡d u sÚJ t ddd} tt 
| ¡du sþJ t ddd} tt | ¡du s"J tt | ¡du s:J t ddd} tt | ¡du s^J tt | ¡du svJ t ddd} tt | ¡du sJ tt | ¡du s²J t ddd} tt | ¡du sÖJ tt | ¡du sîJ t ddd} tt | ¡du sJ tt 	| ¡du s*J t ddd} tt 	| ¡du sNJ t ddd} tt | ¡du srJ t ddd} tt | ¡du sJ tt | ¡du s®J t ddd} tt | ¡du sÒJ tt | ¡du sêJ d S )Nr   T)rJ   F)rM   rŽ   )rN   )rG   )rO   )r€   )rR   )rS   )rT   )rP   )rQ   )rb   )rc   ©rH   )rI   )rL   )r'   r   r   rJ   rM   rK   rN   rO   rG   rc   rR   rS   rT   rP   rQ   rb   rH   rI   rL   rë   rX   rX   rY   Útest_check_old_assumption»  sf    rÿ   c                   C   sr   t t d¡du sJ t t d¡du s,J t t d¡du sBJ t t d¡du sXJ t t d¡du snJ d S )Nr_   Fg      @g      @g       @)r   r   rH   rS   rT   rP   rQ   rX   rX   rX   rY   Útest_issue_9636	  s
    r   c                   C   sp   t t dt ¡d u sJ t t dt  ¡d u s6J t t dt ¡d u sPJ t t dt  ¡d u slJ d S ©Nr   )r   r   rM   r   rJ   rX   rX   rX   rY   Útest_autosimp_used_to_fail		  s    r  c                     sl  ddl m  G  fdddt} zŒt  td|  W d    n1 sH0    Y  tddd}t " tt d	¡sxJ W d    n1 s0    Y  t * tt |¡t |¡sžJ W d    n1 sÌ0    Y  W t`nt`0 G d
d dt	}zl| t_tj 
t¡dd }tj 
t¡ fdd}tt d	¡s>J tt |¡t |¡sZJ W t`nt`0 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   rH   r/   rÏ   rX   rX   rY   r   	  s    z7test_custom_AskHandler.<locals>.MersenneHandler.Integerc                    s   |  |v rdS d S rt   rX   rÏ   r  rX   rY   r(   	  s    z6test_custom_AskHandler.<locals>.MersenneHandler.SymbolN)rÑ   rÒ   rÓ   rÔ   r   r(   rX   r  rX   rY   ÚMersenneHandler	  s   
r  Úmersenner   Trþ   r   c                   @   s   e Zd ZdS )z1test_custom_AskHandler.<locals>.MersennePredicateNrÖ   rX   rX   rX   rY   ÚMersennePredicate*	  s   r	  c                 S   s    t t t| d d¡rdS d S r  r  rÏ   rX   rX   rY   rØ   .	  s    z!test_custom_AskHandler.<locals>._c                    s   |  |v rdS d S rt   rX   rÏ   r  rX   rY   rØ   2	  s    )Úsympy.logic.boolalgr  r   rC   r   r(   r   r   r  r   rÚ   r   )r  r   r	  rØ   rX   r  rY   Útest_custom_AskHandler	  s*    	(0:


r  c                  C   s   G dd dt } zh|  t_tj tt¡dd }tj ttt¡dd }tt dd¡s\J tt dd	d
¡srJ W t`nt`0 d S )Nc                   @   s   e Zd ZdS )z.test_polyadic_predicate.<locals>.SexyPredicateNrÖ   rX   rX   rX   rY   ÚSexyPredicate>	  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   rS   ©rç   r   r«   rX   rY   rè   F	  rÎ   ú5test_polyadic_predicate.<locals>._.<locals>.<genexpr>FrE   r   é   ©rï   Úall)Úint1Úint2r¬   r   rX   r«   rY   rØ   C	  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«   rX   rY   rè   M	  rÎ   r  Fr   rE   r  r   r  )r  r  Zint3r¬   r   rX   r«   rY   rØ   J	  s    rz   r[   r   é   é   )r   r   Z	sexyprimerÚ   r   r   )r  rØ   rX   rX   rY   Útest_polyadic_predicate<	  s    

r  c                  C   sN   t djd u sJ G dd dt } | td}| td}|j|ju sJJ d S )NZmypredicatec                   @   s   e Zd ZdS )z5test_Predicate_handler_is_unique.<locals>.MyPredicateNrÖ   rX   rX   rX   rY   r×   ]	  s   r×   Úmp1Úmp2)r   Úhandlerr&   )r×   r  r  rX   rX   rY   Ú test_Predicate_handler_is_uniqueW	  s
    r  c                   C   st   t t td¡t t¡sJ t t td¡t t¡r8J t t td¡t t¡rTJ t t td¡t t¡spJ d S r  )r   r   r   r   rc   rb   ÚnerX   rX   rX   rY   Útest_relationald	  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   r`   rZ   r\   r^   ra   rd   rf   rn   rr   rs   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ò   ró   rô   r÷   rø   rù   rû   rü   rý   rÿ   r   r  r  r  r  r  rX   rX   rX   rY   Ú<module>   sÒ   0 ()0aj   v

KF

?i
O*J

:
	
!
-		(

F+