U
    ZÊ¹jŽY  ã                   @   s\  d dl mZmZ d dl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 d dlmZmZmZ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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d„ Z+d d!„ Z,d"d#„ Z-d$d%„ Z.d&d'„ Z/d(d)„ Z0d*d+„ Z1d,d-„ Z2d.d/„ Z3d0d1„ Z4d2d3„ Z5d4d5„ Z6d6d7„ Z7d8d9„ Z8d:d;„ Z9d<d=„ Z:d>d?„ Z;d@dA„ Z<dBdC„ Z=dDdE„ Z>dFdG„ Z?dHdI„ Z@dJdK„ ZAdLdM„ ZBdNdO„ ZCdPdQ„ ZDdRdS„ ZEdTdU„ ZFdVdW„ ZGdXdY„ ZHdZd[„ ZId\d]„ ZJd^d_„ ZKd`da„ ZLdbdc„ ZMddde„ ZNdfdg„ ZOdhdi„ ZPdjdk„ ZQdldm„ ZRdndo„ ZSdpdq„ ZTdrds„ ZUdtdu„ ZVdvS )wé    )ÚxÚzeta)ÚPolyÚcyclotomic_poly)ÚFFÚQQÚZZ)ÚDomainMatrixÚDM)ÚClosureFailureÚMissingUnityErrorÚStructureError)	ÚModuleÚModuleElementÚModuleEndomorphismÚ
PowerBasisÚPowerBasisElementÚfind_min_polyÚis_sq_maxrank_HNFÚmake_mod_eltÚto_col©Úis_int)ÚUnificationFailed)Úraisesc                  C   sB   ddddg} t | ƒ}|jjs t‚|jdks.t‚| ¡ | ks>t‚d S )Né   é   é   é   )r   r   )r   ÚdomainZis_ZZÚAssertionErrorÚshapeÚflat)ÚcÚm© r%   új/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/polys/numberfields/tests/test_modules.pyÚtest_to_col   s
    r'   c                      sd   t ƒ ‰ tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ d S )Nc                      s   ˆ j S ©N)Únr%   ©ÚMr%   r&   Ú<lambda>   ó    z,test_Module_NotImplemented.<locals>.<lambda>c                      s   ˆ   ¡ S r(   )Úmult_tabr%   r*   r%   r&   r,      r-   c                      s
   ˆ   d ¡S r(   ©Ú	representr%   r*   r%   r&   r,      r-   c                      s   ˆ   ¡ S r(   )Ústarts_with_unityr%   r*   r%   r&   r,      r-   c                      s   ˆ   tddƒ¡S )Nr   r   )Úelement_from_rationalr   r%   r*   r%   r&   r,      r-   )r   r   ÚNotImplementedErrorr%   r%   r*   r&   Útest_Module_NotImplemented   s    r4   c                  C   sÈ   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}| dt dt¡ ¡}| dt dt¡ ¡}|jdd�|||gksrt	‚|jdd�|||gksŒt	‚| 
¡ |ksœt	‚| |¡|ks®t	‚tƒ }| 
¡ d ksÄt	‚d S )Né   r   r   r   T)Zinclude_self)r   r   r   r   Úsubmodule_from_matrixr	   Úeyer   Z	ancestorsr    Zpower_basis_ancestorZnearest_common_ancestorr   )ÚTÚAÚBÚCÚDr+   r%   r%   r&   Útest_Module_ancestors"   s    r=   c                  C   sÚ   t tdtƒƒ} t| ƒ}tddddgƒ}| ¡ }| |¡dks@t‚| |¡dksRt‚| d¡dksdt‚| t 	dt
¡d d …df ¡dksŠt‚| t 	dt¡d d …df ¡dks°t‚| t 	dt
¡d d …df ¡dksÖt‚d S )	Nr5   r   r   r   r   TFr   )r   r   r   r   r   Ú	transposeZis_compat_colr    r	   r7   r   r   )r8   r9   ÚcolÚrowr%   r%   r&   Útest_Module_compat_col0   s    &&rA   c                     s’   t tdtƒƒ} t| ƒ‰ ˆ dƒj ¡ ddddgks4t‚ˆ dƒj ¡ ddddgksRt‚t dt	¡d d …df }ˆ |ƒj|ks|t‚t
t‡ fdd„ƒ d S )Nr5   r   r   r   r   c                      s   ˆ dƒS )Néÿÿÿÿr%   r%   ©r:   r%   r&   r,   D   r-   z"test_Module_call.<locals>.<lambda>)r   r   r   r   r?   r"   r    r	   r7   r   r   Ú
ValueError)r8   r?   r%   rC   r&   Útest_Module_call=   s    rE   c                  C   sP   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}| ¡ dks<t	‚| ¡ dksLt	‚d S )Nr5   r   r   TF)
r   r   r   r   r6   r	   r7   r   r1   r    ©r8   r9   r:   r%   r%   r&   Útest_Module_starts_with_unityG   s
    rG   c            	      C   sº   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}| ¡ }| 	¡ }t
t||ƒƒD ]j\}\}}dgd }|j|ksnt‚|j|ks|t‚d||< ||t|ƒƒks˜t‚d||< ||t|ƒƒksJt‚qJd S )Nr5   r   r   r   r   )r   r   r   r   r6   r	   r7   r   Zbasis_elementsZbasis_element_pullbacksÚ	enumerateÚzipÚmoduler    r   )	r8   r9   r:   ZbasisÚbpÚiÚeÚpr#   r%   r%   r&   Útest_Module_basis_elementsO   s    
rO   c                  C   s�   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}| ¡ j	 
¡ ddddgksJt‚| ¡ j|ks\t‚| ¡ j	 
¡ ddddgkszt‚| ¡ j|ksŒt‚d S )Nr5   r   r   r   )r   r   r   r   r6   r	   r7   r   Úzeror?   r"   r    rJ   rF   r%   r%   r&   Útest_Module_zero_   s    rQ   c                  C   s�   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}| ¡ j	 
¡ ddddgksJt‚| ¡ j|ks\t‚| ¡ j	 
¡ ddddgkszt‚| ¡ j|ksŒt‚d S )Nr5   r   r   r   r   )r   r   r   r   r6   r	   r7   r   Úoner?   r"   r    rJ   rF   r%   r%   r&   Útest_Module_onei   s    rS   c                  C   s´   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}| t	ddƒ¡}| t	ddƒ¡}|j
ddddgksbt‚|jdkspt‚|j|ks~t‚|j
ddddgks”t‚|jdks¢t‚|j|ks°t‚d S )Nr5   r   r   é   é   r   )r   r   r   r   r6   r	   r7   r   r2   r   Úcoeffsr    ÚdenomrJ   )r8   r9   r:   ZrAZrBr%   r%   r&   Ú!test_Module_element_from_rationals   s    rX   c                     sž   t tdtƒƒ} t| ƒ‰ dˆ dƒ dˆ dƒ dˆ dƒ dˆ dƒ g}ˆ  |¡‰|d  ¡  |d  ¡ ¡}ˆj|kstt‚t	t
‡ fdd„ƒ t	t
‡ ‡fdd„ƒ d S )	Nr5   r   r   r   é   c                      s
   ˆ   g ¡S r(   ©Úsubmodule_from_gensr%   ©r9   r%   r&   r,   ‹   r-   z1test_Module_submodule_from_gens.<locals>.<lambda>c                      s   ˆ   dˆ dƒ ˆdƒg¡S )Nr   r   rZ   r%   ©r9   r:   r%   r&   r,   �   r-   )r   r   r   r   r[   ÚcolumnZhstackÚmatrixr    r   rD   )r8   Zgensr+   r%   r]   r&   Útest_Module_submodule_from_gens�   s    ,
r`   c                     sŠ   t tdtƒƒ} t| ƒ‰ ˆ  dt dt¡ ¡}|tddddgƒƒ}| 	¡ }|j
 ¡ ddddgksbt‚tt‡ fdd	„ƒ tt‡ fd
d	„ƒ d S )Nr5   r   r   r   r   rY   é   c                      s   ˆ   t dt¡¡S )Nr   )r6   r	   r7   r   r%   r\   r%   r&   r,   ˜   r-   z3test_Module_submodule_from_matrix.<locals>.<lambda>c                      s   ˆ   dt dt¡ ¡S )Nr   r5   )r6   r	   r7   r   r%   r\   r%   r&   r,   š   r-   )r   r   r   r   r6   r	   r7   r   r   Ú	to_parentr?   r"   r    r   rD   )r8   r:   rM   Úfr%   r\   r&   Ú!test_Module_submodule_from_matrix�   s    rd   c            	      C   sœ   t tdtƒƒ} t| ƒ}| ¡ }|tddddgƒƒ}| ¡ }|j ¡ ddddgksTt	‚|dƒ|dƒ|dƒ|dƒf\}}}}|| |ksˆt	‚|d |ks˜t	‚d S )Nr5   r   r   r   r   r   )
r   r   r   r   Úwhole_submoduler   rb   r?   r"   r    )	r8   r9   r:   rM   rc   Ze0Úe1Úe2Ze3r%   r%   r&   Útest_Module_whole_submodule�   s    $rh   c                  C   s*   t tdtƒƒ} t| ƒ}t|ƒdks&t‚d S )Nr5   z&PowerBasis(x**4 + x**3 + x**2 + x + 1))r   r   r   r   Úreprr    )r8   r9   r%   r%   r&   Útest_PowerBasis_repr©   s    rj   c                  C   s.   t tdtƒƒ} t| ƒ}t| ƒ}||ks*t‚d S ©Nr5   )r   r   r   r   r    rF   r%   r%   r&   Útest_PowerBasis_eq¯   s    rl   c                     sÂ   t tdtƒƒ} t| ƒ}| ¡ ‰ ddddgddddgddddgddddgdœddddgddddgddddgdœddddgddddgdœdddddgidœ}ˆ |ks¤t‚t‡ fd	d
„ˆ D ƒƒs¾t‚d S )Nr5   r   r   )r   r   r   r   rB   )r   r   r   )r   r   r   c                 3   s6   | ].}ˆ | D ] }ˆ | | D ]}t |ƒV  qqqd S r(   r   )Ú.0ÚuÚvr#   r*   r%   r&   Ú	<genexpr>Á   s     
    z+test_PowerBasis_mult_tab.<locals>.<genexpr>)r   r   r   r   r.   r    Úall)r8   r9   Úexpr%   r*   r&   Útest_PowerBasis_mult_tab¶   s    ,"ýrs   c                     sd   t tdtƒƒ} t| ƒ‰ tddddgƒ}ˆ |ƒ}ˆ  |¡|ks@t‚ˆ |dd�‰tt‡ ‡fdd„ƒ d S )	Nr5   r   r   r   r   ©rW   c                      s
   ˆ   ˆ¡S r(   r/   r%   ©r9   Úbr%   r&   r,   Ë   r-   z+test_PowerBasis_represent.<locals>.<lambda>)	r   r   r   r   r   r0   r    r   r   )r8   r?   Úar%   ru   r&   Útest_PowerBasis_representÄ   s    rx   c                  C   s”   t tdtƒƒ} t| ƒ}t ddt  ƒ}t td ƒ}t dtƒ}| |¡jddddgksXt‚| |¡jddddgkstt‚| |¡jddddgks�t‚d S )Nr5   r   r   r   r   rB   )r   r   r   r   Zelement_from_polyrV   r    )r8   r9   rc   ÚgÚhr%   r%   r&   Ú!test_PowerBasis_element_from_polyÎ   s    
r{   c                     s`  t  d¡} t  d¡}t| ƒ‰ | t ddƒt ddƒddgƒ}ˆ  |¡}|jddddgksXt‚|jdksft‚| ¡ |ksvt‚|t ddƒt ddƒddgƒ‰tt	‡ ‡fd	d
„ƒ |  
|¡}ˆ  |¡‰ˆjddddgksÐt‚ˆjdksÞt‚ˆ 
¡ |ksît‚| 
ˆ¡‰tt	‡ ‡fdd
„ƒ t| jjƒ}| |¡‰ˆjddddgk�s:t‚ˆjdk�sJt‚tt‡fdd
„ƒ d S )Nr5   rU   r   r   r   é*   é   rY   c                      s
   ˆ   ˆ¡S r(   )Úelement_from_ANPr%   )r:   Údr%   r&   r,   é   r-   z6test_PowerBasis_element__conversions.<locals>.<lambda>c                      s
   ˆ   ˆ¡S r(   )Úelement_from_alg_numr%   )r:   Údeltar%   r&   r,   ö   r-   c                      s   ˆ   ¡ S r(   )Ú
to_alg_numr%   )Úepsr%   r&   r,   ÿ   r-   )r   Zcyclotomic_fieldr   r~   rV   r    rW   Zto_ANPr   r   r‚   r€   ÚextZminpolyr   )ÚkÚLrw   rM   Úalphar;   r%   )r:   r   r�   rƒ   r&   Ú$test_PowerBasis_element__conversionsÙ   s,    






rˆ   c                  C   sD   t tdtƒƒ} t| ƒ}|jdt dt¡ dd�}t|ƒdks@t	‚d S )Nr5   r   r   r   rt   zCSubmodule[[2, 0, 0, 0], [0, 2, 0, 0], [0, 0, 2, 0], [0, 0, 0, 2]]/3)
r   r   r   r   r6   r	   r7   r   ri   r    rF   r%   r%   r&   Útest_Submodule_repr  s    r‰   c                  C   sv   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}|jdt dt¡ dd�}| ¡ }|j	dkrn||  krl|ksrn t
‚d S )Nr5   r   r   rY   r   rt   r   )r   r   r   r   r6   r	   r7   r   ÚreducedrW   r    ©r8   r9   r:   r;   r<   r%   r%   r&   Útest_Submodule_reduced	  s    rŒ   c                  C   s²   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}| ¡  | 	d¡}|j
|j
ksNt‚| ¡ r^| ¡ rbt‚|j|jd d …dd …f ks‚t‚| ¡ ddgddgdœdddgidœks®t‚d S )Nr5   r   r   éþÿÿÿr   )r   r   r   )r   r   r   r   r6   r	   r7   r   Zcompute_mult_tabZdiscard_beforeÚparentr    r   r_   r.   ©r8   r9   r:   r;   r%   r%   r&   Útest_Submodule_discard_before  s    
 r�   c                  C   sZ   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}|jdt dt¡ dd�}|j|jksVt	‚d S ©Nr5   r   r   rY   r   rt   )
r   r   r   r   r6   r	   r7   r   Z	QQ_matrixr    r�   r%   r%   r&   Útest_Submodule_QQ_matrix  s
    r’   c               	      sd  t tdtƒƒ} t| ƒ‰ ˆ  dt dt¡ ¡‰ˆ dt dt¡ ¡}ˆ tddddgƒƒ}ˆ tdddd	gƒƒ}ˆ td
dddgƒƒ‰ˆ 	|¡}| 
¡ d
dddgks t‚| 	|¡}| 
¡ d
dddgksÂt‚ˆ  td
dddgdd
ddgddd
dggdtƒ ¡ ¡‰t tdtƒƒ}t|ƒ}|td
dddddgƒƒ‰tt‡ ‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ d S )Nr5   r   r   r   rY   é   é   é   ra   r   rU   r   ©r   r   c                      s   ˆ  ˆ dƒ¡S )Nr   r/   r%   )r9   ÚYr%   r&   r,   ?  r-   z*test_Submodule_represent.<locals>.<lambda>c                      s
   ˆ   ˆ¡S r(   r/   r%   )r:   Úa2r%   r&   r,   @  r-   c                      s
   ˆ   ˆ¡S r(   r/   r%   )r:   Úz0r%   r&   r,   A  r-   )r   r   r   r   r6   r	   r7   r   r   r0   r"   r    r>   r   r   )r8   r;   Za0Za1Úb1Zc0ÚUÚZr%   )r9   r:   r—   r˜   r™   r&   Útest_Submodule_represent&  s2    




ý ü
r�   c                  C   s’   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}| dt dt¡ ¡}| dt dt¡ ¡}| |¡dksjt	‚| |¡dks|t	‚| |¡dksŽt	‚d S )Nr5   r   r   r   TF)
r   r   r   r   r6   r	   r7   r   Zis_compat_submoduler    r‹   r%   r%   r&   Ú"test_Submodule_is_compat_submoduleD  s    rž   c                  C   sV   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}|jdt dt¡ dd�}||ksRt‚d S r‘   )	r   r   r   r   r6   r	   r7   r   r    r�   r%   r%   r&   Útest_Submodule_eqO  s
    rŸ   c                     sþ   t tdtƒƒ} t| ƒ}|jtddddgddddggdtƒ ¡ dd�‰ |jtddddgddddggdtƒ ¡ d	d�}|jtd
dddgdd
ddgddddggdtƒ ¡ dd�}ˆ | |ksºt‚t tdtƒƒ}t|ƒ}| 	|dƒ|dƒg¡‰t
t‡ ‡fdd„ƒ d S )Nr5   r   r   ©r   r   rY   rt   é
   rU   é   é   é   r–   r}   r   c                      s   ˆ ˆ S r(   r%   r%   ©r:   r—   r%   r&   r,   l  r-   z$test_Submodule_add.<locals>.<lambda>)r   r   r   r   r6   r	   r   r>   r    r[   r   Ú	TypeError)r8   r9   r;   r<   r›   rœ   r%   r¥   r&   Útest_Submodule_addW  sF    

þ ýý

þ ýý


ý üür§   c               	   C   s¦  t tdtƒƒ} t| ƒ}|jtddddgddddggdtƒ ¡ dd�}|jtddddgddd	dggdtƒ ¡ d
d�}|jtddddgddddggdtƒ ¡ dd�}|jtddddgddddgddddgddddggdtƒ ¡ dd�}|jtddddgddddgddddggdtƒ ¡ dd�}|d |k�s,t‚|d |k�s>t‚|d |k�sPt‚||dƒ |k�sft‚|j	|dd�|k�s~t‚|| |k�s�t‚|d |k�s¢t‚d S )Nr5   r   r¡   rU   r    r¢   rt   r£   r¤   r   éd   éF   iÏÿÿÿ©r   r   éá   i$  i:  i;  r–   r   F)Zhnfr   )
r   r   r   r   r6   r	   r   r>   r    Úmul)r8   r9   r;   ZC1ZC2ZC3_unredZC3r%   r%   r&   Útest_Submodule_mulo  sr    

þ ýý

þ ýý

þ ýý



ü ûû


ý üür­   c               
      s‚  t tdtƒƒ} t| ƒ}| ¡ }|tddddgƒdd�‰|jt dt	¡d	d�‰ |td
dddgƒdd�}ˆ  
ˆ¡}||kszt‚|jt dt	¡dd�‰ |tddddgƒdd�}ˆ  
ˆ¡}||ks¾t‚|jt dt	¡dd�‰ |tddddgƒdd�}ˆ  
ˆ¡}||k�st‚|tdd	ddgƒƒ‰tt‡ ‡fdd„ƒ | tdddd	gddddgddddgddddggdt	ƒ ¡ ¡‰ tt‡ ‡fdd„ƒ d S )Nr5   éZ   éT   éP   éK   éx   rt   r   r   r}   r•   r£   r¢   r   ra   é	   r   r   c                      s
   ˆ   ˆ¡S r(   ©Úreduce_elementr%   )r;   rw   r%   r&   r,   ¨  r-   z/test_Submodule_reduce_element.<locals>.<lambda>rU   rY   é   r“   rª   c                      s
   ˆ   ˆ¡S r(   r´   r%   )r;   rv   r%   r&   r,   °  r-   )r   r   r   r   re   r   r6   r	   r7   r   rµ   r    r   r3   r>   r   )r8   r9   r:   Zb_bar_expectedZb_barr%   )r;   rw   rv   r&   Útest_Submodule_reduce_element’  s8    






ü û
r·   c                  C   sš   t dddgdddgdddggtƒ} t dddgdddgdddggtƒ}t dddgdddgdddggtƒ}t| ƒdksvt‚t|ƒdks†t‚t|ƒdks–t‚d S )Nr   r   r   r   r�   TF)r
   r   r   r    )r+   ZM1ZM2r%   r%   r&   Útest_is_HNF³  s0    ýüýüýür¸   c                  C   sp   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}tddddgƒ}t	||ƒ}t	||ƒ}t
|tƒs^t‚t
|tƒrlt‚d S )Nr5   r   r   r   r   )r   r   r   r   r6   r	   r7   r   r   r   Ú
isinstancer   r    )r8   r9   r:   r?   ÚeAÚeBr%   r%   r&   Útest_make_mod_eltÈ  s    

r¼   c                  C   sB   t tdtƒƒ} t| ƒ}|tddddgƒdd�}t|ƒdks>t‚d S )Nr5   r   r   r   r   rt   z[1, 2, 3, 4]/2)r   r   r   r   r   ri   r    ©r8   r9   rM   r%   r%   r&   Útest_ModuleElement_reprÓ  s    r¾   c                  C   sP   t tdtƒƒ} t| ƒ}|tddddgƒdd�}| ¡ }|jdkrH||ksLt‚d S )Nr5   r   r   rY   ra   rt   r   )r   r   r   r   r   rŠ   rW   r    ©r8   r9   rM   rc   r%   r%   r&   Útest_ModuleElement_reducedÚ  s
    rÀ   c                  C   sN   t tdtƒƒ} t| ƒ}|tddddgƒƒ}| d¡}|jddd	d
gksJt‚d S )Nr5   r£   é(   é<   r°   rU   rB   r�   éýÿÿÿr   )r   r   r   r   r   Zreduced_mod_prV   r    r¿   r%   r%   r&   Ú test_ModuleElement_reduced_mod_pâ  s
    
rÄ   c                  C   s<   t tdtƒƒ} t| ƒ}ddddg}t ||¡j|ks8t‚d S )Nr5   r   r   r   r   )r   r   r   r   r   Zfrom_int_listrV   r    )r8   r9   r#   r%   r%   r&   Ú test_ModuleElement_from_int_listê  s    rÅ   c                  C   s2   t tdtƒƒ} t| ƒ}|dƒ}t|ƒdks.t‚d S )Nr5   r   r   )r   r   r   r   Úlenr    r½   r%   r%   r&   Útest_ModuleElement_lenñ  s    rÇ   c                  C   s^   t tdtƒƒ} t| ƒ}|dƒ}| ¡ }||jkr:||jk	s>t‚|jtdƒd�}|jj	sZt‚d S )Nr5   r   ©r   )
r   r   r   r   r^   r?   r    r   r   Zis_FF)r8   r9   rM   Zcol1Zcol2r%   r%   r&   Útest_ModuleElement_columnø  s    rÉ   c                  C   sZ   t tdtƒƒ} t| ƒ}|tddddgƒdd�}|tdddd	gƒdd�}|j|jksVt‚d S )
Nr5   r   r   r   r   rt   rY   r³   r“   )r   r   r   r   r   ZQQ_colr    r¿   r%   r%   r&   Útest_ModuleElement_QQ_col  s
    rÊ   c            	         sø   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}| dt dt¡ ¡}| dt dt¡ ¡}|dƒ}| ¡ }| 	|¡}| 
¡ }|j|kr–|jddddgksšt‚|j|kr¶|jddddgksºt‚|j|krÖ|jddddgksÚt‚|dƒ‰ tt‡ fdd	„ƒ d S )
Nr5   r   r   r   r   r¢   r}   c                      s   ˆ   ¡ S r(   )rb   r%   ©rw   r%   r&   r,     r-   z1test_ModuleElement_to_ancestors.<locals>.<lambda>)r   r   r   r   r6   r	   r7   r   rb   Zto_ancestorZover_power_basisrJ   rV   r    r   rD   )	r8   r9   r:   r;   r<   ZeDÚeCr»   rº   r%   rË   r&   Útest_ModuleElement_to_ancestors
  s    
   rÍ   c                     sN  t tdtƒƒ} t| ƒ}| dt dt¡ ¡}| dt dt¡ ¡‰ | dt dt¡ ¡}ˆ dƒ ˆ dƒ¡dksrt	‚ˆ dƒ |dƒ¡dksŒt	‚ˆ dƒ 
|dƒ¡\}}|j|kr¶|j|ksºt	‚ˆ ˆ  |¡ƒˆ dƒkræ|| |¡ƒ|dƒksêt	‚ˆ dƒ 
ˆ dƒ¡\}}|ˆ dƒk�r|ˆ dƒk�s t	‚t td	tƒƒ}t|ƒ‰tt‡ ‡fd
d„ƒ d S )Nr5   r   r   r   r   r   TFrU   c                      s   ˆ dƒ  ˆdƒ¡S )Nr   r   )Úunifyr%   ©r;   rœ   r%   r&   r,   -  r-   z2test_ModuleElement_compatibility.<locals>.<lambda>)r   r   r   r   r6   r	   r7   r   Z	is_compatr    rÎ   rJ   r0   r   r   )r8   r9   r:   r<   rn   ro   r›   r%   rÏ   r&   Ú test_ModuleElement_compatibility  s    0 rÐ   c                  C   sˆ   t tdtƒƒ} t| ƒ}|tddddgƒdd�}|tdddd	gƒdd�}||ksRt‚t td
tƒƒ}t|ƒ}||dƒksxt‚|dks„t‚d S )Nr5   r   r   r   r   rt   rY   r³   r“   rU   r   ç…ëQ¸	@©r   r   r   r   r   r    )r8   r9   rM   rc   r›   rœ   r%   r%   r&   Útest_ModuleElement_eq0  s    rÓ   c                     s  t tdtƒƒ} t| ƒ}|tddddgƒdd�‰|tdddd	gƒdd�}ˆ |¡sTt‚| dt 	dt
¡ ¡}|tddddgƒdd�}|tdddd	gƒdd�}| |¡s¨t‚|tdd
d
d
gƒdd� tddƒ¡sÐt‚t tdtƒƒ}t|ƒ‰ tt‡ ‡fdd„ƒ ˆ d¡dk�st‚d S )Nr5   r   r   r   r   rt   rY   r³   r“   r   rU   r¢   c                      s   ˆ  ˆ dƒ¡S ©Nr   )Úequivr%   ©rœ   rM   r%   r&   r,   L  r-   z*test_ModuleElement_equiv.<locals>.<lambda>rÑ   F)r   r   r   r   r   rÕ   r    r6   r	   r7   r   r   r   r   )r8   r9   rc   r;   ry   rz   r›   r%   rÖ   r&   Útest_ModuleElement_equiv=  s    (r×   c                     sx  t tdtƒƒ} t| ƒ}| dt dt¡ ¡}|tddddgƒdd�‰|tdddd	gƒd
d�}|tddddgƒdd�}ˆ| |td
dddgƒdd�ks˜t	‚ˆ| |tddddgƒdd�ks¼t	‚ˆ| |td
dddgƒdd�ksàt	‚ˆt
dd
ƒ |tdd
ddgƒdd�k�st	‚|t
dd
ƒ |tddddgƒd
d�k�s8t	‚t tdtƒƒ}t|ƒ‰ tt‡ ‡fdd„ƒ tt‡fdd„ƒ d S )Nr5   r   r   r   r   rY   rt   rU   ra   r¡   r¤   r”   rT   r¢   éûÿÿÿéüÿÿÿrÃ   r�   r¶   r“   é   é   r£   r}   c                      s   ˆˆ dƒ S rÔ   r%   r%   rÖ   r%   r&   r,   `  r-   z(test_ModuleElement_add.<locals>.<lambda>c                      s   ˆ d S ©NrÑ   r%   r%   ©rM   r%   r&   r,   a  r-   )r   r   r   r   r6   r	   r7   r   r   r    r   r   r¦   )r8   r9   r;   rc   ry   r›   r%   rÖ   r&   Útest_ModuleElement_addQ  s    $$$,,rÞ   c                     sÞ  t tdtƒƒ} t| ƒ}| dt dt¡ ¡}|tddddgƒdd�‰|tddddgƒdd�}|tddddgƒdd�}|tddddgƒdd�}ˆ| |td	d	d	d	gƒd
d�ks°t	‚ˆ| |tddddgƒƒksÐt	‚ˆ| |tddddgƒdd�ksôt	‚ˆt
ddƒ |tddddgƒdd�k�s t	‚|t
ddƒ  |tddddgƒdd�¡�sNt	‚ˆt
ddƒ |tddddgƒdd�k�szt	‚t tdtƒƒ}t|ƒ‰ tt‡ ‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ d S )Nr5   r   r   r   r   rt   rU   r   iòÿÿÿr¢   rB   r�   é   rY   r¡   r³   c                      s   ˆˆ dƒ S rÔ   r%   r%   rÖ   r%   r&   r,   u  r-   z(test_ModuleElement_mul.<locals>.<lambda>c                      s   ˆ d S rÜ   r%   r%   rÝ   r%   r&   r,   v  r-   c                      s   ˆ d S rÜ   r%   r%   rÝ   r%   r&   r,   w  r-   c                      s   ˆ d S rÔ   r%   r%   rÝ   r%   r&   r,   x  r-   )r   r   r   r   r6   r	   r7   r   r   r    r   rÕ   r   r¦   ÚZeroDivisionError)r8   r9   r;   rc   ry   rz   r›   r%   rÖ   r&   Útest_ModuleElement_muld  s&    $ $,.,rá   c                  C   sÂ   t tdtƒƒ} t| ƒ}| dt dt¡ ¡}|tddddgƒdd�}|tddddgƒdd�}|tddddgƒƒ}|| d	|dƒ d
 ksŒt	‚|| d|dƒ d ks¨t	‚d| |dƒ ks¾t	‚d S )Nr5   r   r   r   r   rt   rU   r   r¡   rß   r�   r³   ©
r   r   r   r   r6   r	   r7   r   r   r    )r8   r9   r;   rM   rc   ry   r%   r%   r&   Útest_ModuleElement_div{  s    rã   c                  C   s
  t tdtƒƒ} t| ƒ}| dt dt¡ ¡}|tddddgƒdd�}|tddddgƒdd�}|d |tddddgƒd	d�ks€t	‚|d |tddddgƒdd�ks¤t	‚|d |tddddgƒƒksÄt	‚|d |tddddgƒƒksät	‚|d |ksôt	‚|d |k�st	‚d S )
Nr5   r   r   r   r   rt   r   ra   é   râ   )r8   r9   r;   rM   ry   r%   r%   r&   Útest_ModuleElement_pow‡  s    $$  rå   c                     s  t tdtƒƒ} t| ƒ}|tddddgƒdd�‰ˆd |tddddgƒdd�ksRt‚ˆtddƒ | ¡ kslt‚ˆtdd	ƒ |tddddgƒd
d�ks–t‚| |dƒd|dƒ d	|dƒ |d	ƒg¡}ˆ| |tddddgƒdd�ksät‚| 	¡ ‰ t
t‡ ‡fdd„ƒ d S )Nr5   r   r¢   ra   r   r   rt   rU   r   rY   c                      s   ˆˆ  S r(   r%   r%   ©r;   rM   r%   r&   r,   ¡  r-   z(test_ModuleElement_mod.<locals>.<lambda>)r   r   r   r   r   r    r   rP   r[   re   r   r¦   rF   r%   ræ   r&   Útest_ModuleElement_mod•  s    $**$rç   c                  C   sž   t tdtƒƒ} t| ƒ}|tddddgƒdd�}|jtd�t dtd  dt  d td	�ks^t‚|j	td�t d
td  t
ddƒt  t
ddƒ t
d	�ksšt‚d S )Nr5   r   r¢   ra   r   r   rt   ©r   rÈ   r   )r   r   r   r   r   Ú	numeratorr   r   r    Zpolyr   r½   r%   r%   r&   Útest_PowerBasisElement_polys¤  s
    0rê   c                  C   s>   t tdtƒƒ} t| ƒ}|tddddgƒƒ}| ¡ dks:t‚d S )Nr5   r   rB   r   )r   r   r   r   r   Znormr    )r8   r9   Zlamr%   r%   r&   Útest_PowerBasisElement_norm¬  s    rë   c                  C   s\   t tdtƒƒ} t| ƒ}|tddddgƒƒ}d| d|dƒ ksBt‚|d |dƒ ksXt‚d S )Nr5   r   r   r�   rÃ   r   rÒ   r½   r%   r%   r&   Útest_PowerBasisElement_inverse³  s
    rì   c               	   C   sl   t tdtƒƒ} t| ƒ}t|dd„ ƒ}| ¡ }|tddddgddddgddddgddddggdtƒksht‚d S )Nr5   c                 S   s   | d S )Nr   r%   rË   r%   r%   r&   r,   ¾  r-   z0test_ModuleHomomorphism_matrix.<locals>.<lambda>r   r   rB   rª   )	r   r   r   r   r   r_   r	   r   r    )r8   r9   Úphir+   r%   r%   r&   Útest_ModuleHomomorphism_matrix»  s    



ü ûrî   c                  C   s>   t tdtƒƒ} t| ƒ}t|dd„ ƒ}| ¡ }|jdks:t‚d S )Nr5   c                 S   s   | d S rk   r%   rË   r%   r%   r&   r,   Ë  r-   z0test_ModuleHomomorphism_kernel.<locals>.<lambda>r   )r   r   r   r   r   Zkernelr)   r    )r8   r9   rí   ÚNr%   r%   r&   Útest_ModuleHomomorphism_kernelÈ  s
    rð   c                     sÌ   t tdtƒƒ} t| ƒ}| ¡ ‰ ˆ  |dƒ¡}ˆ  |¡}| ¡ tddddddddddddddddggdt	ƒkspt
‚| t dt	¡¡}| ¡ }| |dƒ¡}| |¡}|tg dt	ƒks¶t
‚tt‡ fdd	„ƒ d S )
Nr5   r   r   rB   )r   é   )r   r   )r   r   c                      s
   ˆ   d¡S rÜ   r/   r%   ©ÚRr%   r&   r,   à  r-   z1test_EndomorphismRing_represent.<locals>.<lambda>)r   r   r   r   Zendomorphism_ringZinner_endomorphismr0   r>   r	   r   r    r6   Zzerosr   r3   )r8   r9   rí   r?   r:   ÚSÚpsir%   rò   r&   Útest_EndomorphismRing_representÐ  s"    
"ÿ þ

rö   c                     s¤   t tdtƒƒ} t| ƒ}g }t|dƒtt|d�}|t | td�ksBt‚t|ƒdksRt‚t|dƒttd�}|t | td�ksxt‚| dt	 
dt¡ ¡‰ tt‡ fdd	„ƒ d S )
Nr5   r   )r   ÚpowersrÈ   rè   r   r   c                      s   t ˆ dƒtƒS )Nr   )r   r   r%   rC   r%   r&   r,   ð  r-   z$test_find_min_poly.<locals>.<lambda>)r   r   r   r   r   r   r    rÆ   r6   r	   r7   r   r   r   )r8   r9   r÷   r$   r%   rC   r&   Útest_find_min_polyã  s    rø   N)WZ	sympy.abcr   r   Zsympy.polysr   r   Zsympy.polys.domainsr   r   r   Zsympy.polys.matricesr	   r
   Z#sympy.polys.numberfields.exceptionsr   r   r   Z sympy.polys.numberfields.modulesr   r   r   r   r   r   r   r   r   Z"sympy.polys.numberfields.utilitiesr   Zsympy.polys.polyerrorsr   Zsympy.testing.pytestr   r'   r4   r=   rA   rE   rG   rO   rQ   rS   rX   r`   rd   rh   rj   rl   rs   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&   Ú<module>   s|   ,	



)	#!
