U
    	Ç-eð4  ã                   @   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sft‚|d ˆ d kszt‚|d ˆ d ksŽt‚|d ˆ d ks¢t‚tt‡ fdd„ƒ |  tddg¡}ˆ | |  td ttd g¡ksèt‚|| |  td ttd g¡kst‚ˆ  |  dt td  g¡ks2t‚ˆ | |  dt ttd g¡ksXt‚ˆ |ksft‚|  tttg¡t  t¡ t¡ dddgks–t‚t jtdd	}| d¡ tg¡| t¡ dgksÌt‚d S )
Né   é   é   r   c                      s   ˆ d S )Nr   © r   ©Úer   úd/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sympy/polys/agca/tests/test_modules.pyÚ<lambda>   ó    z(test_FreeModuleElement.<locals>.<lambda>éÿÿÿÿr	   ©Úorder)	r   Úold_poly_ringr   Úfree_moduleÚconvertÚlistÚAssertionErrorr   Ú
IndexError)ÚMÚfÚgÚRr   r   r   Útest_FreeModuleElement
   s"    2$&$&0r&   c                     sv  t t t¡dƒ‰ ˆ t t t¡dƒks(t‚ˆ t t t¡dƒks@t‚ˆ t t t¡dƒksXt‚t tjtdddƒ} tdgˆ ks|t‚tgˆ ksŠt‚dtgˆ ksšt‚dtd  dgˆ ks²t‚ˆ  ttd d g¡}t t¡ t¡}|||d d gksðt‚|ttd d gks
t‚d| dt dtd  d gks0t‚|d dt dtd  d gksVt‚|d td td d d gks|t‚t| td td t gksžt‚|t td td t gksÀt‚|| td td t gksât‚|| td td t gkst‚tdg| kst‚tg| ks&t‚dtg| ks8t‚dtd  dg| ksRt‚|  ttd d g¡}tjtdd t¡}|||d d gks–t‚|ttd d gks°t‚d| dt dtd  d gksÖt‚|d dt dtd  d gksüt‚|d td td d d gks"t‚t| td td t gksDt‚|t td td t gksft‚|dt  tdt  td d dt  gks˜t‚|| td td t gksºt‚|| td td t gksÜt‚t t tt¡dƒ‰ˆ |¡ˆ ttd d g¡kst‚ˆ d¡r$t‚ˆ ¡ r2t‚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   r   z!test_FreeModule.<locals>.<lambda>c                   S   s
   t tdƒS r'   )r   r
   r   r   r   r   r   Q   r   c                      s"   ˆ   t t¡ d¡  dddg¡¡S )Nr   r   r   )r   r   r   r   r   r   )ÚM1r   r   r   R   s   ÿc                      s
   ˆ   d¡S ©Nr   )r   r   )ÚM3r   r   r   T   r   )r   r   r   r   r    r   r   Úis_submoduleÚis_zeror   ÚNotImplementedErrorr   )ÚM2r   ÚXr   )r(   r*   r   Útest_FreeModule    sX    &&&""""&&&""2""&r0   c                  C   st   t ttdƒ} t ttdƒ}| t ttdƒks,t‚| t ttdƒkdksDt‚| |ksPt‚| dƒdks`t‚|dƒdkspt‚d S )NF)r   r   r   )r   )é   ©r   r   )r   r2   )r   r   r   r	   r    )Zo1Úo2r   r   r   Útest_ModuleOrderW   s    r4   c                     sŠ  t  tt¡‰ˆ d¡} |  dddgdddgdddg¡}|  td td  ddgttdg¡‰ | |ksft‚|| ksrt‚| ˆ ks~t‚ˆ | ksŠt‚|ˆ ks–t‚ˆ |ks¢t‚|| j|  ¡ Ž ks¸t‚| ¡ sÄt‚ˆ  ¡ rÐt‚| 	¡ rÜt‚ˆ  	¡ rèt‚| ¡  	¡ søt‚ˆ  
td td  t dt dg¡s"t‚ˆ  
td td  t dt dg¡rLt‚ˆ  
td dtt  t g¡spt‚|  dt ddg¡|  dddg¡kršt‚|  dddgdddg¡ |  dddg¡¡| ksÎt‚ˆ  d¡rÞt‚|  td td  ddg¡}ˆ  |¡}|j| kst‚|jˆ ks$t‚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s†t‚d S )Nr   r   r   r   c                      s   ˆ   dddg¡S ©Nr   r   ©Ú	submoduler   ©r"   r   r   r   „   r   z/test_SubModulePolyRing_global.<locals>.<lambda>c                      s
   ˆ   d¡S r)   )Úunionr   r8   r   r   r   …   r   c                      s   ˆ   ˆ d¡ tg¡¡S r)   )r9   r   r7   r   r   ©r"   r%   r   r   r   †   r   r	   r   )r   r   r   r   r   r7   r    ÚbasisÚis_full_moduler,   Úcontainsr9   r+   r   Úmoduler   Ú
ValueErrorÚ	TypeError)ÚFÚFdÚmÚnr   r:   r   Útest_SubModulePolyRing_globalc   s<    
 $**$*4
rE   c               	      s  t jtttd} |  d¡}| dt ddgdt ddt  dgdddg¡}| td td  ddgttdg¡‰ ||kszt‚||ks†t‚|ˆ ks’t‚ˆ |ksžt‚|ˆ ksªt‚ˆ |ks¶t‚||j| ¡ Ž ksÌt‚| 	¡ sØt‚ˆ  	¡ rät‚| 
¡ rðt‚ˆ  
¡ rüt‚| ¡  
¡ st‚ˆ  td td  t dt dg¡s8t‚ˆ  td td  t dt dg¡rbt‚ˆ  td dtt  t g¡s†t‚| dt ddg¡| dddg¡ks°t‚| dddgdddg¡ | dddtt  g¡¡|ksìt‚tt‡ fdd„ƒ d S )Nr   r   r   r   r   c                      s   ˆ   dddg¡S r5   r6   r   r8   r   r   r   §   r   z.test_SubModulePolyRing_local.<locals>.<lambda>)r   r   r   r   r	   r   r7   r    r;   r<   r,   r=   r9   r   r?   )r%   rA   rB   r   r8   r   Útest_SubModulePolyRing_local‹   s:    
0$**$* ÿÿÿ
rF   c                     sn  t  ttt¡} |  d¡‰ ‡ fdd„}|ttgtƒs6t‚|ttgtt ƒsLt‚|ttgdƒr^t‚|ttgtƒrpt‚|td t td t gtt ƒs–t‚|tt t tt tt  tt  tt t gtd ƒrÒt‚|tt t tt tt  tt  tt t gtd ƒst‚|tt t tt tt  tt  tt t gtd ƒsNt‚|tt t tt tt  tt  tt t gttd  ƒrt‚|tt t tt tt  tt  tt t gtd td  dt t t  ƒsæt‚|tt t tt tt  tt  tt t gtt t ƒs(t‚|tdt t ddt  gdƒsNt‚|td td  td td  td td  td t td t  td t  gtd ƒs®t‚|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  ƒrt‚|tdt t  tdt  gtƒr>t‚|tdt t  tdt  gtt ƒrjt‚d S )	Nr   c                    s   ˆ j dd„ | D ƒŽ  |g¡S )Nc                 S   s   g | ]
}|g‘qS r   r   ©Ú.0r$   r   r   r   Ú
<listcomp>¯   s     zKtest_SubModulePolyRing_nontriv_global.<locals>.contains.<locals>.<listcomp>©r7   r=   ©ÚIr#   ©rA   r   r   r=   ®   s    z7test_SubModulePolyRing_nontriv_global.<locals>.containsr   r   é   r1   é   )r   r   r   r   r   r   r    ©r%   r=   r   rM   r   Ú%test_SubModulePolyRing_nontriv_globalª   s2    
&<>>BVB&Nþ
Nþ
(rQ   c                     s,  t jttttd} |  d¡‰ ‡ fdd„}|ttgtƒs:t‚|ttgtt ƒsPt‚|ttgdƒrbt‚|ttgtƒrtt‚|td t td t gtt ƒsšt‚|tt t tt tt  tt  tt t gtd ƒrÖt‚|tdt t  tdt  gtƒsüt‚|tdt t  tdt  gtt ƒs(t‚d S )Nr   r   c                    s   ˆ j dd„ | D ƒŽ  |g¡S )Nc                 S   s   g | ]
}|g‘qS r   r   rG   r   r   r   rI   Î   s     zJtest_SubModulePolyRing_nontriv_local.<locals>.contains.<locals>.<listcomp>rJ   rK   rM   r   r   r=   Í   s    z6test_SubModulePolyRing_nontriv_local.<locals>.containsr   )r   r   r   r   r   r	   r   r    rP   r   rM   r   Ú$test_SubModulePolyRing_nontriv_localÉ   s    
&<&rR   c            	      C   sV  t  ttt¡} |  d¡ tt gtt gtt g¡}|  d¡ dtt gtt dg¡}| ¡ |ksft‚|tt t gf }|  d¡ tddgdtdgddtg¡}| ¡ |ks°t‚|  d¡}|j| 	¡ Ž  ¡ | ¡ ksØt‚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sRt‚d S )Nr   r   r   )
r   r   r   r   r   r   r7   Zsyzygy_moduler    r;   )	r%   r"   ÚSr.   ÚS2rA   ZR2r*   ZS3r   r   r   Útest_syzygyÚ   s    &"&
&&rU   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\t‚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¼t‚t  tt¡td td  g } |  d¡‰ ˆ  tdgdtg¡}| td td g¡|  t¡|  t¡gks(t‚d S )
Nr	   r   r   r   r   rN   c                      s   ˆ   ddg¡S r5   )Úin_terms_of_generatorsr   r8   r   r   r   ò   r   z-test_in_terms_of_generators.<locals>.<lambda>éþÿÿÿ)r   r   r   r   r7   rV   r   r   r    r   r?   r   )r%   ZSMr   r8   r   Útest_in_terms_of_generatorsí   s&    ÿÿ&
ÿÿrX   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stt‚|td ddg|   krÊ| td ddg¡|   krÊˆ | td ddg¡¡ksÐn t‚ˆ 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sDn t‚ˆ td d dtd g¡|dtdg   krª|ˆ dtdg¡   krª|| dtdg¡ ks°n t‚ˆ dddg¡ˆ td ddg¡|   krtd ddg|   kr| td ddg¡| ksn t‚ˆ td td  dt d dg¡dt |   kr˜|  dt ¡|   kr˜|dt    kr˜||  dt ¡ ksžn t‚| td  ddgksºt‚ttdg| }ˆ dddg¡|t   krú||  t¡ ks n t‚|ddt dtd  fdg ‰|  d¡‰ ˆ dtgg ‰| dttd gdddg¡| }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s¼t‚ˆ | dddg¡¡dddgksât‚d S )Nr   r   r   r   rN   rW   )r   r   r   c                      s   ˆ  ˆ   dtg¡¡S r)   ©r   r   r   )ÚGr"   r   r   r     r   z,test_QuotientModuleElement.<locals>.<lambda>c                      s   ˆ   ˆ  dtg¡¡S r)   rY   r   )r"   r*   r   r   r     r   c                      s   ˆ   ˆ  dttg¡¡S r)   rY   r   )r"   r.   r   r   r     r   )	r   r   r   r   r7   r   r    r   r   )r%   rA   ÚNr   r#   ZM4r   )rZ   r"   r.   r*   r   Útest_QuotientModuleElementÿ   sV    

08ÿ8ÿ
ÿ0ÿ
ÿ.ÿ
ÿ6ÿ

ÿ
ÿ8
 *r\   c                     sˆ  t  t¡‰ˆ d¡‰ ˆ  dttd g¡‰ˆ ˆ ‰ˆˆ ks<t‚ˆˆksHt‚ˆˆ dttd fg ksdt‚ˆ ¡ rpt‚ˆ ˆ  ¡   ¡ s„t‚ˆ  dttd gdddg¡ˆ } | ˆ dttd g¡ksÀt‚| ˆ dddg¡ksØt‚| ˆksät‚ˆ | ¡sòt‚|  	¡ rþt‚t
t‡ ‡fdd„ƒ t
t‡ ‡fdd„ƒ t
t‡ ‡fdd„ƒ t
t‡ ‡fd	d„ƒ ˆ dddgg }| dddgdddg¡}||ks„t‚d S )
Nr   r   r   r   c                      s   ˆˆ  S ©Nr   r   ©rA   r[   r   r   r   5  r   z%test_QuotientModule.<locals>.<lambda>c                      s   ˆ   dddg¡ˆ S ©Nr   r   r6   r   r^   r   r   r   6  r   c                      s   ˆ  d¡ˆ  S r'   )r   r   )rA   r%   r   r   r   7  r   c                      s   ˆ   ˆ  dttd g¡¡S )Nr   r   rY   r   )rA   r"   r   r   r   8  r   )r   r   r   r   r7   r    r,   r;   r+   r<   r   r?   r   )ZSQr(   r.   r   )rA   r"   r[   r%   r   Útest_QuotientModule"  s,    

 r`   c                  C   s  t jttdtfdtffdtd d g } |  d¡}||  d¡ksFt‚|t  t¡ d¡ks^t‚||  d¡kspt‚tdg|ks€t‚tg|ksŽt‚d|  t¡d  dg|ks¬t‚dddt  g|ksÄt‚ddt g|ksØt‚| td tg¡dtgksöt‚|  d¡}| td ddgdddgdddg¡}| td td  ddgttdg¡}||ksVt‚||ksdt‚||ksrt‚||ks€t‚||ksŽt‚||ksœt‚||j| ¡ Ž ks´t‚| 	¡ sÂt‚| 	¡ rÐt‚| 
¡ rÞt‚| 
¡ rìt‚| ¡  
¡ sþt‚| td td  t td  t dg¡s.t‚| td td  t dt dg¡rXt‚| td dtt  t g¡s|t‚| tddg¡| dddg¡ks¢t‚| tddg¡| dddg¡krÈt‚| dddgdddg¡ | dddg¡¡|ksüt‚| d¡rt‚d S )	Nr   r	   r   r   r   r   r   r   )r   r   r   r   r   r    r   r7   r;   r<   r,   r=   r9   r+   )r%   r(   rA   rB   r"   r   r   r   Útest_ModulesQuotientRing?  sB    *

$$0*$&&4ra   c                  C   s²   t  t¡} |  d¡}| tdgdtg¡}| td dgdtd g¡}|  t¡}|| ||   kr†|  kr†t|   kr†|t ksŒn t‚|| |  kr¨t| ks®n t‚d S r_   )r   r   r   r   r7   Úidealr    )r%   r"   ZS1rT   rL   r   r   r   Útest_module_mulj  s    


>rc   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r¤|ksªn t‚t|j	ƒD ]X\}}|t
dd„ t|| |j	ƒD ƒƒ  krt
dd„ t|| |j	ƒD ƒƒks´n t‚q´|  ttg¡ |  ttg¡¡ ¡ s6t‚d S )	Nr   r   r   T©Z	relationsc                 s   s   | ]\}}|| V  qd S r]   r   ©rH   Úcr   r   r   r   Ú	<genexpr>~  s     z$test_intersection.<locals>.<genexpr>c                 s   s   | ]\}}|| V  qd S r]   r   )rH   Údr   r   r   r   rg     s     )r   r   r   r   r   r7   Z	intersectr    Ú	enumerateÚgensÚsumÚzipr,   )	rA   r(   r.   rL   ZI1Zrel1Zrel2Úir$   r   r   r   Útest_intersectionu  s    2 (ÿrn   c                  C   s\  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s†t	‚| ttg¡ | ¡ ¡ 
¡ s¦t	‚| td td gtd td g¡}| tt tt g¡}|j|dd\}}||  td tt ¡kst	‚t|jƒD ]<\}}||jd  tdd„ t|| |jƒD ƒƒkst	‚qd S )Nr   Trd   r   c                 s   s   | ]\}}|| V  qd S r]   r   re   r   r   r   rg   ‘  s     z test_quotient.<locals>.<genexpr>)r   r   r   r   r   r   r7   Zmodule_quotientrb   r    Zis_whole_ringri   rj   rk   rl   )r%   rA   r"   r[   ÚqÚrelrm   r$   r   r   r   Útest_quotient„  s    
$ÿ.ÿ $rq   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sLt‚qLd S )Nr   r   r   T)Úextendedc                 s   s   | ]\}}|| V  qd S r]   r   )rH   rf   Úgenr   r   r   rg   ˜  s     z*test_groebner_extendend.<locals>.<genexpr>)r   r   r   r   r   r   r7   Z_groebner_vecri   rk   rl   rj   r    )r"   rZ   r%   rm   r$   r   r   r   Útest_groebner_extendend”  s    4rt   N)$Ú__doc__Zsympy.polys.agca.modulesr   r   r   Zsympy.polysr   r   r   r   r	   r
   Z	sympy.abcr   r   r   Zsympy.testing.pytestr   Zsympy.core.numbersr   r&   r0   r4   rE   rF   rQ   rR   rU   rX   r\   r`   ra   rc   rn   rq   rt   r   r   r   r   Ú<module>   s*    7(#+