a
    Ÿ¬<b¹  ã                   @   sÀ   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dl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)ÚMatrix)ÚZZ)ÚQQ©ÚxÚyc                  C   sF  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sôJ ‚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spJ ‚|	tj	 |
ks„J ‚|
jtt ks˜J ‚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s J ‚t
t tt dƒdksJ ‚t g d¢tƒd t g d¢tƒksBJ ‚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pm1Úv1Úm1ÚAÚBZpm2Úv2Úm2ÚCZpm3Zv3Zpm4Zv4© r   úq/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-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s0J ‚| jtks>J ‚| jttfksPJ ‚| jdks^J ‚| jdkslJ ‚| j	dkszJ ‚t
| ƒdksŠJ ‚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sêJ ‚|jtt ksüJ ‚|jtfksJ ‚|jdksJ ‚|jdks.J ‚|j	dks>J ‚t
|ƒdksPJ ‚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sPJ ‚t ttgƒt tgtggtttf dks~J ‚t ddttgƒt ttggtttf dks®J ‚t dddd„ ƒt ttggtttf dksÞJ ‚t d	dg ttƒjd
ksúJ ‚t dd	g ttƒjdksJ ‚t g g gttƒjdks2J ‚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‚n 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>N   ó    z-test_polymatrix_constructor.<locals>.<lambda>r   )r   r   )r   r   c                   S   s   t ƒ S r"   r   r   r   r   r    r%   S   r&   c                   S   s   t dƒS ©Nr   r   r   r   r   r    r%   T   r&   )r   r   r   r	   r   r   ZgensÚshapeÚrowsÚcolsr   Úlistr   r   Z
frac_fieldr   Ú	TypeError©ZM1ÚM2r   r   r    Útest_polymatrix_constructor2   sB    062242.00P6r/   c                   C   sF  t tgƒt tgƒkdu sJ ‚t tgƒt tgƒkdu s8J ‚t tgƒt tgƒkdu sTJ ‚t tgƒt tgƒkdu spJ ‚t ttggƒt ttgƒ  kr¢t tgtggƒks¨n J ‚t tgtt dt tgtt dksÐJ ‚t tgƒttgƒksèJ ‚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sBJ ‚d S )NTFr   r   )r   r   r   r	   r   r   Z	to_Matrixr   r   r   r    Útest_polymatrix_eq\   s    8(r0   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sVJ ‚t ddgtƒ} t ddgtƒ}| |ks~J ‚|  t¡|ksJ ‚d S ©Nr   r   r   )r   Zfrom_Matrixr   r   r	   r   Zset_gens)ZpmxZpmyr   r   r    Útest_polymatrix_from_Matrixm   s    .(r2   c                   C   s:   t tddggtƒƒdksJ ‚t tddg tƒƒdks6J ‚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_reprv   s    r4   c                  C   sÜ   t ddgddggtƒ} | d d …d d …f | ks2J ‚| dd d …f t ddggtƒksVJ ‚| d d …df t ddgtƒksxJ ‚| d tdttdks’J ‚| d tdttdks¬J ‚| d d… tdttdtdttdgksØJ ‚d S )Nr   r   r   é   r   )r   r   r   )r   r   r   r	   ©ÚMr   r   r    Útest_polymatrix_getitem{   s    $"r8   c                     sŠ  t ddgddggtƒ‰ ˆ ˆ  t ddgddggtƒks8J ‚ˆ ˆ  t ddgddggtƒksZJ ‚ˆ  t dd	gd
dggtƒkszJ ‚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säJ ‚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sTJ ‚ˆ 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stJ ‚tt‡ fdd„ƒ d S )Nr   r   r   r5   é   é   r   r   éþÿÿÿéýÿÿÿéüÿÿÿc                      s   ˆ d S r'   r   r   r6   r   r    r%   Š   r&   z,test_polymatrix_arithmetic.<locals>.<lambda>c                      s   ˆ d S r'   r   r   r6   r   r    r%   ‹   r&   c                      s   dˆ  S r'   r   r   r6   r   r    r%   Œ   r&   c                      s   dˆ  S r'   r   r   r6   r   r    r%      r&   é   é
   é   é   c                      s   g ˆ  S r"   r   r   r6   r   r    r%   ”   r&   c                      s   ˆ g  S r"   r   r   r6   r   r    r%   •   r&   r   c                      s   ˆ g  S r"   r   r   r6   r   r    r%   œ   r&   )	r   r   r   r,   r   r   r   r	   r   )r.   r   r6   r    Útest_polymatrix_arithmetic…   s*    "" "$$((((4:rB   c                  C   sÎ   t ddgddggtƒ} |  ¡ t ddgddggtƒks8J ‚t ddgddggtƒ}|  |¡t g d	¢g d
¢gtƒksrJ ‚|  |¡t ddgddgddgddggtƒks¢J ‚|  dd„ ¡t ddgddggtƒksÊJ ‚d S )Nr   r   r   r5   é   r9   r>   r:   )r   r   rC   r9   )r   r5   r>   r:   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rE   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sHJ ‚d S )Nr   r   r   )r   Zzerosr   Úeyer   r   r   r    Útest_polymatrix_ones_zeros¨   s    "rG   c                  C   sR   t ddgddggtƒ} |  ¡ t  dt¡dfks2J ‚ttdd„ ƒ ttdd„ ƒ d S )	Nr   r   r   r5   )r   r   c                   S   s   t ddgtt d ¡ S r1   )r   r   r   Úrrefr   r   r   r    r%   °   r&   z&test_polymatrix_rref.<locals>.<lambda>c                   S   s   t dtgtt d ¡ S ©Nr   r   )r   r   r	   rH   r   r   r   r    r%   ±   r&   )r   r   rH   rF   r   Ú
ValueErrorr6   r   r   r    Útest_polymatrix_rref­   s    rK   c                  C   sb   t ddgddggtƒ} |  ¡ t ddgtƒgks2J ‚ttdd„ ƒ ttdd„ ƒ |  ¡ dks^J ‚d S )	Nr   r   r   r9   r;   c                   S   s   t ddgtt d ¡ S r1   )r   r   r   Ú	nullspacer   r   r   r    r%   ·   r&   z+test_polymatrix_nullspace.<locals>.<lambda>c                   S   s   t dtgtt d ¡ S rI   )r   r   r	   rL   r   r   r   r    r%   ¸   r&   )r   r   rL   r   rJ   Zrankr6   r   r   r    Útest_polymatrix_nullspace´   s
    rM   N)Zsympy.testing.pytestr   Zsympy.polys.polymatrixr   Zsympy.polysr   Zsympy.core.singletonr   Zsympy.matrices.denser   Zsympy.polys.domains.integerringr   Z!sympy.polys.domains.rationalfieldr	   Z	sympy.abcr   r   r!   r/   r0   r2   r4   r8   rB   rE   rG   rK   rM   r   r   r   r    Ú<module>   s$   $*	
	