U
    ˜9%e7  ã                   @   sÐ   d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZ d
d„ 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d„ ZdS )é    )Úsymbols)ÚcosÚsin)ÚQQÚZZ)ÚPoly)ÚNotInvertible)ÚFiniteExtension)ÚDomainMatrix)Úraises)ÚxÚyÚtc                     s¼  t ttd d tƒƒ‰ ˆ jdks$t‚tˆ ƒdks4t‚ˆ j‰ˆ ¡ ˆ ksJt‚ˆˆ ˆ dƒks^t‚tt	‡fdd„ƒ ˆ j
ˆ jˆfks„t‚ˆ dƒˆ jks–t‚ˆd ˆ dƒksªt‚ˆd dksºt‚dˆ dˆ  dˆ ksÖt‚dˆ d ˆ d	ƒksît‚ˆ dƒ ¡ ˆ dƒkst‚tt‡ fd
d„ƒ t ttd t d tddƒ‰ˆjdksHt‚ˆj} ˆj
ˆdƒ| | d fkslt‚| d | ks~t‚| d ˆdƒks”t‚| d ˆdƒksªt‚| d | d ksÀt‚| d | d ksÖt‚| d | d |  d ksôt‚ˆtd t ƒ ¡ d|  kst‚ˆtd ƒd ˆtd ƒ ¡ ks<t‚| d | d  ˆdƒksZt‚| d d| d  d  | d d ks„t‚| d d| d  d  | d d ks®t‚d| d d  | d |  d ksÔt‚| d d d | d  d ksøt‚tt‡fdd„ƒ t ttd td  t d tddƒ}|jdks@t‚t|ƒdksRt‚|j}dtd td  t d  }|t |t   ¡ ||ƒks–t‚|t |t  | |dƒks¸t‚d S )Né   é   zZZ[x]/(x**2 + 1)éÿÿÿÿc                      s   ˆ d S )N© r   r   )Úir   úe/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/polys/agca/tests/test_extensions.pyÚ<lambda>   ó    z&test_FiniteExtension.<locals>.<lambda>é   é   é   c                      s   ˆ dƒ  ¡ S )Nr   ©Úinverser   )ÚAr   r   r       r   )Úmodulusé   é   é   é	   é   é   iíÿÿÿc                      s   ˆ dƒ  ¡ S )Nr   r   r   )ÚFr   r   r   4   r   T)ÚfieldzZZ(x)[t]/(t**2 - x**3 - x + 1))r	   r   r   ZrankÚAssertionErrorÚstrÚ	generatorÚparentr   Ú	TypeErrorZbasisÚoner   ÚNotImplementedErrorr   r   )ÚaÚKr   Úcr   )r   r$   r   r   Útest_FiniteExtension   sP    "&**&$&"r0   c                  C   s’   t td d ttd} t td d ttd}t| ƒ}t|ƒ}|tt td d ƒƒksXt‚|tt td d ƒƒkstt‚t||t| ƒhƒdksŽt‚d S )Nr   ©Údomain)r   r   r   r   r	   r&   Úlen)Úp1Úp2ÚK1ÚK2r   r   r   Útest_FiniteExtension_eq_hash@   s    r8   c                     s>  t ttd d ttdƒ} | tƒ‰ ˆ d d d | jks<t‚dˆ d d  | jksVt‚ˆ d d ˆ d  ˆ d ksvt‚ˆ d d ˆ d  ˆ d ks–t‚ˆ d d ˆ d  | jks´t‚tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ t ttd d tt	dƒ} | tƒ‰ ˆ d d d | jks(t‚tt
‡ fd	d„ƒ d S )
Nr   r   r1   r   c                      s   ˆ d d d S )Nr   r   r   r   r   ©Úxfr   r   r   T   r   z*test_FiniteExtension_mod.<locals>.<lambda>c                      s   ˆ g  S ©Nr   r   r9   r   r   r   U   r   c                      s   g ˆ  S r;   r   r   r9   r   r   r   V   r   c                      s   ˆ d d ˆ d  S )Nr   r   r   r   r9   r   r   r   \   r   )r	   r   r   r   Úzeror&   r   ÚZeroDivisionErrorr*   r   r,   ©r.   r   r9   r   Útest_FiniteExtension_modK   s      r?   c                  C   sJ   t ttd d ttdƒ} | tƒ}|  t¡|ks4t‚|  |¡tksFt‚d S )Nr   r   r1   )r	   r   r   r   Z
from_sympyr&   Úto_sympy©r.   r:   r   r   r   Útest_FiniteExtension_from_sympy_   s    rB   c                  C   sJ   t ttd d tddƒ} t ttd d tddƒ}|  t¡|ksFt‚d S )Nr   r   r   r1   r   )r	   r   r   Z
set_domainr   r&   )ÚKZÚKQr   r   r   Útest_FiniteExtension_set_domaing   s    rE   c                  C   sD   t ttd d ƒƒ} | tƒ}|  |d d |d ¡|d ks@t‚d S )Né   r   r   )r	   r   r   Zexquor&   rA   r   r   r   Útest_FiniteExtension_exquom   s    rG   c                  C   sŽ   t ttd d ƒƒ} tt }| tƒ|tƒ }}|  |¡|ks@t‚| |¡|ksRt‚t ttd d tdƒ}| tddƒt¡|jd ksŠt‚d S ©Nr   r   r1   )r	   r   r   r   Úconvertr&   Zconvert_fromr+   )r6   r7   Úx1Zx2r.   r   r   r   Útest_FiniteExtension_convertt   s    rK   c                     sº  t ttd d ttdƒ} t ttd d ttdƒ}t ttd d ttt dƒ}t ttd d tt t¡dƒ}| jdks€t‚|jdksŽt‚|jdksœt‚|jdksªt‚| |||fD ]þ‰ ˆ  	t¡‰ˆˆ j
 ˆksÖt‚ˆˆ j
 ˆksèt‚ˆˆ j
 ˆ jksüt‚tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡ ‡fd	d„ƒ ˆ jr~ˆˆ ˆ j
ksTt‚ˆˆ ˆ j
ksht‚ˆˆ ˆ jks´t‚q¶tt‡fd
d„ƒ tt‡fdd„ƒ tt‡fdd„ƒ q¶d S )Nr   r   r1   TFc                      s
   ˆˆ j  S r;   ©r<   r   ©r.   ÚxKr   r   r      r   z4test_FiniteExtension_division_ring.<locals>.<lambda>c                      s
   ˆˆ j  S r;   rL   r   rM   r   r   r      r   c                      s
   ˆˆ j  S r;   rL   r   rM   r   r   r   ‘   r   c                      s   ˆ ˆ  S r;   r   r   ©rN   r   r   r   —   r   c                      s   ˆ ˆ  S r;   r   r   rO   r   r   r   ˜   r   c                      s   ˆ ˆ  S r;   r   r   rO   r   r   r   ™   r   )r	   r   r   r   r   r   Z
frac_fieldZis_Fieldr&   rI   r+   r<   r   r=   r,   )rD   rC   ZKQtZKQtfr   rM   r   Ú"test_FiniteExtension_division_ring€   s.     
rP   c                  C   s  t ttd d ƒƒ} ttt| d}|j| ks0t‚| ¡ tks@t‚|d  ¡ dksTt‚t ttd d ttdƒ} t ttd d t| dƒ}t	|ƒdks˜t‚| 
tt ¡}| |¡tt ks¼t‚| |d ¡ddt t  ksÞt‚ttt t|d}|d tddt t  t|dkst‚d S )Nr   r1   zQQ[x]/(x**2 - 2)[t]/(t**2 - 2)rF   )r	   r   r   r   r2   r&   Zas_exprr   r   r'   rI   r@   )r.   Úpr7   ZeKr   r   r   Útest_FiniteExtension_Polyœ   s    "rR   c                     s  t dƒ\} ‰‰tˆƒtˆƒ | tˆƒ tˆƒ |  tˆƒ tˆƒ gtˆƒtˆƒ | tˆƒ tˆƒ | tˆƒ tˆƒ gtˆƒ|  tˆƒ dgg}‡‡fdd„}|t|  ƒ}|tƒ|  }||fD ]X‰ ‡ fdd„|D ƒ}t|dˆ ƒ}| ¡ d ˆ j d	  }|ˆ  | d
 tˆƒ ¡ksÀt‚qÀd S )Nzrho, phi, thetar   c                    sp   t ttˆ ƒd tˆ ƒd  d tˆ ƒ| tˆ ƒ dƒ} t ttˆƒd tˆƒd  d tˆƒ| tˆƒ dƒ} | S rH   )r	   r   r   r   r>   )rQ   r   r   r   Úmake_extension¸   s    66z<test_FiniteExtension_sincos_jacobian.<locals>.make_extensionc                    s   g | ]}‡ fd d„|D ƒ‘qS )c                    s   g | ]}ˆ   |¡‘qS r   )rI   )Ú.0Úer>   r   r   Ú
<listcomp>Á   s     zCtest_FiniteExtension_sincos_jacobian.<locals>.<listcomp>.<listcomp>r   )rT   Úrowr>   r   r   rV   Á   s     z8test_FiniteExtension_sincos_jacobian.<locals>.<listcomp>)r   r   r   r   r   )	r   r   r   r   r
   Zcharpolyr+   rI   r&   )ÚrÚelementsrS   ZKsc1ZKsc2Z
elements_KÚJZdetr   )r.   rQ   r   r   Ú$test_FiniteExtension_sincos_jacobian®   s    64ýr[   N) Zsympy.core.symbolr   Z(sympy.functions.elementary.trigonometricr   r   Zsympy.polysr   r   Zsympy.polys.polytoolsr   Zsympy.polys.polyerrorsr   Zsympy.polys.agca.extensionsr	   Zsympy.polys.domainmatrixr
   Zsympy.testing.pytestr   Z	sympy.abcr   r   r   r0   r8   r?   rB   rE   rG   rK   rP   rR   r[   r   r   r   r   Ú<module>   s$   2