U
    Š±ËhŠ8  ã                   @   s  d Z ddl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 ddlmZ ddlmZmZ dd	„ eƒ D ƒ\ZZZZZZ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*d+„ Z*d,d-„ Z+d.d/„ Z,d0S )1z:Tests for OO layer of several polynomial representations. é    )Úsqrt)ÚZZÚQQ)ÚDMPÚDMFÚANP)ÚCoercionFailedÚExactQuotientFailedÚNotInvertible)Úf_polys)ÚraisesÚwarns_deprecated_sympyc                 C   s   g | ]}|  ¡ ‘qS © )Zto_dense)Ú.0Úfr   r   úF/tmp/pip-unpacked-wheel-6t8vlncq/sympy/polys/tests/test_polyclasses.pyÚ
<listcomp>   s     r   c                  C   s  t tdƒgg tdƒtdƒtdƒgtdƒggtƒ} | jddgdggksHt‚| jtksVt‚| jdksdt‚t tdƒtdƒgtdƒggtdƒ} | jddgdggksžt‚| jtks¬t‚| jdksºt‚t  tdƒtdƒdœdt¡} | jddgdggksît‚| jtksüt‚| jdkst‚d S )Nr   é   é   é   ©)r   r   ©r   r   )r   r   Z_repÚAssertionErrorÚdomÚlevÚ	from_dict©r   r   r   r   Útest_DMP___init__   s    0"r   c               	   C   s:   t dddgtƒ} tƒ  | jdddgks,t‚W 5 Q R X d S ©Nr   r   r   )r   r   r   Úrepr   r   r   r   r   Útest_DMP_rep_deprecation!   s    r    c                   C   s&  t tdƒtdƒgtdƒggtƒt tdƒtdƒgtdƒggtƒksDt‚t tdƒtdƒgtdƒggtƒt tdƒtdƒgtdƒggtƒksˆt‚t tdƒtdƒgtdƒggtƒt tdƒtdƒgtdƒggtƒksÌt‚t tdƒgggtƒt tdƒggtƒksöt‚t tdƒggtƒt tdƒgggtƒks"t‚d S r   )r   r   r   r   r   r   r   r   Útest_DMP___eq__(   s    ÿÿÿ*r!   c                   C   s:   t tg gtƒƒdkst‚t ttdƒggtƒƒdks6t‚d S ©NFr   T)Úboolr   r   r   r   r   r   r   Útest_DMP___bool__5   s    r$   c                  C   sl   t tdƒgg tdƒgg tdƒggtƒ} |  ¡ ddddœks>t‚|  ¡ t d¡t d¡t d¡dœksht‚d S )Nr   r   é   ))é   r   ©r   r   r   )r   r   Zto_dictr   Zto_sympy_dictZto_sympyr   r   r   r   Útest_DMP_to_dict:   s    &
ÿÿÿr(   c                   C   sÞ  t g gtƒjdkst‚t tdƒggtƒjdks2t‚t tdƒggtƒjdksNt‚t tdƒggtƒjdksjt‚t tdƒggtƒjdks†t‚t tdƒgtdƒgtdƒggtƒjdks²t‚t tdƒgtdƒtdƒgtdƒtdƒggtƒjdksêt‚t tdƒgtdƒtdƒgtdƒtdƒtdƒggtƒjdks*t‚t tdƒtdƒgtdƒggtƒjdksVt‚t tdƒtdƒgtdƒggtƒjdks‚t‚t tdƒtdƒgtdƒggtƒjdks®t‚t tdƒtdƒgtdƒggtƒjdksÚt‚d S )	NTr   Fr   r   r   r&   é   )	r   r   Úis_zeror   Úis_oneZ	is_groundZis_sqfZis_monicZis_primitiver   r   r   r   Útest_DMP_propertiesD   s    ,8@,,,r,   c                     sÌ  t tdƒgtdƒtdƒggtƒ‰ ˆ  d¡t tdƒgtdƒtdƒggtƒksNt‚ˆ  d¡t tdƒgtdƒtdƒggtƒks|t‚tt‡ fdd„ƒ t tdƒggtƒ‰ t tdƒggtƒ‰ˆ  ¡ ˆksÂt‚tˆ ƒˆksÒt‚ˆ ¡ ˆ ksât‚ˆ ˆ ksðt‚t g gtƒ} ˆ  	ˆ¡| kst‚ˆ ˆ | ks"t‚ˆˆ  | ks4t‚ˆ d | ksFt‚dˆ  | ksXt‚t td	ƒggtƒ} ˆ  
ˆ¡| ks~t‚ˆ ˆ | kst‚ˆˆ  |  ks¤t‚ˆ d | ks¶t‚dˆ  |  ksÊt‚t td
ƒggtƒ} ˆ  ˆ¡| ksðt‚ˆ ˆ | kst‚ˆˆ  | kst‚ˆ d | ks&t‚dˆ  | ks8t‚t tdƒggtƒ} ˆ  ¡ | ks\t‚ˆ  d¡| kspt‚ˆ d | ks‚t‚tt‡ fdd„ƒ t tdƒgg tdƒtdƒtdƒggtƒ‰ t tdƒgtdƒtdƒggtƒ‰t tdƒgtdƒtdƒggtƒ}t tdƒtdƒtdƒggtƒ}ˆ  ˆ¡||fks2t‚ˆ  ˆ¡|ksFt‚ˆ  ˆ¡|ksZt‚tt‡ ‡fdd„ƒ t tdƒgg tdƒtdƒtdƒggtƒ‰ t tdƒgtdƒtdƒggtƒ‰t tdƒgtdƒtdƒggtƒ}t tdƒtdƒtdƒggtƒ}ˆ  ˆ¡||fkst‚ˆ  ˆ¡|ks t‚ˆ  ˆ¡|ks4t‚tˆ ˆƒ||fksLt‚ˆ ˆ |ks^t‚ˆ ˆ |kspt‚tt‡ ‡fdd„ƒ t tdƒtdƒtdƒgtƒ‰ t tdƒtdƒgtƒ‰t g tƒ}ˆ }t tdƒtdƒgtƒ}t g tƒ}ˆ  ˆ¡||fksüt‚ˆ  ˆ¡|kst‚ˆ  ˆ¡|ks$t‚tˆ ˆƒ||fks<t‚ˆ ˆ |ksNt‚ˆ ˆ |ks`t‚tt‡ ‡fdd„ƒ ˆ  ˆ¡||fksŒt‚ˆ  ˆ¡|ks t‚ˆ  ˆ¡|ks´t‚ˆ  ˆ¡|ksÈt‚d S )Nr   r   r&   r   c                      s
   ˆ   d¡S )Nr   )Zexquo_groundr   r   r   r   Ú<lambda>^   ó    z&test_DMP_arithmetics.<locals>.<lambda>éûÿÿÿé   éöÿÿÿiçÿÿÿé   c                      s
   ˆ   d¡S )NÚx)Úpowr   r   r   r   r-   ‡   r.   éþÿÿÿr%   c                      s
   ˆ   ˆ¡S ©N)Úpexquor   ©r   Úgr   r   r-   “   r.   éÿÿÿÿc                      s
   ˆ   ˆ¡S r6   ©Zexquor   r8   r   r   r-   £   r.   c                      s
   ˆ   ˆ¡S r6   r;   r   r8   r   r   r-   ¶   r.   )r   r   Z
mul_groundr   Z
quo_groundr   r	   ÚabsÚnegÚaddÚsubÚmulZsqrr4   Ú	TypeErrorZpdivZpquoZpremÚdivÚquoÚremÚdivmodr7   )ÚhÚqÚrZpqÚprr   r8   r   Útest_DMP_arithmeticsX   sŠ     ..(  (  

rJ   c                     s  t tdƒgtdƒtdƒgtdƒtdƒtdƒggtƒ‰ t tdƒgtdƒtdƒggtƒ} t tdƒggtƒ}ˆ  ¡ dksvt‚ˆ  ¡ dks†t‚ˆ  ¡ dks–t‚ˆ  ¡ tdƒksªt‚ˆ  ¡ tdƒks¾t‚ˆ  dd¡tdƒksÖt‚t	t
‡ fdd„ƒ ˆ  ¡ dksøt‚ˆ  ¡ dks
t‚t tdƒgtdƒtdƒggtƒ}ˆ jddd|ksBt‚ˆ jddd|ksZt‚t	t
‡ fd	d„ƒ t tdƒtdƒtdƒgtƒ}t tdƒtdƒtdƒgtƒ}ˆ jddd
|ks¼t‚ˆ jddd
|ksÔt‚ˆ  d¡ d¡tdƒksòt‚ˆ  | ¡| | |fkst‚ˆ  | ¡| ks t‚ˆ  | ¡ˆ ks4t‚t tdƒtdƒtdƒggtƒ}t tdƒtddƒtddƒggtƒ}| ¡ |ks†t‚dˆ   ¡ tdƒks t‚dˆ   ¡ tdƒˆ fks¾t‚t tddƒtdƒgtƒ‰ t tddƒtdƒgtƒ} ˆ  | ¡ˆ j| dd  kr>t tdƒtdƒgtƒt tdƒtdƒgtƒfksDn t‚ˆ j| ddtdƒtdƒt tdƒtdƒgtƒt tdƒtdƒgtƒfkst‚t tdƒgtdƒgtdƒgtdƒgtdƒgtdƒggtƒ‰ ˆ  d¡t tdƒgtdƒgg tdƒgtdƒgg gtƒkst‚t ttƒ‰ ˆ  ¡ ˆ  ks&t‚ˆ  ¡ tdƒˆ  dfgfksHt‚t tdƒgg g tdƒggtƒ‰ t tdƒtdƒgg g gtƒ} t tdƒtdƒtdƒggtƒ}t tdƒtdƒtdƒtdƒgtƒ}ˆ  | ¡ˆ | |gksÜt‚ˆ  | ¡|ksðt‚t tdƒtdƒtdƒtdƒgtƒ‰ ˆ  ¡ dks$t‚t tdƒtdƒgtƒ‰ t tdƒtdƒtdƒgtƒ} t tddƒtdƒgtƒ}t tddƒgtƒ}t tdƒgtƒ}ˆ  | ¡||fks¨t‚ˆ  | ¡|||fksÂt‚ˆ   | ¡|ksÖt‚t tdƒgtdƒgtdƒggtƒ‰ t	t!‡ fdd„ƒ t	t!‡ fd d„ƒ t	t!‡ fd!d„ƒ t t "ddd"dd#dd$dd%d&dd'dg¡tƒ‰ t tdƒtdƒtdƒtd&ƒtdƒgtƒ} t tdƒtdƒtdƒtdƒgtƒ}|  #|¡ˆ ks¶t‚ˆ  $¡ | |gksÌt‚t tdƒgtdƒgtdƒggtƒ‰ t	t!‡ fd(d„ƒ t	t!‡ fd)d„ƒ d S )*Nr   r   r   )r   r   c                      s   ˆ   dd¡S )Nr   r3   )Únthr   r   r   r   r-   Ë   r.   z(test_DMP_functionality.<locals>.<lambda>r&   ©ÚmÚjc                      s   ˆ j dddS )Nr3   r   rL   )Údiffr   r   r   r   r-   Õ   r.   )ÚarN   é-   é   r0   r   é	   é   T)Úincludeé   Fr)   r:   i£  éá   r2   ióÿÿÿipÒÿÿiðÿÿÿé    é   c                      s
   ˆ   ˆ ¡S r6   )Ú
half_gcdexr   r   r   r   r-     r.   c                      s
   ˆ   ˆ ¡S r6   )Úgcdexr   r   r   r   r-     r.   c                      s
   ˆ   ˆ ¡S r6   )Úinvertr   r   r   r   r-      r.   é   é–   iô  iq  r5   r1   c                      s   ˆ   ¡ S r6   )Ú	decomposer   r   r   r   r-   +  r.   c                      s   ˆ   ¡ S r6   )Zsturmr   r   r   r   r-   ,  r.   )%r   r   Zdegreer   Zdegree_listZtotal_degreeZLCZTCrK   r   rA   Zmax_normZl1_normrO   ÚevalZ	cofactorsÚgcdZlcmr   ZmonicÚcontentZ	primitiveÚcancelÚtruncÚf_4Zsqf_partZsqf_listZsubresultantsZ	resultantZdiscriminantrZ   r[   r\   Ú
ValueErrorÚmapZcomposer_   )r9   rF   ÚuÚvrH   ÚsÚtr   r   r   Útest_DMP_functionality¾   s”    4  "þü:>
""""*(""rl   c                  C   sò   t dƒggg ggggggggggggggggggggggggg} ddddddddd	d
dddddddddddddddg}t| t ƒ ¡ |tt dƒt dƒgt ƒfks¢t‚tt dƒgt dƒt dƒggt ƒ ¡ g tt dƒgt dƒt dƒggt ƒfksît‚d S )Nr   r   r   r   r&   r0   r)   rT   r%   rS   é
   é   é   é   é   é   rY   é   é   é   r]   rV   é   é   r2   )r   r   Úexcluder   )r   ÚJr   r   r   Útest_DMP_exclude/  s    @$      ÿ,""ÿrz   c                  C   sV  t dgg dddgdggdddggftƒ} | jddgdggks@t‚| jdddggksVt‚| jdksdt‚| jtksrt‚t ddgdggdddggftdƒ} | jddgdggks¬t‚| jdddggksÂt‚| jdksÐt‚| jtksÞt‚t dgdggdgdggftƒ} | jdgdggkst‚| jdgdggks,t‚| jdks<t‚| jtksLt‚t dgdggdgd	ggftƒ} | jdgdggks‚t‚| jdgdggksšt‚| jdksªt‚| jtksºt‚t dgdggdgd	ggftƒ} | jdgdggksðt‚| jdgdggkst‚| jdkst‚| jtks(t‚t g gdgd	ggftƒ} | jg gksRt‚| jdggksft‚| jdksvt‚| jtks†t‚t d
tdƒ} | jd
ggks¦t‚| jdggksºt‚| jdksÊt‚| jtksÚt‚t dgdggtƒ} | jdgdggkst‚| jdggkst‚| jdks(t‚| jtks8t‚t dgg dddgdggtƒ} | jddgdggksnt‚| jdggks‚t‚| jdks’t‚| jtks¢t‚t dddœtdƒ} | jddgdggksÎt‚| jdggksât‚| jdksòt‚| jtkst‚t tdƒgtdƒggtdƒ gtd	ƒggftƒ} | jtdƒ gtdƒ ggksVt‚| jtdƒgtd	ƒ ggksxt‚| jdksˆt‚| jtks˜t‚t tddƒgtddƒggtddƒ gtd	dƒggftƒ} | jtdƒ gtdƒ ggksôt‚| jtdƒgtdƒ ggkst‚| jdks&t‚| jtks6t‚tt	dd„ ƒ tt
dd„ ƒ d S )Nr   r   r   r   r:   r5   éüÿÿÿéýÿÿÿr&   rs   r   r0   rT   rq   rr   r]   c                   S   s   t dgdggftƒS ©Nr   ©r   r   r   r   r   r   r-   Ž  r.   z"test_DMF__init__.<locals>.<lambda>c                   S   s   t dgg ftƒS r}   r~   r   r   r   r   r-     r.   )r   r   Únumr   Zdenr   r   r   r   rf   ÚZeroDivisionErrorr   r   r   r   Útest_DMF__init__9  s|    ("0$"8$"r   c                   C   s6   t tg gtƒƒdkst‚t tdggtƒƒdks2t‚d S r"   )r#   r   r   r   r   r   r   r   Útest_DMF__bool__’  s    r‚   c                   C   s€   t g gtƒjdkst‚t g gtƒjdks,t‚t dggtƒjdksDt‚t dggtƒjdks\t‚t dggdggftƒjdks|t‚d S )NTFr   r   )r   r   r*   r   r+   r   r   r   r   Útest_DMF_properties—  s
    rƒ   c                  C   sœ  t dgdggtƒ} t dgdggtƒ}|  ¡ |    kr>|ksDn t‚t dggdgg gftƒ} t dggddggftƒ}t dgddggddgg gftƒ}|  |¡| |   kr²|ks¸n t‚| | ¡||    krÖ|ksÜn t‚t dgddggddgg gftƒ}|  |¡| |   kr|ks$n t‚t dggddgg gftƒ}|  |¡| |   kr`|ksfn t‚| | ¡||    krˆ|ksŽn t‚t ddggdgg gftƒ}|  |¡| |   krÊ|ksÐn t‚t dggdgg g g gftƒ}|  d¡| d   kr|ksn t‚t dggddddggftƒ}| d¡|d   krR|ksXn t‚t ddggdggftƒ}| d¡|d   kr’|ks˜n t‚d S )	NrT   i÷ÿÿÿiùÿÿÿrS   r   r   r:   r   )	r   r   r=   r   r>   r?   r@   rC   r4   )r   r9   rF   r   r   r   Útest_DMF_arithmetics¡  s*      $$ ((((((r„   c                     s”  t dƒt dƒg} t dƒt dƒt dƒg‰ t| ˆ t ƒ}| ¡ t dƒt dƒgksNt‚| ¡ t dƒt dƒt dƒgkspt‚|jt ks~t‚t dƒt dƒdœ} t dƒt dƒdœ‰ t| ˆ t ƒ}| ¡ t dƒt dƒgksÊt‚| ¡ t dƒt dƒt dƒgksìt‚|jt ksút‚tdˆ t ƒ}| ¡ t dƒgkst‚| ¡ t dƒt dƒt dƒgksBt‚|jt ksRt‚tddgˆ t ƒ}tdd„ | ¡ D ƒƒs~t‚tt‡ fdd	„ƒ d S )
Nr   r   )r   r   r'   g      à?c                 s   s   | ]}t  |¡V  qd S r6   )r   Zof_type)r   rP   r   r   r   Ú	<genexpr>ä  s     z$test_ANP___init__.<locals>.<genexpr>c                      s   t tdƒgˆ tƒS )Nr   )r   r   r   r   ©Úmodr   r   r-   æ  r.   z#test_ANP___init__.<locals>.<lambda>)	r   r   Zto_listr   Zmod_to_listr   Úallr   r   )r   r   r   r†   r   Útest_ANP___init__É  s&    ""$r‰   c                  C   sâ   t tdƒtdƒgtdƒtdƒtdƒgtƒ} t tdƒtdƒgtdƒtdƒtdƒgtƒ}| | kdksdt‚| | kdkstt‚| |kdks„t‚| |kdks”t‚t tdƒtdƒgtdƒtdƒtdƒgtƒ}| |kdksÎt‚| |kdksÞt‚d S )Nr   r   r   TF)r   r   r   )rP   Úbr   r   r   Útest_ANP___eq__é  s    ***r‹   c                   C   s^   t tg tdƒtdƒtdƒgtƒƒdks*t‚t ttdƒgtdƒtdƒtdƒgtƒƒdksZt‚d S )Nr   r   FT)r#   r   r   r   r   r   r   r   Útest_ANP___bool__ù  s    *rŒ   c                  C   sŠ   t dƒt dƒt dƒg} tt dƒg| t ƒjdks2t‚tt dƒg| t ƒjdksNt‚tt dƒg| t ƒjdksjt‚tt dƒg| t ƒjdks†t‚d S )Nr   r   TFr   )r   r   r*   r   r+   r†   r   r   r   Útest_ANP_propertiesþ  s
    r   c                     sx  t dƒt dƒt dƒt dƒg} tt dƒt dƒt dƒg| t ƒ‰ tt dƒt dƒg| t ƒ}tt dƒt dƒt dƒg| t ƒ‰ˆ  ¡ ˆ    krŠˆksn t‚tt dƒt dƒt dƒg| t ƒ‰ˆ  |¡ˆ |   krÌˆksÒn t‚| ˆ ¡|ˆ    krðˆksön t‚tt dƒt dƒt dƒg| t ƒ‰ˆ  |¡ˆ |   kr6ˆks<n t‚tt dƒt dƒt dƒg| t ƒ‰| ˆ ¡|ˆ    kr|ˆks‚n t‚tt dƒt dƒt dƒg| t ƒ‰ˆ  |¡ˆ |   krÂˆksÈn t‚| ˆ ¡|ˆ    krêˆksðn t‚tt ddƒt d	dƒt d
dƒg| t ƒ‰ˆ  d¡ˆ d   kr>td| t ƒksDn t‚ˆ  d¡ˆ d   krfˆ ksln t‚ˆ  d¡ˆ d   krŽˆks”n t‚ˆ  ˆ ¡ˆ  ˆ  d¡¡  krÚˆ ˆ d    krÚtd| t ƒksàn t‚tg ddddgt ƒ‰ˆ  	|¡}ˆ  
|¡\}}||  kr4ˆ  kr4ˆ | ks:n t‚tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ |ˆ | kstt‚d S )Nr   r   r5   r   r:   r   r)   é+   rS   r0   c                      s
   ˆ   ˆ¡S r6   )rB   r   ©rP   Úcr   r   r-   4  r.   z&test_ANP_arithmetics.<locals>.<lambda>c                      s
   ˆ   ˆ¡S r6   )rD   r   r   r   r   r-   5  r.   )r   r   r=   r   r>   r?   r@   r4   rC   rD   rB   r   r
   )r‡   rŠ   Zr1rG   Zr2r   r   r   Útest_ANP_arithmetics  s6     $$(((($0((L
.r‘   c                  C   s  t dƒt dƒt dƒg} tdƒtdƒtdƒg}ttdƒg|tƒ}tt dƒg| t ƒ}| |¡d tksft‚| |¡d tks|t‚| |¡d tks’t‚| |¡d t ks¨t‚| |¡d tks¾t‚| |¡d tksÔt‚| |¡d tksêt‚| |¡d t kst‚d S )Nr   r   r5   r:   )r   r   r   Zunifyr   Z	unify_ANP)Zmod_zZmod_qrP   rŠ   r   r   r   Útest_ANP_unify=  s    r’   N)-Ú__doc__Z(sympy.functions.elementary.miscellaneousr   Zsympy.polys.domainsr   r   Zsympy.polys.polyclassesr   r   r   Zsympy.polys.polyerrorsr   r	   r
   Zsympy.polys.specialpolysr   Zsympy.testing.pytestr   r   Zf_0Zf_1Zf_2Zf_3re   Zf_5Zf_6r   r    r!   r$   r(   r,   rJ   rl   rz   r   r‚   rƒ   r„   r‰   r‹   rŒ   r   r‘   r’   r   r   r   r   Ú<module>   s4   
fq
Y
( 
5