o
    h4                     @   s   d 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 ddlmZmZ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& Z#d'S )(zTest modules.py code.    )
FreeModuleModuleOrderFreeModulePolyRing)CoercionFailedQQlexgrlexilexZZ)xyz)raises)Rationalc                     s  t td} | dttd g t tdt ttt ttd g}t |ks3J |d  d ks=J |d  d ksGJ |d  d ksQJ tt fdd | tddg} | | td ttd gkstJ || | td ttd gksJ   | dt td  gksJ  | | dt ttd gksJ  |ksJ | tttgt tt g dksJ t jtd	d
}|dtg|t dgksJ d S )N         r   c                      s    d S )Nr    r   er   W/var/www/vscode/kcb/lib/python3.10/site-packages/sympy/polys/agca/tests/test_modules.py<lambda>       z(test_FreeModuleElement.<locals>.<lambda>r   r   r   r	   order)r   old_poly_ringr   free_moduleconvertlistr   
IndexError)MfgRr   r   r   test_FreeModuleElement
   s"   2$$"$,*r&   c                     sf  t ttd  t ttdksJ  t ttdks J  t ttdks,J t tjtddd} tdg v s>J tg vsEJ dtg vsMJ dtd  dg vsYJ  ttd d g}ttt}|||d d gksxJ |ttd d gksJ d| dt dtd  d gksJ |d dt dtd  d gksJ |d td td d d gksJ t| td td t gksJ |t td td t gksJ || td td t gksJ || td td t gksJ tdg| v sJ tg| vsJ dtg| vsJ dtd  dg| v s!J | ttd d g}tjtddt}|||d d gksCJ |ttd d gksPJ d| dt dtd  d gkscJ |d dt dtd  d gksvJ |d td td d d gksJ t| td td t gksJ |t td td t gksJ |dt  tdt  td d dt  gksJ || td td t gksJ || td td t gksJ t tttd|ttd d gksJ dr
J  rJ tt	dd  tt	d	d  tt
 fd
d tt
fdd d S )Nr   r   r	   r   r   r   c                   S   s   t tdS Nr   )r
   r   r   r   r   r   r   r   r   P   s    z!test_FreeModule.<locals>.<lambda>c                   S   s
   t tdS r'   )r   r
   r   r   r   r   r   Q      
 c                      s      ttd g dS )Nr   r   r   r   )r   r   r   r   r   r   )M1r   r   r   R   s    
c                      
     dS Nr   )r   r   )M3r   r   r   T   r(   )r   r   r   r   r   r   is_submoduleis_zeror   NotImplementedErrorr   )M2r   Xr   )r*   r-   r   test_FreeModule    sX   $$$    &&&""2""&r3   c                  C   st   t ttd} t ttd}| t ttdksJ | t ttdkdu s"J | |ks(J | ddks0J |ddks8J d S )NFr)   )r   )   r   r   )r   r5   )r   r   r   r	   )o1o2r   r   r   test_ModuleOrderW   s   r8   c                     sn  t ttd} | g dg dg d}| td td  ddgttdg | |ks0J || ks6J |  ks<J  | ksBJ | ksHJ  |ksNJ || j|   ksYJ | s_J   reJ | rkJ   rqJ |  syJ  	td td  t dt dgsJ  	td td  t dt dgrJ  	td dtt  t gsJ | dt ddg| g dkrJ | g dg d
| g d	| ksJ  drJ | td td  ddg} |}|j| u sJ |j u sJ tt fd
d tt fdd tt fdd | tttg| jtttgddks5J d S )Nr   r   r   r   r   r   r   r)   r   r   r   r   r   r   r   r   r   c                           g dS Nr9   	submoduler   r"   r   r   r          z/test_SubModulePolyRing_global.<locals>.<lambda>c                      r+   r,   )unionr   rA   r   r   r      r(   c                      s     dtgS r,   )rC   r   r@   r   r   r"   r%   r   r   r      s    r	   r   )r   r   r   r   r   r@   basisis_full_moduler/   containsrC   r.   r   moduler   
ValueError	TypeError)FFdmnr   rD   r   test_SubModulePolyRing_globalc   s<   
$(("&,
.rO   c               	      s  t jtttd} | d}|dt ddgdt ddt  dgg d}|td td  ddgttdg ||ks<J ||ksBJ | ksHJ  |ksNJ | ksTJ  |ksZJ ||j|  kseJ | skJ   rqJ |	 rwJ  	 r}J | 	 sJ  
td td  t dt dgsJ  
td td  t dt dgrJ  
td dtt  t gsJ |dt ddg|g dksJ |g dg d|dddtt  g|ksJ tt fd	d
 d S )Nr   r   r   r   r   r)   r9   r;   c                      r=   r>   r?   r   rA   r   r   r      rB   z.test_SubModulePolyRing_local.<locals>.<lambda>)r   r   r   r   r	   r   r@   rE   rF   r/   rG   rC   r   rI   )r%   rK   rL   r   rA   r   test_SubModulePolyRing_local   s4   
.$(("&rP   c                     sf  t ttt} | d  fdd}|ttgtsJ |ttgtt s&J |ttgdr/J |ttgtr8J |td t td t gtt sKJ |tt t tt tt  tt  tt t gtd riJ |tt t tt tt  tt  tt t gtd sJ |tt t tt tt  tt  tt t gtd sJ |tt t tt tt  tt  tt t gttd  rJ |tt t tt tt  tt  tt t gtd td  dt t t  sJ |tt t tt tt  tt  tt t gtt t sJ |tdt t ddt  gds#J |td td  td td  td td  td t td t  td t  gtd sSJ |td td  td td  td td  td t td t  td t  gtd td  rJ |tdt t  tdt  gtrJ |tdt t  tdt  gtt rJ d S )	Nr   c                        j dd | D  |gS )Nc                 S      g | ]}|gqS r   r   .0r$   r   r   r   
<listcomp>       zKtest_SubModulePolyRing_nontriv_global.<locals>.contains.<locals>.<listcomp>r@   rG   Ir#   rK   r   r   rG         z7test_SubModulePolyRing_nontriv_global.<locals>.containsr   r      r4      )r   r   r   r   r   r   r%   rG   r   rZ   r   %test_SubModulePolyRing_nontriv_global   s2   
&<<<@TB&N
N
(0r_   c                     s*  t jttttd} | d  fdd}|ttgtsJ |ttgtt s(J |ttgdr1J |ttgtr:J |td t td t gtt sMJ |tt t tt tt  tt  tt t gtd rkJ |tdt t  tdt  gts~J |tdt t  tdt  gtt sJ d S )Nr   r   c                    rQ   )Nc                 S   rR   r   r   rS   r   r   r   rU      rV   zJtest_SubModulePolyRing_nontriv_local.<locals>.contains.<locals>.<listcomp>rW   rX   rZ   r   r   rG      r[   z6test_SubModulePolyRing_nontriv_local.<locals>.containsr   )r   r   r   r   r   r	   r   r^   r   rZ   r   $test_SubModulePolyRing_nontriv_local   s   
&<&.r`   c            	      C   sT  t ttt} | dtt gtt gtt g}| ddtt gtt dg}| |ks3J |tt t gf }| dtddgdtdgddtg}| |ksXJ | d}|j|   | kslJ t ttttt t g }|dtt gtt gtt g}|dtddgdtdgddtg}| |ksJ d S )Nr   r   r   )	r   r   r   r   r   r   r@   syzygy_modulerE   )	r%   r"   Sr1   S2rK   R2r-   S3r   r   r   test_syzygy   s   &"&
&&rf   c                     s*  t jtdd} | ddt dgddg  ttg| tdd| td gks.J tt	 fdd | dtdgddgf   dtg}|ddg| d	td  gks^J t tt
td t
d  g } | d  tdgdt
g}|td td g| t| t
gksJ d S )
Nr	   r   r   r   r   r\   c                      s     ddgS )Nr   r   )in_terms_of_generatorsr   rA   r   r   r      rB   z-test_in_terms_of_generators.<locals>.<lambda>)r   r   r   r   r@   rg   r   r   r   rI   r   )r%   SMr   rA   r   test_in_terms_of_generators   s&   &
rj   c                     s  t t} | d}|dttd g}|| td ddg}td td t td td  gdks:J |td ddg|   krf|td ddg|   krf|td ddgksiJ  J td d dt d td g|dtdg   kr|dtdg   kr||dtdg ksJ  J td d dtd g|dtdg   kr|dtdg   kr||dtdg ksJ  J g dtd ddg|   krtd ddg|   kr|td ddg| ksJ  J td td  dt d dgdt |   krJ| dt |   krJ|dt    krJ|| dt  ksMJ  J | td  ddgks[J ttdg| }g d|t   kr{|| t ks~J  J |ddt dtd  fd	g | d  dtgg |dttd gg d
| }tt fdd ttfdd ttfdd dttd gdtdgksJ |g dg dksJ d S )Nr   r   r   r   )r   r   r   r\   rh   )r   r   r   r<   r9   c                      s      dtgS r,   r   r   r   )Gr"   r   r   r         z,test_QuotientModuleElement.<locals>.<lambda>c                      s      dtgS r,   rk   r   )r"   r-   r   r   r     rm   c                      s      dttgS r,   rk   r   )r"   r1   r   r   r     s    r   r   r   )r   r   r   r   r@   r   r   r   )r%   rK   Nr   r#   M4r   )rl   r"   r1   r-   r   test_QuotientModuleElement   sV   

086.,
6


8
*&rq   c                     s|  t td  dttd g   ksJ ks$J  dttd fg ks2J  r8J      sBJ  dttd gg d } | dttd gks_J | g dksjJ | kspJ | swJ |  r}J t	t
 fdd t	t
 fdd t	t
 fd	d t	t fd
d  g dg }|g dg d}||ksJ d S )Nr   r   r   rn   )r   r   r   c                      s     S Nr   r   rK   ro   r   r   r   5  r   z%test_QuotientModule.<locals>.<lambda>c                      s     g d S )Nrn   r?   r   rs   r   r   r   6  rV   c                      s    d  S r'   )r   r   )rK   r%   r   r   r   7  rB   c                      s      dttd gS )Nr   r   rk   r   )rK   r"   r   r   r   8  s    r   r9   r;   )r   r   r   r   r@   r/   rE   r.   rF   r   rI   r   )SQr*   r1   r   )rK   r"   ro   r%   r   test_QuotientModule"  s,   

ru   c                  C   s  t jttdtfdtffdtd d g } | d}|| dks#J |t tdks/J || dks8J tdg|v s@J tg|vsGJ d| td  dg|v sVJ dddt  g|v sbJ ddt g|vslJ |td tgdtgks{J | d}|td ddgg d	g d
}|td td  ddgttdg}||ksJ ||ksJ ||ksJ ||ksJ ||ksJ ||ksJ ||j|  ksJ | sJ | rJ |	 rJ |	 rJ | 	 sJ |
td td  t td  t dgs	J |
td td  t dt dgrJ |
td dtt  t gs0J |tddg|g dksBJ |tddg|g dkrTJ |g dg d|g d|kskJ |drsJ d S )Nr   r	   r   r   r   r   r   r   r:   r)   r9   r;   r<   )r   r   r   r   r   r   r@   rE   rF   r/   rG   rC   r.   )r%   r*   rK   rL   r"   r   r   r   test_ModulesQuotientRing?  sB   *

 $0*$$$.rv   c                  C   s   t t} | d}|tdgdtg}|td dgdtd g}| t}|| ||   krD|  krDt|   krD|t ksGJ  J || |  krVt| ksYJ  J d S )Nr   r   )r   r   r   r   r@   ideal)r%   r"   S1rc   rY   r   r   r   test_module_mulj  s   


@(ry   c            	      C   s:  t ttd} | ttgtdg}| dtd gtdgttg}| ttgtd t td gtt t td g}|j|dd\}}}|||  krS|ksVJ  J t|jD ],\}}|t	dd t
|| |jD   krt	dd t
|| |jD ksJ  J q[| ttg| ttg sJ d S )	Nr   r   r   T	relationsc                 s       | ]	\}}|| V  qd S rr   r   rT   cr   r   r   r   	<genexpr>~      z$test_intersection.<locals>.<genexpr>c                 s   r|   rr   r   )rT   dr   r   r   r   r     r   )r   r   r   r   r   r@   	intersect	enumerategenssumzipr/   )	rK   r*   r1   rY   I1rel1rel2ir$   r   r   r   test_intersectionu  s   2"&*r   c                  C   sV  t ttt} | d}|tt tt gtt tt g|ttgttgt ttttd td  tt td   ksCJ |ttg| 	 sSJ |td td gtd td g}|tt tt g}|j|dd\}}|| td tt ksJ t
|jD ]\}}||jd  tdd t|| |jD ksJ qd S )Nr   Trz   r   c                 s   r|   rr   r   r}   r   r   r   r     r   z test_quotient.<locals>.<genexpr>)r   r   r   r   r   r   r@   module_quotientrw   is_whole_ringr   r   r   r   )r%   rK   r"   ro   qrelr   r$   r   r   r   test_quotient  s   
$. $2r   c                  C   s   t tttdtd tdgtt ttd g} | jdd\}}t|D ]\}}|t	dd t
|| | jD ks=J q&d S )Nr   r   r   T)extendedc                 s   r|   rr   r   )rT   r~   genr   r   r   r     r   z*test_groebner_extendend.<locals>.<genexpr>)r   r   r   r   r   r   r@   _groebner_vecr   r   r   r   )r"   rl   r%   r   r$   r   r   r   test_groebner_extendend  s
   4(r   N)$__doc__sympy.polys.agca.modulesr   r   r   sympy.polysr   r   r   r   r	   r
   	sympy.abcr   r   r   sympy.testing.pytestr   sympy.core.numbersr   r&   r3   r8   rO   rP   r_   r`   rf   rj   rq   ru   rv   ry   r   r   r   r   r   r   r   <module>   s,     7(#+