o
    gY                     @   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   domainis_ZZshapeflat)cm r&   b/var/www/visachat/venv/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-      r0   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   r7   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)include_self)r   r   r   r   submodule_from_matrixr	   eyer   	ancestorspower_basis_ancestornearest_common_ancestorr   )TABCDr,   r&   r&   r'   test_Module_ancestors"   s   rD   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 )	Nr8   r   TFr   r   r   r   )r   r   r   r   r   	transposeis_compat_colr	   r;   r   r   )r?   r@   colrowr&   r&   r'   test_Module_compat_col0   s   &&*rI   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 )
Nr8   r   r   r   r   r   r   r   r   r   r   r   r   c                      s    dS )Nr&   r&   rA   r&   r'   r-   D   r0   z"test_Module_call.<locals>.<lambda>)r   r   r   r   rG   r#   r	   r;   r   r   
ValueError)r?   rG   r&   rM   r'   test_Module_call=   s   rO   c                  C   sP   t tdt} t| }|dtdt }| du sJ | du s&J d S )Nr8   r   r   TF)	r   r   r   r   r:   r	   r;   r   r4   r?   r@   rA   r&   r&   r'   test_Module_starts_with_unityG   s
   rQ   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 )Nr8   r   r   r   r   )r   r   r   r   r:   r	   r;   r   basis_elementsbasis_element_pullbacks	enumeratezipmoduler   )	r?   r@   rA   basisbpiepr$   r&   r&   r'   test_Module_basis_elementsO   s   
r\   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 )Nr8   r   r   r   r   r   r   )r   r   r   r   r:   r	   r;   r   zerorG   r#   rV   rP   r&   r&   r'   test_Module_zero_      r_   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 )Nr8   r   r   rJ   )r   r   r   r   r:   r	   r;   r   onerG   r#   rV   rP   r&   r&   r'   test_Module_onei   r`   rb   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 )Nr8   r   r         )rc   r   r   r   )r   r   r   r   r:   r	   r;   r   r5   r   coeffsdenomrV   )r?   r@   rA   rArBr&   r&   r'   !test_Module_element_from_rationals   s   ri   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 )	Nr8   r   r   r      c                      s
     g S r)   submodule_from_gensr&   r@   r&   r'   r-      r3   z1test_Module_submodule_from_gens.<locals>.<lambda>c                      s     d d dgS )Nr   r   rk   r&   r@   rA   r&   r'   r-      s    )
r   r   r   r   rl   columnhstackmatrixr   rN   )r?   gensr,   r&   rn   r'   test_Module_submodule_from_gens   s   ,
rs   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 )	Nr8   r   r   r   r   r   rj      c                      s     tdtS )Nr   )r:   r	   r;   r   r&   rm   r&   r'   r-          z3test_Module_submodule_from_matrix.<locals>.<lambda>c                      s     dtdt S )Nr   r8   )r:   r	   r;   r   r&   rm   r&   r'   r-      s    )r   r   r   r   r:   r	   r;   r   r   	to_parentrG   r#   r   rN   )r?   rA   rZ   fr&   rm   r'   !test_Module_submodule_from_matrix   s   ry   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 )Nr8   r   r   r   r   r   )	r   r   r   r   whole_submoduler   rw   rG   r#   )	r?   r@   rA   rZ   rx   e0e1e2e3r&   r&   r'   test_Module_whole_submodule   s   $r   c                  C   s*   t tdt} t| }t|dksJ d S )Nr8   z&PowerBasis(x**4 + x**3 + x**2 + x + 1))r   r   r   r   repr)r?   r@   r&   r&   r'   test_PowerBasis_repr   s   r   c                  C   s.   t tdt} t| }t| }||ksJ d S Nr8   )r   r   r   r   rP   r&   r&   r'   test_PowerBasis_eq   s   r   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 )Nr8   rJ   rK   r   r   r   r   r   r   r   r   )r   r   r   r   rL   rL   rL   rL   )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 )Nr8   r   r   rf   c                      
     S r)   r1   r&   r@   br&   r'   r-      r3   z+test_PowerBasis_represent.<locals>.<lambda>)r   r   r   r   r   r2   r   r   )r?   rG   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 )	Nr8   r   r   r   r   )r   r   r   r   r   r]   )r   r   r   r   element_from_polyre   )r?   r@   rx   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 )Nr8   rd   r   r   r   )*      r   r   rj   c                      r   r)   )element_from_ANPr&   )rA   dr&   r'   r-      r3   z6test_PowerBasis_element__conversions.<locals>.<lambda>c                      r   r)   )element_from_alg_numr&   )rA   deltar&   r'   r-      r3   c                      r.   r)   )
to_alg_numr&   )epsr&   r'   r-      r0   )r   cyclotomic_fieldr   r   re   rf   to_ANPr   r   r   r   extminpolyr   )kLr   rZ   alpharB   r&   )rA   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 )Nr8   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   r:   r	   r;   r   r   rP   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 )Nr8   r   r   rj   r   r   r   )
r   r   r   r   r:   r	   r;   r   reducedrf   r?   r@   rA   rB   rC   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 )Nr8   r   r   r   )r   r   r   )r   r   r   r   r:   r	   r;   r   compute_mult_tabdiscard_beforeparentr   rq   r/   r?   r@   rA   rB   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 Nr8   r   r   rj   r   r   )	r   r   r   r   r:   r	   r;   r   	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 )Nr8   r   r   r   )rj            rt   )r   r   r8   rd   r   rJ   rK   r   r   r   rd   )r   r   r   r   r8   rj   c                           dS )Nr   r1   r&   )r@   Yr&   r'   r-   ?      z*test_Submodule_represent.<locals>.<lambda>c                      r   r)   r1   r&   )rA   a2r&   r'   r-   @  r3   c                      r   r)   r1   r&   )rA   z0r&   r'   r-   A  r3   )r   r   r   r   r:   r	   r;   r   r   r2   r#   rE   r   r   )r?   rB   a0a1b1c0UZr&   )r@   rA   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 )Nr8   r   r   r   TF)	r   r   r   r   r:   r	   r;   r   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   r:   r	   r;   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 )Nr8   )r   r   r   r   r   r   r   r   r   r   rj   r   r   
   r   r   r   r   rd   r      )   r   r   r   r   r   r   r   r   r      r   r   r   rd   r   r   c                      s     S r)   r&   r&   rA   r   r&   r'   r-   l  r0   z$test_Submodule_add.<locals>.<lambda>)r   r   r   r   r:   r	   r   rE   rl   r   	TypeError)r?   r@   rB   rC   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 )Nr8   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   rd   )r   r   d   r   )r   r   r   F   )r   r   r   r   r      )$  r   r   r   ):  r   r   r   );  r   rd   rd   r   r   r   F)hnfr   )	r   r   r   r   r:   r	   r   rE   mul)r?   r@   rB   C1C2C3_unred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 )Nr8   )Z   T   P   K   x   r   r   r   )r   r   r   r   )r   r   r   r   ru   )r   	   r8   r   r   c                      r   r)   reduce_elementr&   )rB   r   r&   r'   r-     r3   z/test_Submodule_reduce_element.<locals>.<lambda>)r8   r   r   r   )r   ru   rd   rj   )r   r      r   r   r   c                      r   r)   r   r&   )rB   r   r&   r'   r-     r3   )r   r   r   r   rz   r   r:   r	   r;   r   r   r   r6   rE   r   )r?   r@   rA   b_bar_expectedb_barr&   )rB   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,   M1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 )Nr8   r   r   r   )r   r   r   r   r:   r	   r;   r   r   r   
isinstancer   )r?   r@   rA   rG   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 )Nr8   r   r   r   z[1, 2, 3, 4]/2)r   r   r   r   r   r   r?   r@   rZ   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 )Nr8   rt   r   r   r   )r   r   r   r   r   r   rf   r?   r@   rZ   rx   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 )Nr8   )r   (   <   r   rd   )rL   r   r   )r   r   r   r   r   reduced_mod_pre   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 )Nr8   r   )r   r   r   r   r   from_int_listre   )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 )Nr8   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 )Nr8   r   r    )	r   r   r   r   ro   rG   r   r    is_FF)r?   r@   rZ   col1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 )Nr8   r   r   r   r   rj   r   r   r   )r   r   r   r   r   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 )Nr8   r   r   r   r   r8   r   r   r   )r   r   r   r   )r   r   r   r   c                      r.   r)   )rw   r&   r   r&   r'   r-     r0   z1test_ModuleElement_to_ancestors.<locals>.<lambda>)r   r   r   r   r:   r	   r;   r   rw   to_ancestorover_power_basisrV   re   r   rN   )	r?   r@   rA   rB   rC   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 )Nr8   r   r   r   r   r   TFrd   c                      s    d dS )Nr   r   )unifyr&   rB   r   r&   r'   r-   -  rv   z2test_ModuleElement_compatibility.<locals>.<lambda>)r   r   r   r   r:   r	   r;   r   	is_compatr  rV   r2   r   r   )r?   r@   rA   rC   r   r   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 )
Nr8   r   r   r   r
  r   rd   r   Q	@r   r   r   r   r   )r?   r@   rZ   rx   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 )Nr8   r   r   r   r
  r   r   r  rd   r   c                      r   Nr   )equivr&   r   rZ   r&   r'   r-   L  r   z*test_ModuleElement_equiv.<locals>.<lambda>r  F)r   r   r   r   r   r  r:   r	   r;   r   r   r   r   )r?   r@   rx   rB   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 )Nr8   r   r   r   rj   r   )r8   rj   rd   ru   r   r   r   r   r   r   )r   r   r   rc   r   )r   r   )r   r   r      rd   )   r   r   r   r   )rc   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&   rZ   r&   r'   r-   a  r0   )r   r   r   r   r:   r	   r;   r   r   r   r   r   )r?   r@   rB   rx   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 )Nr8   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   rd   )r)  r)  r)  r   r   )r   r   r   r      rj   r   r   )r   r   r   r8   )r   r8   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  r0   c                          d S r%  r&   r&   r&  r&   r'   r-   w  r0   c                      r+  r  r&   r&   r&  r&   r'   r-   x  r0   )r   r   r   r   r:   r	   r;   r   r   r   r  r   r   ZeroDivisionError)r?   r@   rB   rx   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 )Nr8   r   r   r(  r   r   r  r   r*  r   r   r   r   	r   r   r   r   r:   r	   r;   r   r   )r?   r@   rB   rZ   rx   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 )Nr8   r   r   r(  r   r   r   )r   r   r   ru      )r   r   r   r   r   rJ   r   r.  )r?   r@   rB   rZ   r   r&   r&   r'   test_ModuleElement_pow  s     r1  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 )Nr8   r   r   ru   r   r   r   rd   )r   r   ru   r   r   r   )r   r   r   r   rj   r   )r   r8   r   r   c                      s     S r)   r&   r&   rB   rZ   r&   r'   r-     r0   z(test_ModuleElement_mod.<locals>.<lambda>)r   r   r   r   r   r   r^   rl   rz   r   r   rP   r&   r3  r'   test_ModuleElement_mod  s    &* r4  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 )Nr8   r2  r   r   r   ru   r   r   r  r   )
r   r   r   r   r   	numeratorr   r   polyr   r   r&   r&   r'   test_PowerBasisElement_polys  s
   0@r8  c                  C   s:   t tdt} t| }|tg d}| dksJ d S )Nr8   )r   rL   r   r   )r   r   r   r   r   norm)r?   r@   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 )Nr8   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 )	Nr8   c                 S      | d S )Nr   r&   r  r&   r&   r'   r-     r0   z0test_ModuleHomomorphism_matrix.<locals>.<lambda>)r   r   rL   r   )r   r   rL   r   )r   r   rL   r   )r   r   rL   r   r   )r   r   r   r   r   rq   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 )Nr8   c                 S   r=  r   r&   r  r&   r&   r'   r-     r0   z0test_ModuleHomomorphism_kernel.<locals>.<lambda>r   )r   r   r   r   r   kernelr*   )r?   r@   r>  Nr&   r&   r'   test_ModuleHomomorphism_kernel  s
   rB  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 )	Nr8   r   )r   r   r   r   r   r   r   r   r   r   r   r   rL   rL   rL   rL   )r      )r   r   )r   r   c                      s
     dS r%  r1   r&   Rr&   r'   r-     r3   z1test_EndomorphismRing_represent.<locals>.<lambda>)r   r   r   r   endomorphism_ringinner_endomorphismr2   rE   r	   r   r:   zerosr   r6   )r?   r@   r>  rG   rA   Spsir&   rD  r'   test_EndomorphismRing_represent  s    


rK  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 )
Nr8   r   )r   powersr  r5  r   r   c                      s   t  dtS )Nr   )r   r   r&   rM   r&   r'   r-     r   z$test_find_min_poly.<locals>.<lambda>)r   r   r   r   r   r   r  r:   r	   r;   r   r   r   )r?   r@   rL  r%   r&   rM   r'   test_find_min_poly  s   rM  N)W	sympy.abcr   r   sympy.polysr   r   sympy.polys.domainsr   r   r   sympy.polys.matricesr	   r
   #sympy.polys.numberfields.exceptionsr   r   r    sympy.polys.numberfields.modulesr   r   r   r   r   r   r   r   r   "sympy.polys.numberfields.utilitiesr   sympy.polys.polyerrorsr   sympy.testing.pytestr   r(   r7   rD   rI   rO   rQ   r\   r_   rb   ri   rs   ry   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/  r1  r4  r8  r;  r<  r?  rB  rK  rM  r&   r&   r&   r'   <module>   s~    ,	



)	#!
