o
    GZhY                     @   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   s>   g d} t | }|jjsJ |jdksJ | | ksJ d S )N            )r   r   )r   domainZis_ZZshapeflat)cm r%   Z/var/www/auris/lib/python3.10/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>   s    z,test_Module_NotImplemented.<locals>.<lambda>c                            S r(   )mult_tabr%   r*   r%   r&   r,          c                      s
     d S r(   	representr%   r*   r%   r&   r,         
 c                      r-   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,      s    )r   r   NotImplementedErrorr%   r%   r*   r&   test_Module_NotImplemented   s   r6   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s9J |jdd|||gksFJ |	 |ksNJ |
||ksWJ t }|	 d u sbJ d S )N   r   r   r   T)Zinclude_self)r   r   r   r   submodule_from_matrixr	   eyer   Z	ancestorsZ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g d}| }||du sJ ||du s'J |ddu s0J |tdt	d d df du sCJ |tdt
d d df du sVJ |tdt	d d df du siJ d S )	Nr7   r   TFr   r   r   r   )r   r   r   r   r   	transposeZis_compat_colr	   r9   r   r   )r:   r;   colrowr%   r%   r&   test_Module_compat_col0   s   &&*rC   c                     s   t tdt} t|   dj g dksJ  dj g dks%J tdtd d df } |j|ks:J t	t
 fdd	 d S )
Nr7   r   r   r   r   r   r   r   r   r   r   r   r   c                      s    dS )Nr%   r%   r<   r%   r&   r,   D   r/   z"test_Module_call.<locals>.<lambda>)r   r   r   r   rA   r"   r	   r9   r   r   
ValueError)r:   rA   r%   rG   r&   test_Module_call=   s   rI   c                  C   sP   t tdt} t| }|dtdt }| du sJ | du s&J d S )Nr7   r   r   TF)	r   r   r   r   r8   r	   r9   r   r3   r:   r;   r<   r%   r%   r&   test_Module_starts_with_unityG   s
   rK   c            	      C   s   t tdt} t| }|dtdt }| }|	 }t
t||D ]5\}\}}dgd }|j|ks7J |j|ks>J d||< ||t|ksLJ d||< ||t|ksZJ q%d S )Nr7   r   r   r   r   )r   r   r   r   r8   r	   r9   r   Zbasis_elementsZbasis_element_pullbacks	enumeratezipmoduler   )	r:   r;   r<   Zbasisbpiepr#   r%   r%   r&   test_Module_basis_elementsO   s   
rS   c                  C   s   t tdt} t| }|dtdt }| j	
 g dks#J | j|ks,J | j	
 g dks9J | j|ksBJ d S )Nr7   r   r   r   r   r   r   )r   r   r   r   r8   r	   r9   r   zerorA   r"   rN   rJ   r%   r%   r&   test_Module_zero_      rV   c                  C   s   t tdt} t| }|dtdt }| j	
 g dks#J | j|ks,J | j	
 g dks9J | j|ksBJ d S )Nr7   r   r   rD   )r   r   r   r   r8   r	   r9   r   onerA   r"   rN   rJ   r%   r%   r&   test_Module_onei   rW   rY   c                  C   s   t tdt} t| }|dtdt }|t	dd}|t	dd}|j
g dks/J |jdks6J |j|ks=J |j
g dksFJ |jdksMJ |j|ksTJ d S )Nr7   r   r         )rZ   r   r   r   )r   r   r   r   r8   r	   r9   r   r4   r   coeffsdenomrN   )r:   r;   r<   ZrAZrBr%   r%   r&   !test_Module_element_from_rationals   s   r^   c                     s   t tdt} t|  d d d d d d d d g} ||d  |d  }j|ks:J tt	 fdd tt	 fdd d S )	Nr7   r   r   r      c                      s
     g S r(   submodule_from_gensr%   r;   r%   r&   r,      r2   z1test_Module_submodule_from_gens.<locals>.<lambda>c                      s     d d dgS )Nr   r   r`   r%   r;   r<   r%   r&   r,      s    )
r   r   r   r   ra   columnZhstackmatrixr   rH   )r:   Zgensr+   r%   rc   r&   test_Module_submodule_from_gens   s   ,
rf   c                     s   t tdt} t|   dtdt }|tg d}|	 }|j
 g dks-J tt fdd tt fdd d S )	Nr7   r   r   r   r   r   r_      c                      s     tdtS )Nr   )r8   r	   r9   r   r%   rb   r%   r&   r,          z3test_Module_submodule_from_matrix.<locals>.<lambda>c                      s     dtdt S )Nr   r7   )r8   r	   r9   r   r%   rb   r%   r&   r,      s    )r   r   r   r   r8   r	   r9   r   r   	to_parentrA   r"   r   rH   )r:   r<   rQ   fr%   rb   r&   !test_Module_submodule_from_matrix   s   rl   c            	      C   s   t tdt} t| }| }|tg d}| }|j g dks&J |d|d|d|df\}}}}|| |ks@J |d |ksHJ d S )Nr7   r   r   r   r   r   )	r   r   r   r   whole_submoduler   rj   rA   r"   )	r:   r;   r<   rQ   rk   Ze0e1e2Ze3r%   r%   r&   test_Module_whole_submodule   s   $rp   c                  C   s*   t tdt} t| }t|dksJ d S )Nr7   z&PowerBasis(x**4 + x**3 + x**2 + x + 1))r   r   r   r   repr)r:   r;   r%   r%   r&   test_PowerBasis_repr   s   rr   c                  C   s.   t tdt} t| }t| }||ksJ d S Nr7   )r   r   r   r   rJ   r%   r%   r&   test_PowerBasis_eq   s   rt   c                     s   t tdt} t| }|  g dg dg dg ddg dg dg ddg dg dd	d
g did} |ks>J t fdd D sKJ d S )Nr7   rD   rE   r   r   r   r   r   r   r   r   )r   r   r   r   rF   rF   rF   rF   )r   r   r   )r   r   r   c                 3   s8    | ]} | D ]} | | D ]}t |V  qqqd S r(   r   ).0uvr#   r*   r%   r&   	<genexpr>   s   6 z+test_PowerBasis_mult_tab.<locals>.<genexpr>)r   r   r   r   r.   all)r:   r;   expr%   r*   r&   test_PowerBasis_mult_tab   s   
r~   c                     s`   t tdt} t|  tg d} |} ||ksJ  |ddtt fdd d S )Nr7   r   r   r]   c                      
     S r(   r0   r%   r;   br%   r&   r,      r2   z+test_PowerBasis_represent.<locals>.<lambda>)r   r   r   r   r   r1   r   r   )r:   rA   ar%   r   r&   test_PowerBasis_represent   s   r   c                  C   s   t tdt} t| }t ddt  }t td }t dt}||jg dks*J ||jg dks6J ||jg dksBJ d S )	Nr7   r   r   r   r   )r   r   r   r   rw   rT   )r   r   r   r   Zelement_from_polyr\   )r:   r;   rk   ghr%   r%   r&   !test_PowerBasis_element_from_poly   s   
r   c                     sP  t d} t d}t|  | t ddt ddddg} |}|jg dks*J |jdks1J | |ks9J |t ddt ddddgtt fdd	 | 	|} 
|jg dksdJ jdkskJ 	 |kssJ |	tt fd
d	 t| jj}|
|jg dksJ jdksJ ttfdd	 d S )Nr7   r[   r   r   r   )*      r   r   r_   c                      r   r(   )element_from_ANPr%   )r<   dr%   r&   r,      r2   z6test_PowerBasis_element__conversions.<locals>.<lambda>c                      r   r(   )element_from_alg_numr%   )r<   deltar%   r&   r,      r2   c                      r-   r(   )
to_alg_numr%   )epsr%   r&   r,      r/   )r   Zcyclotomic_fieldr   r   r\   r]   Zto_ANPr   r   r   r   extZminpolyr   )kLr   rQ   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 J d S )Nr7   r   r   r   r   zCSubmodule[[2, 0, 0, 0], [0, 2, 0, 0], [0, 0, 2, 0], [0, 0, 0, 2]]/3)	r   r   r   r   r8   r	   r9   r   rq   rJ   r%   r%   r&   test_Submodule_repr  s   r   c                  C   sx   t tdt} t| }|dtdt }|jdtdt dd}| }|j	dkr8||  kr7|ks:J  J d S )Nr7   r   r   r_   r   r   r   )
r   r   r   r   r8   r	   r9   r   reducedr]   r:   r;   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s'J | r/| r1J |j|jd d dd f ksAJ | ddgddgddddgidksWJ d S )Nr7   r   r   r   )r   r   r   )r   r   r   r   r8   r	   r9   r   Zcompute_mult_tabZdiscard_beforeparentr   re   r.   r:   r;   r<   r=   r%   r%   r&   test_Submodule_discard_before  s   
 0r   c                  C   sZ   t tdt} t| }|dtdt }|jdtdt dd}|j|jks+J d S Nr7   r   r   r_   r   r   )	r   r   r   r   r8   r	   r9   r   Z	QQ_matrixr   r%   r%   r&   test_Submodule_QQ_matrix  s
   r   c                     s<  t tdt} t|   dtdt dtdt } tg d} tg d} tg d	|}|
 g dksHJ |	|}|
 g dksWJ  tg d	g d
g dgdt t tdt}t|}|tg dtt fdd ttfdd ttfdd d S )Nr7   r   r   r   )r_            rg   )r   r   r7   r[   r   rD   rE   ru   r   r   r[   )r   r   r   r   r7   r_   c                           dS )Nr   r0   r%   )r;   Yr%   r&   r,   ?      z*test_Submodule_represent.<locals>.<lambda>c                      r   r(   r0   r%   )r<   a2r%   r&   r,   @  r2   c                      r   r(   r0   r%   )r<   z0r%   r&   r,   A  r2   )r   r   r   r   r8   r	   r9   r   r   r1   r"   r@   r   r   )r:   r=   Za0Za1b1Zc0UZr%   )r;   r<   r   r   r   r&   test_Submodule_represent&  s4   

r   c                  C   s   t tdt} t| }|dtdt }|dtdt }|dtdt }||du s5J ||du s>J ||du sGJ d S )Nr7   r   r   r   TF)	r   r   r   r   r8   r	   r9   r   Zis_compat_submoduler   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s)J d S r   )r   r   r   r   r8   r	   r9   r   r   r%   r%   r&   test_Submodule_eqO  s
   r   c                     s   t tdt} t| }|jtg dg dgdt dd |jtg dg dgdt d	d}|jtg d
g dg dgdt dd} | |ksOJ t tdt}t|}||d|dgt	t
 fdd d S )Nr7   )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   c                      s     S r(   r%   r%   r<   r   r%   r&   r,   l  r/   z$test_Submodule_add.<locals>.<lambda>)r   r   r   r   r8   r	   r   r@   ra   r   	TypeError)r:   r;   r=   r>   r   r   r%   r   r&   test_Submodule_addW  s@   r   c                  C   sd  t tdt} t| }|jtg dg dgdt dd}|jtg dg dgdt d	d}|jtg d
g dgdt dd}|jtg dg dg dg dgdt dd}|jtg dg dg dgdt dd}|d |ks{J |d |ksJ |d |ksJ ||d |ksJ |j|dd|ksJ || |ksJ |d |ksJ d S )Nr7   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r[   )r   r   d   r   )r   r   r   F   )r   r   r   r   r      )$  r   r   r   ):  r   r   r   );  r   r[   r[   r   r   r   F)Zhnfr   )	r   r   r   r   r8   r	   r   r@   mul)r:   r;   r=   ZC1ZC2ZC3_unredZC3r%   r%   r&   test_Submodule_mulo  sh   r   c                     s\  t tdt} t| }| }|tg ddd|jtdt	dd |tg ddd} 
}||ks9J |jtdt	dd |tg ddd} 
}||ksYJ |jtdt	d	d |tg d
dd} 
}||ksyJ |tg dtt fdd |tg dg dg dg dgdt	  tt fdd d S )Nr7   )Z   T   P   K   x   r   r   r   )r   r   r   r   )r   r   r   r   rh   )r   	   r7   r   r   c                      r   r(   reduce_elementr%   )r=   r   r%   r&   r,     r2   z/test_Submodule_reduce_element.<locals>.<lambda>)r7   r   r   r   )r   rh   r[   r_   )r   r      r   rv   r   c                      r   r(   r   r%   )r=   r   r%   r&   r,     r2   )r   r   r   r   rm   r   r8   r	   r9   r   r   r   r5   r@   r   )r:   r;   r<   Zb_bar_expectedZb_barr%   )r=   r   r   r&   test_Submodule_reduce_element  s:   


r   c                  C   s   t g dg dg dgt} t g dg dg dgt}t g dg dg dgt}t| du s2J t|du s:J t|du sBJ d S )N)r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   TF)r
   r   r   )r+   ZM1ZM2r%   r%   r&   test_is_HNF  s0   r   c                  C   sl   t tdt} t| }|dtdt }tg d}t	||}t	||}t
|ts-J t
|tr4J d S )Nr7   r   r   r   )r   r   r   r   r8   r	   r9   r   r   r   
isinstancer   )r:   r;   r<   rA   eAeBr%   r%   r&   test_make_mod_elt  s   

r   c                  C   s>   t tdt} t| }|tg ddd}t|dksJ d S )Nr7   r   r   r   z[1, 2, 3, 4]/2)r   r   r   r   r   rq   r:   r;   rQ   r%   r%   r&   test_ModuleElement_repr  s   r   c                  C   sL   t tdt} t| }|tg ddd}| }|jdkr"||ks$J d S )Nr7   rg   r   r   r   )r   r   r   r   r   r   r]   r:   r;   rQ   rk   r%   r%   r&   test_ModuleElement_reduced  s
   r   c                  C   sF   t tdt} t| }|tg d}|d}|jg dks!J d S )Nr7   )r   (   <   r   r[   )rF   r   r   )r   r   r   r   r   Zreduced_mod_pr\   r   r%   r%   r&    test_ModuleElement_reduced_mod_p  s
   
r   c                  C   s8   t tdt} t| }g d}t||j|ksJ d S )Nr7   r   )r   r   r   r   r   Zfrom_int_listr\   )r:   r;   r#   r%   r%   r&    test_ModuleElement_from_int_list  s   r   c                  C   s2   t tdt} t| }|d}t|dksJ d S )Nr7   r   r   )r   r   r   r   lenr   r%   r%   r&   test_ModuleElement_len  s   r   c                  C   s^   t tdt} t| }|d}| }||jkr||jusJ |jtdd}|jjs-J d S )Nr7   r   r    )	r   r   r   r   rd   rA   r   r    Zis_FF)r:   r;   rQ   Zcol1Zcol2r%   r%   r&   test_ModuleElement_column  s   r   c                  C   sR   t tdt} t| }|tg ddd}|tg ddd}|j|jks'J d S )Nr7   r   r   r   r   r_   r   r   r   )r   r   r   r   r   ZQQ_colr   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|u rI|jg dksKJ |j|u rW|jg dksYJ |j|u re|jg dksgJ |d tt fd	d
 d S )Nr7   r   r   r   r   r7   r   r   r   )r   r   r   r   )r   r   r   r   c                      r-   r(   )rj   r%   r   r%   r&   r,     r/   z1test_ModuleElement_to_ancestors.<locals>.<lambda>)r   r   r   r   r8   r	   r9   r   rj   Zto_ancestorZover_power_basisrN   r\   r   rH   )	r:   r;   r<   r=   r>   ZeDeCr   r   r%   r   r&   test_ModuleElement_to_ancestors
  s   
r   c                     sJ  t tdt} t| }|dtdt }|dtdt  |dtdt } d ddu s9J  d|ddu sFJ  d	|d\}}|j
|u r[|j
|u s]J   | dkrs||||dksuJ  d	 d\}}| dkr| dksJ t td	t}t|tt fd
d d S )Nr7   r   r   r   r   r   TFr[   c                      s    d dS )Nr   r   )unifyr%   r=   r   r%   r&   r,   -  ri   z2test_ModuleElement_compatibility.<locals>.<lambda>)r   r   r   r   r8   r	   r9   r   Z	is_compatr   rN   r1   r   r   )r:   r;   r<   r>   ry   rz   r   r%   r   r&    test_ModuleElement_compatibility  s   0r   c                  C   s   t tdt} t| }|tg ddd}|tg ddd}||ks%J t tdt}t|}||dks8J |d	ks>J d S )
Nr7   r   r   r   r   r   r[   r   Q	@r   r   r   r   r   )r:   r;   rQ   rk   r   r   r%   r%   r&   test_ModuleElement_eq0  s   r   c                     s   t tdt} t| }|tg ddd|tg ddd}|s&J |dtdt	 }|tg ddd}|tg ddd}||sLJ |tg dd	dt
d
d	s^J t td	t}t| tt fdd ddu s|J d S )Nr7   r   r   r   r   r   r   r   r[   r   c                      r   Nr   )equivr%   r   rQ   r%   r&   r,   L  r   z*test_ModuleElement_equiv.<locals>.<lambda>r   F)r   r   r   r   r   r   r8   r	   r9   r   r   r   r   )r:   r;   rk   r=   r   r   r   r%   r   r&   test_ModuleElement_equiv=  s   $r   c                     sT  t tdt} t| }|dtdt }|tg ddd|tg ddd}|tg d	d
d}| |tg dddksDJ | |tg dddksTJ | |tg dddksdJ t	dd |tg dddkswJ |t	dd |tg dddksJ t tdt}t| t
t fdd t
tfdd d S )Nr7   r   r   r   r_   r   )r7   r_   r[   rh   r   r   r   r   r   r   )r   r   r   rZ   r   )r   r   )r   r   r      r[   )   r   r   r   r   )rZ   r   r   r   c                      s    d S r   r%   r%   r   r%   r&   r,   `      z(test_ModuleElement_add.<locals>.<lambda>c                      s    d S Nr   r%   r%   rQ   r%   r&   r,   a  r/   )r   r   r   r   r8   r	   r9   r   r   r   r   r   )r:   r;   r=   rk   r   r   r%   r   r&   test_ModuleElement_addQ  s      &&r   c                     s  t tdt} t| }|dtdt }|tg ddd|tg ddd}|tg ddd}|tg d	d
d}| |tg dddksNJ | |tg dks\J | |tg dddkslJ t	dd |tg dddksJ |t	dd 
|tg dd
dsJ t	dd |tg dddksJ 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 )Nr7   r   r   r   r   r   r   r   r   rv   r   )r   r   r   r   r[   )r   r   r   r   rw   )r   r   r   r      r_   r   r   )r   r   r   r7   )r   r7   r   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                          d S r   r%   r%   r   r%   r&   r,   w  r/   c                      r   r   r%   r%   r   r%   r&   r,   x  r/   )r   r   r   r   r8   r	   r9   r   r   r   r   r   r   ZeroDivisionError)r:   r;   r=   rk   r   r   r   r%   r   r&   test_ModuleElement_muld  s&     &(&r   c                  C   s   t tdt} t| }|dtdt }|tg ddd}|tg ddd}|tg d}|| d|d d	 ks@J || d
|d d ksNJ d| |d ksYJ d S )Nr7   r   r   r   r   r   r   r   r   r   r   r   r   	r   r   r   r   r8   r	   r9   r   r   )r:   r;   r=   rQ   rk   r   r%   r%   r&   test_ModuleElement_div{  s   r  c                  C   s   t tdt} t| }|dtdt }|tg ddd}|tg ddd}|d |tg dd	dks:J |d |tg d
ddksJJ |d |tg dksXJ |d |tg dksfJ |d |ksnJ |d |ksvJ d S )Nr7   r   r   r   r   rv   r   )r   r   r   rh      )r   r   r   r   r   rD   r   r  )r:   r;   r=   rQ   r   r%   r%   r&   test_ModuleElement_pow  s     r  c                     s   t tdt} t| }|tg dddd |tg dddks%J tdd | ks2J tdd |tg d	d
dksEJ ||dd|d d|d |dg}| |tg dddksjJ |  t	t
 fdd d S )Nr7   r   r   rh   r   r   r   r[   )r   r   rh   r   r   r   )r   r   r   r   r_   r   )r   r7   r   r   c                      s     S r(   r%   r%   r=   rQ   r%   r&   r,     r/   z(test_ModuleElement_mod.<locals>.<lambda>)r   r   r   r   r   r   rU   ra   rm   r   r   rJ   r%   r  r&   test_ModuleElement_mod  s    &* r  c                  C   s   t tdt} t| }|tg ddd}|jtdt dtd  dt  d td	ks-J |jtdt d
td  t	ddt  t	dd t	d	ksKJ d S )Nr7   r  r   r   r   rh   r   r   r   r   )
r   r   r   r   r   	numeratorr   r   Zpolyr   r   r%   r%   r&   test_PowerBasisElement_polys  s
   0@r
  c                  C   s:   t tdt} t| }|tg d}| dksJ d S )Nr7   )r   rF   r   r   )r   r   r   r   r   Znorm)r:   r;   Zlamr%   r%   r&   test_PowerBasisElement_norm  s   r  c                  C   sX   t tdt} t| }|tg d}d| d|d ksJ |d |d ks*J d S )Nr7   r   r   r   r   r   r   r   r   r%   r%   r&   test_PowerBasisElement_inverse  s
   r  c                  C   s\   t tdt} t| }t|dd }| }|tg dg dg dg dgdtks,J d S )	Nr7   c                 S      | d S )Nr   r%   r   r%   r%   r&   r,     r/   z0test_ModuleHomomorphism_matrix.<locals>.<lambda>)r   r   rF   r   )r   r   rF   r   )r   r   rF   r   )r   r   rF   r   r   )r   r   r   r   r   re   r	   r   )r:   r;   phir+   r%   r%   r&   test_ModuleHomomorphism_matrix  s   r  c                  C   s>   t tdt} t| }t|dd }| }|jdksJ d S )Nr7   c                 S   r  rs   r%   r   r%   r%   r&   r,     r/   z0test_ModuleHomomorphism_kernel.<locals>.<lambda>r   )r   r   r   r   r   Zkernelr)   )r:   r;   r  Nr%   r%   r&   test_ModuleHomomorphism_kernel  s
   r  c                     s   t tdt} t| }|   |d} |}| tg dgdt	ks*J |
tdt	}| }||d}||}|tg dt	ksMJ tt fdd d S )	Nr7   r   )r   r   r   r   r   r   r   r   r   r   r   r   rF   rF   rF   rF   )r      )r   r   )r   r   c                      s
     dS r   r0   r%   Rr%   r&   r,     r2   z1test_EndomorphismRing_represent.<locals>.<lambda>)r   r   r   r   Zendomorphism_ringZinner_endomorphismr1   r@   r	   r   r8   Zzerosr   r5   )r:   r;   r  rA   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s!J t|dks)J t|dttd}|t | tdks<J |dt	dt
  tt fdd	 d S )
Nr7   r   )r   powersr   r  r   r   c                      s   t  dtS )Nr   )r   r   r%   rG   r%   r&   r,     r   z$test_find_min_poly.<locals>.<lambda>)r   r   r   r   r   r   r   r8   r	   r9   r   r   r   )r:   r;   r  r$   r%   rG   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'   r6   r?   rC   rI   rK   rS   rV   rY   r^   rf   rl   rp   rr   rt   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&   <module>   s~    ,	



)	#!
