o
    à8Va2  ã                   @   s¨   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZ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S )é    )Úraises©Ú
PolyMatrix)ÚPoly)ÚSÚQQÚZZÚMatrix©ÚxÚyc                  C   s:  t ttd tƒtt tƒgttd tƒtdt tƒggƒ} t ddgddggdd}t ddgddggdd}t ttd t tƒtdtƒgttd t d tƒtdtƒggƒ}t ttd tƒtt tƒgttd  tƒtttƒggƒ}|jtt kszJ ‚t| | t ƒsƒJ ‚| | |ks‹J ‚| | |ks“J ‚||  |ks›J ‚t ttd tdd	tdtdd	ttd  tdd	ttd tdd	tdtdd	ttd  tdd	ggƒ}|jtt ks×J ‚t g d
¢dd}t g d
¢dd}t ttd tdd	ggƒ}|| |ksüJ ‚|| |ksJ ‚t ttd tƒtjggdd}	tj	|	 }
|
t ttj	td  tdd	tj	ggddks2J ‚|	tj	 |
ks<J ‚|
jtt ksFJ ‚t ttd tdd	ttd  tdd	ggƒ}t ddgdd}|| t tdtd  tdd	ggƒkszJ ‚t
t tt dƒdksˆJ ‚t g d¢tƒd t g d¢tƒks›J ‚d S )Né   é   éÿÿÿÿé   r   zZZ[x]©Úringr   ©Údomain)r   r   r   r   r   r   zQQ[x]r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   Ú
isinstancer   r   ZOneÚHalfÚlen)Zpm1Zv1Zm1ÚAÚBZpm2Zv2Zm2ÚCZpm3Zv3Zpm4Zv4© r   úC/usr/lib/python3/dist-packages/sympy/polys/tests/test_polymatrix.pyÚ_test_polymatrix   s>   :ÿ80.ÿ
2,,*r   c                  C   sú  t ttggtttf d} | jtttf ksJ ‚| jtksJ ‚| jttfks(J ‚| jdks/J ‚| jdks6J ‚| j	dks=J ‚t
| ƒdksEJ ‚t| ƒttttftdttttftdgks]J ‚t ttggtt t d}|jtt t ksuJ ‚|jtt ks~J ‚|jtfks†J ‚|jdksJ ‚|jdks”J ‚|j	dks›J ‚t
|ƒdks£J ‚t|ƒtttftt dtttftt dgks½J ‚t ttggtƒt ttggt t¡t dksÕJ ‚t ttggddt ttggtttf dksíJ ‚t ttggttfƒt ttggtttf dksJ ‚t ttggttƒt ttggtttf dks J ‚t ttgƒt tgtggtttf dks7J ‚t ddttgƒt ttggtttf dksOJ ‚t dddd„ ƒt ttggtttf dksgJ ‚t d	dg ttƒjd
ksuJ ‚t dd	g ttƒjdksƒJ ‚t g g gttƒjdks‘J ‚t tttf dt d	d	g tttf d  kr·t g tttf dksºJ ‚ J ‚ttdd„ ƒ ttdd„ ƒ t ttƒttƒgƒt tgtggtttf dksãJ ‚t tttƒdgƒt tgdggtt dksûJ ‚d S )Nr   )r   r   r   r   r   zZZ[x,y]c                 S   s   t tg| S ©Nr
   )ÚiÚjr   r   r   Ú<lambda>K   s    z-test_polymatrix_constructor.<locals>.<lambda>r   )r   r   )r   r   c                   S   s   t ƒ S r   r   r   r   r   r   r!   P   s    c                   S   s   t dƒS ©Nr   r   r   r   r   r   r!   Q   ó    )r   r   r   r   r   r   ZgensÚshapeZrowsZcolsr   Úlistr   r   Z
frac_fieldr   Ú	TypeError©ZM1ÚM2r   r   r   Útest_polymatrix_constructor/   sB   040042.00R64r)   c                   C   sB  t tgƒt tgƒkdu sJ ‚t tgƒt tgƒkdu sJ ‚t tgƒt tgƒkdu s*J ‚t tgƒt tgƒkdu s8J ‚t ttggƒt ttgƒ  krRt tgtggƒksUJ ‚ J ‚t tgtt dt tgtt dksiJ ‚t tgƒttgƒksuJ ‚t tgƒ ¡ ttgƒksƒJ ‚t dgtƒt dgtƒks‘J ‚t dgtƒt dgtƒksŸJ ‚d S )NTFr   r   )r   r   r   r   r   r	   Z	to_Matrixr   r   r   r   Útest_polymatrix_eqY   s   :( r*   c                  C   s”   t  tddgƒt¡t ddgttt dksJ ‚t jtdgƒtt dt dgtƒks+J ‚t ddgtƒ} t ddgtƒ}| |ks?J ‚|  t¡|ksHJ ‚d S ©Nr   r   r   )r   Zfrom_Matrixr	   r   r   r   Zset_gens)ZpmxZpmyr   r   r   Útest_polymatrix_from_Matrixj   s   .(r,   c                   C   s:   t tddggtƒƒdksJ ‚t tddg tƒƒdksJ ‚d S )Nr   r   z PolyMatrix([[1, 2]], ring=QQ[x])r   z PolyMatrix(0, 2, [], ring=QQ[x]))Úreprr   r   r   r   r   r   Útest_polymatrix_reprs   s   r.   c                  C   sÜ   t ddgddggtƒ} | d d …d d …f | ksJ ‚| dd d …f t ddggtƒks+J ‚| d d …df t ddgtƒks<J ‚| d tdttdksIJ ‚| d tdttdksVJ ‚| d d… tdttdtdttdgkslJ ‚d S )Nr   r   r   é   r   )r   r   r   )r   r   r   r   ©ÚMr   r   r   Útest_polymatrix_getitemx   s   $"0r2   c                     s~  t ddgddggtƒ‰ ˆ ˆ  t ddgddggtƒksJ ‚ˆ ˆ  t ddgddggtƒks-J ‚ˆ  t dd	gd
dggtƒks=J ‚tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ ˆ ˆ  t ddgddggtƒksrJ ‚dˆ  t ddgddggtƒksƒJ ‚ˆ d t ddgddggtƒks”J ‚tdƒˆ  t ddgddggtƒks§J ‚ˆ tdƒ t ddgddggtƒksºJ ‚tt‡ fdd„ƒ tt‡ fdd„ƒ t ddggtt d} tj|  t tjdggtt dksêJ ‚| tj t tjdggtt dksýJ ‚ˆ d t tdƒd dgtdƒd dggtƒksJ ‚ˆ tdtƒ t tdƒd dgtdƒd dggtƒks4J ‚tt‡ fdd„ƒ d S )Nr   r   r   r/   é   é   r   r   éþÿÿÿéýÿÿÿéüÿÿÿc                      s   ˆ d S r"   r   r   r0   r   r   r!   ‡   r#   z,test_polymatrix_arithmetic.<locals>.<lambda>c                      s   ˆ d S r"   r   r   r0   r   r   r!   ˆ   r#   c                      s   dˆ  S r"   r   r   r0   r   r   r!   ‰   r#   c                      s   dˆ  S r"   r   r   r0   r   r   r!   Š   r#   é   é
   é   é   c                      s   g ˆ  S r   r   r   r0   r   r   r!   ‘   r#   c                      s   ˆ g  S r   r   r   r0   r   r   r!   ’   r#   r   c                      s   ˆ g  S r   r   r   r0   r   r   r!   ™   r#   )	r   r   r   r&   r   r   r   r   r   )r(   r   r0   r   Útest_polymatrix_arithmetic‚   s*   "" """&&&&4:r<   c                  C   sÎ   t ddgddggtƒ} |  ¡ t ddgddggtƒksJ ‚t ddgddggtƒ}|  |¡t g d	¢g d
¢gtƒks9J ‚|  |¡t ddgddgddgddggtƒksQJ ‚|  dd„ ¡t ddgddggtƒkseJ ‚d S )Nr   r   r   r/   é   r3   r8   r4   )r   r   r=   r3   )r   r/   r8   r4   c                 S   s   d|  S )Nr   r   )Úer   r   r   r!   ¢   r#   z/test_polymatrix_manipulations.<locals>.<lambda>)r   r   Z	transposeZrow_joinZcol_joinZ	applyfuncr'   r   r   r   Útest_polymatrix_manipulationsœ   s   "$0,r?   c                   C   sL   t  ddt¡t ddggtƒksJ ‚t  dt¡t ddgddggtƒks$J ‚d S )Nr   r   r   )r   Zzerosr   Úeyer   r   r   r   Útest_polymatrix_ones_zeros¥   s   "*rA   c                  C   sR   t ddgddggtƒ} |  ¡ t  dt¡dfksJ ‚ttdd„ ƒ ttdd„ ƒ d S )	Nr   r   r   r/   )r   r   c                   S   ó   t ddgtt d ¡ S r+   )r   r   r   Úrrefr   r   r   r   r!   ­   ó    z&test_polymatrix_rref.<locals>.<lambda>c                   S   ó   t dtgtt d ¡ S ©Nr   r   )r   r   r   rC   r   r   r   r   r!   ®   rD   )r   r   rC   r@   r   Ú
ValueErrorr0   r   r   r   Útest_polymatrix_rrefª   s   rH   c                  C   sb   t ddgddggtƒ} |  ¡ t ddgtƒgksJ ‚ttdd„ ƒ ttdd„ ƒ |  ¡ dks/J ‚d S )	Nr   r   r   r3   r5   c                   S   rB   r+   )r   r   r   Ú	nullspacer   r   r   r   r!   ´   rD   z+test_polymatrix_nullspace.<locals>.<lambda>c                   S   rE   rF   )r   r   r   rI   r   r   r   r   r!   µ   rD   )r   r   rI   r   rG   Zrankr0   r   r   r   Útest_polymatrix_nullspace±   s
   rJ   N)Zsympy.testing.pytestr   Zsympy.polys.polymatrixr   Zsympy.polysr   Zsympyr   r   r   r	   Z	sympy.abcr   r   r   r)   r*   r,   r.   r2   r<   r?   rA   rH   rJ   r   r   r   r   Ú<module>   s     $*	
	