U
    L?h€  ã                   @   sh   d Z ddlmZ ddlmZ ddl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S )zTests for homomorphisms.é    )ÚS)ÚQQ©ÚxÚy©Úhomomorphism)Úraisesc                  C   s¤   t  t¡} tt|  d¡|  d¡dgƒƒdks0t‚tt|  d¡|  d¡ddgƒƒdksXt‚tt|  d¡|  d¡tgg dgƒƒdks†t‚t|  d¡ ¡ ƒdks t‚d S )Né   r   z$Matrix([[0]]) : QQ[x]**1 -> QQ[x]**1é   z^Matrix([                       
[0, 0], : QQ[x]**2 -> QQ[x]**2
[0, 0]])                       z*Matrix([[0]]) : QQ[x]**1 -> QQ[x]**1/<[x]>z'Matrix(0, 0, []) : QQ[x]**0 -> QQ[x]**0)r   Úold_poly_ringr   Ústrr   Úfree_moduleÚAssertionErrorÚidentity_hom)ÚR© r   ú[/var/www/html/venv/lib/python3.8/site-packages/sympy/polys/agca/tests/test_homomorphisms.pyÚtest_printing
   s    
ÿÿ$ÿr   c                     sü  t  t¡ d¡} t  t¡ d¡}|  ¡ ‰ t| | ddtggƒ‰t| | ddgdgƒ}t| |dddgdddggƒ‰ˆ ˆ ksxt‚ˆ ˆks„t‚ˆ ˆkst‚ˆ |  ¡ kdks¤t‚dˆ  ˆ d   krÔt| | ddgddggƒksÚn t‚ˆ d t| | tjdgdtjggƒkst‚ˆ ˆ t| | ddgdtd ggƒks.t‚ˆ ˆ t| | ddgddt ggƒksXt‚ˆ ˆ ˆ  krxˆˆ  ks~n t‚|ˆ t| | dddggƒks t‚ˆ| t| | ddgƒks¾t‚ˆˆ  ˆksÐt‚ˆ ddgƒddgksêt‚ˆddgƒddt gkst‚ˆ 	|  
ttg¡¡ttgƒˆttgƒks6t‚| |  
ddg¡¡}|ddgƒ|ddgƒksht‚| 	|j 
tdg¡¡tdgƒ|tdgƒks˜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 )Nr   é   r   r
   Féÿÿÿÿc                      s   ˆ ˆ S ©Nr   r   )ÚfÚgr   r   Ú<lambda>1   ó    z!test_operations.<locals>.<lambda>c                      s   ˆ d S ©Nr
   r   r   ©r   r   r   r   2   r   c                      s   ˆ ˆ S r   r   r   ©r   Úir   r   r   3   r   c                      s   ˆ d S r   r   r   r   r   r   r   4   r   c                      s   ˆ ˆ S r   r   r   r   r   r   r   5   r   )r   r   r   r   r   r   r   r   ZHalfÚrestrict_domainÚ	submoduleÚquotient_domainÚdomainr	   Ú	TypeError)ÚFÚGÚhZh1r   )r   r   r   r   Útest_operations   s:    6***&".0r(   c                     s  t  t¡ d¡‰ t  t¡ d¡‰ˆ  dddg¡} ˆ |  }| dddg¡}ddgddgddgg‰tˆ ˆˆƒ‰t|ˆˆƒ}ˆ | ¡|ksˆt‚tt	‡ ‡fdd„ƒ | 
|¡t|ˆˆƒks¶t‚tt	‡‡fdd„ƒ tt	‡‡fd	d„ƒ tt	‡ ‡fd
d„ƒ dddgdddgdddgg}ˆ | ||fD ] }| ¡ t|||ƒkst‚q|  ¡ t| ˆ |ƒksVt‚| ¡ t|||ƒkspt‚| ¡ tˆ ||ƒksŠt‚| ¡ t|j||ƒks¦t‚G dd„ dƒ‰G ‡fdd„dƒ‰tt‡‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ tt	‡‡fdd„ƒ tt	‡ ‡fdd„ƒ d S )Nr   r   r
   r   r   c                      s   ˆ  ˆ  dddg¡¡S ©Nr
   r   )r"   r!   r   ©r%   r'   r   r   r   C   r   ztest_creation.<locals>.<lambda>c                      s
   ˆ  ˆ ¡S r   )r    r   ©r&   r'   r   r   r   E   r   c                      s   ˆ  ˆ  ddg¡¡S r)   )Úrestrict_codomainr!   r   r+   r   r   r   F   r   c                      s
   ˆ  ˆ ¡S r   )Zquotient_codomainr   r*   r   r   r   G   r   c                   @   s   e Zd Zddd„ZdS )ztest_creation.<locals>.convNc                 S   s   | S r   r   r   r   r   r   ÚconvertR   s    z#test_creation.<locals>.conv.convert)N)Ú__name__Ú
__module__Ú__qualname__r-   r   r   r   r   ÚconvQ   s   r1   c                       s   e Zd Z” ƒ Zdd„ ZdS )ztest_creation.<locals>.dummyc                  W   s   d S r   r   )Úargsr   r   r   r!   X   s    z&test_creation.<locals>.dummy.submoduleN)r.   r/   r0   Ú	containerr!   r   )r1   r   r   ÚdummyU   s   r4   c                      s   t ˆƒ ˆ ˆƒS r   r   r   )r&   r4   Úmatrixr   r   r   Z   r   c                      s   t ˆ ˆƒ ˆƒS r   r   r   )r%   r4   r5   r   r   r   [   r   c                      s   t t tt¡ d¡ˆ ˆƒS )Nr   )r   r   r   r   r   r   r   )r&   r5   r   r   r   ]   r   c                      s   t ˆ ˆddgƒS )Nr   r   r   )r%   r&   r   r   r   ^   r   )r   r   r   r   r!   r   r"   r   r	   Ú
ValueErrorr    r   Zinclusion_homZquotient_homÚbaser$   )ZSMÚQZSQZh2ZimÚMr   )r%   r&   r1   r4   r'   r5   r   Útest_creation8   s<     ÿr:   c                  C   s6  t  tt¡} |  d¡}t||tdgtdggƒ}| ¡ | t tg¡ksJt‚| 	¡ | tdgtdg¡ksjt‚| 
¡ rvt‚| ¡ r‚t‚| | 	¡ ¡ ¡ s˜t‚| | ddg¡¡ 
¡ s´t‚| | ¡ ¡ | 	¡ ¡ ¡ sÔt‚t jttdtfdtffdtd d g }| d¡}t||tdgttd ggƒ}| ¡ s2t‚d S )Nr   r   r
   ÚlexZilex)Úorder)r   r   r   r   r   r   Zkernelr!   r   ÚimageZis_injectiveZis_surjectiver,   r    r"   Zis_isomorphism)r   r%   r'   ZR2r   r   r   Útest_propertiesa   s$    
 ÿÿ*
r>   N)Ú__doc__Zsympy.core.singletonr   Z!sympy.polys.domains.rationalfieldr   Z	sympy.abcr   r   Zsympy.polys.agcar   Zsympy.testing.pytestr	   r   r(   r:   r>   r   r   r   r   Ú<module>   s   #)