a
    rÀhVÃ  ã                   @   sX  d dl 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mZm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mZ d dl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)d* Z0d+d, Z1d-d. Z2d/d0 Z3d1d2 Z4d3d4 Z5d5d6 Z6d7d8 Z7d9d: Z8d;d< Z9d=d> Z:d?d@ Z;dAdB Z<dCdD Z=dEdF Z>dGdH Z?dIdJ Z@dKdL ZAdMdN ZBdOdP ZCdQdR ZDdSdT ZEdUdV ZFdWdX ZGdYdZ ZHd[d\ ZId]d^ ZJd_d` ZKdadb ZLdcdd ZMdedf ZNdgdh ZOdidj ZPdkdl ZQdmdn ZRdodp ZSdqdr ZTdsdt ZUdudv ZVdwdx ZWdydz ZXd{d| ZYd}d~ ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd  Zkd¡d¢ Zld£d€ Zmd¥dŠ Znd§dš Zod©dª Zpd«d¬ Zqd­d® Zrd¯d° Zsd±d² Ztd³dŽ ZudµS )¶é    )ÚGROUND_TYPES)ÚIntegerÚRationalÚSÚsqrtÚMatrixÚsymbols)ÚFFÚZZÚQQÚQQ_IÚEXRAW)ÚDomainMatrixÚDomainScalarÚDM)ÚDMBadInputErrorÚDMDomainErrorÚDMShapeErrorÚDMFormatErrorÚDMNotAFieldÚDMNonSquareMatrixErrorÚDMNonInvertibleMatrixError)ÚDDM)ÚSDM)Úraisesc                  C   s   t tdtdgtdtdggdt} tddgddggt}tdkrV|j| kshJ n|j|  ¡ kshJ |jdksvJ |jtksJ d S )Né   é   é   é   ©r   r   Úflint)r   r
   r   r   ÚrepÚto_dfmÚshapeÚdomain)ÚddmÚA© r'   úh/var/www/html/assistant/venv/lib/python3.9/site-packages/sympy/polys/matrices/tests/test_domainmatrix.pyÚtest_DM   s    (r)   c                     sÜ  t dt dgt dt dggt dt ddt dt ddd} tdt  t| dt tdt }tdkr|j ksJ n|j  ¡ ksJ |jdks¢J |jt ks°J t| dt }|jksÊJ |jdksØJ |jt ksæJ t	t
 fdd	 t	t
fd
d	 t	t
dd	  dfd ffD ]f\}}|dkrLtdkrL| ¡ }tdt |d}|j|kslJ t| dt |d}|j|ks(J q(t	tfdd	 t	tdd	  dd D }t d|d< |ksØJ d S )Nr   r   r   r   ©r   r   r   r    c                      s   t  dtS ©Nr   ©r   r
   r'   )r%   r'   r(   Ú<lambda>/   ó    z(test_DomainMatrix_init.<locals>.<lambda>c                      s   t  dtS r+   r,   r'   )Úsdmr'   r(   r-   0   r.   c                   S   s   t tdggdtS )Nr   ©r   r   )r   r   r
   r'   r'   r'   r(   r-   1   r.   ÚsparseÚdense©Úfmtc                      s   t  dtddS )Nr   Úinvalidr3   r,   r'   )Úlolr'   r(   r-   ;   r.   c                   S   s   t tdtdggdtS )Nr   r   r   r,   r'   r'   r'   r(   r-   =   r.   c                 S   s   g | ]}|  ¡ qS r'   )Úcopy)Ú.0Úir'   r'   r(   Ú
<listcomp>@   r.   z*test_DomainMatrix_init.<locals>.<listcomp>é*   ©r   r   )r
   r   r   r   r   r!   r"   r#   r$   r   Ú	TypeErrorÚ
ValueErrorr   )Zdodr&   r4   r!   Úwasr'   )r%   r6   r/   r(   Útest_DomainMatrix_init   s:     &r@   c                     sè   t tdtdgtdtdggdt} t | ¡  j| ks@J  jdksNJ  jtks\J ttdtddtdtddddt}t |¡  j|ks¢J  jdks°J  jtksŸJ ttdggdt tt	 fdd	 d S )
Nr   r   r   r   r   r*   r0   c                      s
   t   ¡S ©N)r   Úfrom_repr'   ©r&   r'   r(   r-   T   r.   z,test_DomainMatrix_from_rep.<locals>.<lambda>)
r   r
   r   rB   r!   r#   r$   r   r   r=   )r%   r/   r'   rC   r(   Útest_DomainMatrix_from_repE   s    (
.
rD   c                  C   sT  t tdtdgtdtdggdt} t ddgddggt¡}tdkrX|j| ksjJ n|j|  ¡ ksjJ |jdksxJ |jtksJ t	d}t |d|dg|d|dggd|} t ddgddgg|¡}tdkræ|j| ksøJ n|j|  ¡ ksøJ |jdksJ |j|ksJ t	dd d }t |d|dg|d|dggd|} t ddgddgg|¡}tdkr|j| ksJ n|j|  ¡ ksJ |jdksšJ |j|ksžJ t t
ddt
ddgt
ddt
d	dggdt
} t d
dgddggt
¡}tdkr|j| ks0J n|j|  ¡ ks0J |jdks@J |jt
ksPJ d S )Nr   r   r   r   r   r    é   é   é   ©r   r   ©r   r   ©r   r   )rG   r   )r   r
   r   Ú	from_listr   r!   r"   r#   r$   r	   r   )r%   r&   Údomr'   r'   r(   Útest_DomainMatrix_from_listW   s<    (((
0
rM   c                  C   sX  t tdtdgtdtdggdt} t ddddgddgg¡}tdkrZ|j| kslJ n|j|  ¡ kslJ |jdkszJ |jtksJ t	 
td¡}t | dtd ¡| dtd ¡g| dtd ¡| dtd ¡ggd|} tjdddtd dtd gdtd dtd ggdd}|j| ks4J |jdksDJ |j|ksTJ d S )	Nr   r   r   r   r   r    T©Ú	extension)r   r
   r   Zfrom_list_sympyr   r!   r"   r#   r$   r   Úalgebraic_fieldr   Úconvert)r%   r&   ÚKr'   r'   r(   Ú!test_DomainMatrix_from_list_sympy   s,    (""ÿü2þrS   c                     sª   t dtddidtddiddt} dtddidtddid}t dd|¡}|j| ks`J |jdksnJ |jtks|J tj tt	 fdd tt	 fd	d d S )
Nr   r   r   r   r*   r   c                      s    ddddt ddiiS )Nr   r   r   r   ©r   r'   ©Úfdsr'   r(   r-   ¡   r.   z3test_DomainMatrix_from_dict_sympy.<locals>.<lambda>c                      s    ddddt ddiiS )Nr   r   r   r   rT   r'   rU   r'   r(   r-   ¢   r.   )
r   r   r   r   Zfrom_dict_sympyr!   r#   r$   r   r   )r/   Z
sympy_dictr&   r'   rU   r(   Ú!test_DomainMatrix_from_dict_sympy   s    &rW   c                  C   sþ  t tdtddtdtddddt} t tddgddgg¡}|j| ksVJ |jdksdJ |jtksrJ t 	t
d¡}t | dt
d ¡| dt
d ¡d| dt
d ¡| dt
d ¡ddd|} tjtdt
d dt
d gdt
d dt
d ggdd}|j| ks$J |jdks4J |j|ksDJ tjttddtddgtd	dtd	dggd
d}ttddtddgtd	dtd	dggdt}tdkrÆ|j|ksÚJ n|j| ¡ ksÚJ |jdksêJ |jtksúJ d S )Nr   r   r*   r   r   r   TrN   r   r2   r3   r    )r   r
   r   Úfrom_Matrixr   r!   r#   r$   r   rP   r   rQ   r   r   r"   )r/   r&   rR   r%   r'   r'   r(   Útest_DomainMatrix_from_Matrix¥   s6    .$$ÿü2þ60
rY   c                  C   s   t tdtdgtdtdggdt} | | ks4J t tdtdgtdtdggdt}| |kshJ tdtdgtdtdgg}| |ksJ d S ©Nr   r   r   r   r   r,   ©r&   ÚBÚCr'   r'   r(   Útest_DomainMatrix_eqÅ   s    (( r^   c                  C   sÆ   t tdtdgtdtdggdt} t tdtdgtdtdggdt}t tdtdgtdtdggdt}t tdggdt}|  |¡du sJ |  |¡du s°J |  |¡du sÂJ d S )	Nr   r   r   r   r   r0   TF)r   r
   r   Zunify_eq)r&   ZB1ZB2ZB3r'   r'   r(   Útest_DomainMatrix_unify_eqÎ   s    (((r_   c                  C   s   t  g d¢¡\} }|tdtdtdtdgks6J | tksBJ t  dddtddg¡\} }|tdtdtdtddgksJ | tksJ d S )N)r   r   r   r   r   r   r   r   )r   Z
get_domainr
   r   r   )rR   Úitemsr'   r'   r(   Útest_DomainMatrix_get_domainØ   s    $&ra   c                  C   sf   t tdtdgtdtdggdt} |  t¡}|t tdtdgtdtdggdtksbJ d S rZ   )r   r
   Ú
convert_tor   ©r&   ÚAqr'   r'   r(   Útest_DomainMatrix_convert_toâ   s    (
re   c                  C   sº   ddgddgg} t | t ¡ t | tks,J t | tjddt | tksLJ t | tjddt | tkslJ td}d|g|d |d gg}t |t| jddt |t |¡ks¶J d S )Nr   r   r   r   T)ÚfieldÚx)r   r   Zchoose_domainr
   r   Z
frac_field)r&   rg   r\   r'   r'   r(   Útest_DomainMatrix_choose_domainè   s      rh   c                  C   s¶   t ddgddggt} | j ¡ }| j ¡ }| ||fD ]|}| ¡ \}}| |||j¡|ks\J dd |D }| ||t¡| 	t¡ksJ dd |D }| |||j¡d| ks4J q4d S )Nr   r   r   r   c                 S   s   g | ]}t |qS r'   ©r   ©r8   Úer'   r'   r(   r:   ú   r.   z0test_DomainMatrix_to_flat_nz.<locals>.<listcomp>c                 S   s   g | ]}d | qS )r   r'   rj   r'   r'   r(   r:   ü   r.   )
r   r
   r!   Úto_ddmÚto_sdmZ
to_flat_nzZfrom_flat_nzr$   r   rb   )ZAdmÚAddmÚAsdmr&   ZelemsÚdataZelemsqZelems2r'   r'   r(   Útest_DomainMatrix_to_flat_nzó   s    

rq   c                  C   sB   t tdtdgtdtdggdt} |  ¡ |  t¡ks>J d S rZ   )r   r
   Zto_sympyrb   r   rC   r'   r'   r(   Útest_DomainMatrix_to_sympy   s    (rr   c                  C   sd   t tdtdgtdtdggdt} |  ¡ }|t tdtdgtdtdggdtks`J d S rZ   )r   r
   Úto_fieldr   rc   r'   r'   r(   Útest_DomainMatrix_to_field  s    (rt   c                  C   sT   t tdtdgtdtdggdt} |  ¡ }|jdddddddksPJ d S )Nr   r   r   r   r   r*   )r   r
   Ú	to_sparser!   )r&   ZA_sparser'   r'   r(   Útest_DomainMatrix_to_sparse  s    (rv   c                  C   sl   t ddddddddt} |  ¡ }tddgddggdt}tdkrV|j|kshJ n|j| ¡ kshJ d S )Nr   r   r*   r   r   r   r    )r   r
   Úto_denser   r   r!   r"   )r&   ZA_denser%   r'   r'   r(   Útest_DomainMatrix_to_dense  s    rx   c                     sþ  t tdtdgtdtdggdt} t tdtdgtdtdggdt}|  | ¡| | fksfJ |  |¡||fks|J | | ¡||fksJ | |¡||fksšJ t dtdidtdiddtt tdtdgtdtdggdt  ¡fks
J    ¡  fks"J j dd	\}}|jtddgddggdt ¡ ks\J |jtddgddggdt ¡ ksJ j d
d	\}}|jtddiddiddtksŒJ |jtddddddddtksæJ tt	 fdd d S )Nr   r   r   r   r   r   r*   r2   r3   r1   c                      s   j  ddS )Nr5   r3   )Úunifyr'   ©ÚAdÚAsr'   r(   r-   1  r.   z)test_DomainMatrix_unify.<locals>.<lambda>)
r   r
   r   ry   r!   r   Úto_dfm_or_ddmr   r   r>   )ÚAzrd   ZBsZBdr'   rz   r(   Útest_DomainMatrix_unify  s"    (("(((&*r   c                  C   s   t tdtdgtdtdggdt} tddgddgg}|  ¡ |ksLJ |  ¡  ¡ |ks`J |  t¡ ¡ |ksvJ |  t td¡¡ ¡ |ksJ d S rZ   )	r   r
   r   Z	to_Matrixru   rb   r   rP   r   )r&   ZA_Matrixr'   r'   r(   Útest_DomainMatrix_to_Matrix4  s    (r   c                  C   sX   t tdtdgtdtdggdt} |  ¡ tdtdgtdtdggksTJ d S rZ   )r   r
   Zto_listrC   r'   r'   r(   Útest_DomainMatrix_to_list=  s    (r   c                  C   sT   t tdtdgtdtdggdt} |  ¡ tdtdtdtdgksPJ d S rZ   )r   r
   Úto_list_flatrC   r'   r'   r(   Útest_DomainMatrix_to_list_flatB  s    (r   c                  C   sT   t tdtdgtdtdggdt} |  ¡ tdtdtdtdgksPJ d S rZ   )r   r
   ZflatrC   r'   r'   r(   Útest_DomainMatrix_flatG  s    (r   c                  C   sê   t dt dt dt dg} tt dt dgt dt dggdt }t | dt ¡|ksZJ t | dt ¡|j ¡ ksvJ t | dt ¡|j ¡ ksJ || | ¡ |j	|j
¡ks°J tttj| dt  tttj| dt  tttj| dt  d S )Nr   r   r   r   r   ©r   r   )r
   r   Zfrom_list_flatr   r!   rl   r   rm   r   r#   r$   r   r   )Znumsr&   r'   r'   r(   Ú test_DomainMatrix_from_list_flatL  s    (r   c                  C   s¬   t tdtdgtdtdggdt} |  ¡ tdtddtdtdddksZJ t tdtdgtdtdggdt} |  ¡ dtdidtdidksšJ d S )Nr   r   r   r   r   r*   r   )r   r
   Zto_dodrC   r'   r'   r(   Útest_DomainMatrix_to_dod[  s    (2(r   c                  C   s   t dt ddt dt ddd} tddgddggt }t | dt ¡| ¡ ksVJ | | ¡|kshJ | | t¡| t¡ksJ d S )Nr   r   r*   r   r   r   )r
   r   r   Zfrom_dodru   Zfrom_dod_liker   rb   ©r`   r&   r'   r'   r(   Útest_DomainMatrix_from_dodb  s
    &r   c                  C   sô   t tdtdgtdtdggdt} |  ¡ tdtdtdtddksRJ t tdtdgtdtdggdt} tdtdd}|  ¡ |ksJ |  ¡  ¡ |ks°J |  ¡  ¡ |ksÄJ | j ¡  ¡ |ksÚJ | j ¡  ¡ |ksðJ d S )	Nr   r   r   r   r   )r<   r*   ©r   r   r0   r   ©r<   r0   )r   r
   Zto_dokrw   ru   r!   rl   rm   )r&   Zdokr'   r'   r(   Útest_DomainMatrix_to_dokj  s    (*(r   c                  C   s~   t dt dd} tddgddggt }t | dt ¡| ¡ ksBJ t | dt ¡|j ¡ ks^J t | dt ¡|j 	¡ kszJ d S )Nr   r   r   r   r   )
r
   r   r   Zfrom_dokru   r   r!   rl   r   rm   r   r'   r'   r(   Útest_DomainMatrix_from_dokv  s
    r   c                  C   s<   t tdtdgtdtdggdt} t| dks8J d S )Nr   r   r   r   r   z*DomainMatrix([[1, 2], [3, 4]], (2, 2), ZZ))r   r
   ÚreprrC   r'   r'   r(   Útest_DomainMatrix_repr~  s    (r   c                  C   sd   t tdtdgtdtdggdt} t tdtdgtdtdggdt}|  ¡ |ks`J d S rZ   )r   r
   Z	transpose)r&   ÚATr'   r'   r(   Útest_DomainMatrix_transpose  s    ((r   c                  C   sH   t tdggdt} t tdggdt}| jdu s6J |jdu sDJ d S )Nr   r0   r   FT)r   r
   Zis_zero_matrix©r&   r\   r'   r'   r(   Ú test_DomainMatrix_is_zero_matrix  s    r   c                  C   sp   t tdtdgtdtdggdt} t tdtdgtdtdggdt}| jdu s^J |jdu slJ d S )	Nr   r   r   r   r   r   TF)r   r
   Zis_upperr   r'   r'   r(   Útest_DomainMatrix_is_upper  s    ((r   c                  C   sp   t tdtdgtdtdggdt} t tdtdgtdtdggdt}| jdu s^J |jdu slJ d S )	Nr   r   r   r   r   r   TF)r   r
   Zis_lowerr   r'   r'   r(   Útest_DomainMatrix_is_lower  s    ((r   c                  C   st   t ddgddggt} t ddgddggt}| j|  ¡ j  u rHdu sNn J |j| ¡ j  u rjdu spn J d S )Nr   r   r   r   r   TF)r   r
   Zis_diagonalru   r   r'   r'   r(   Útest_DomainMatrix_is_diagonal  s    "r   c                  C   s~   t tdtdgtdtdggdt} t tdtdgtdtdgtdtdggdt}| jd	u slJ |jd
u szJ d S )Nr   r   r   r   r   rG   é   ©r   r   TF)r   r
   Z	is_squarer   r'   r'   r(   Útest_DomainMatrix_is_square¥  s    (6r   c                  C   sâ   t ddgddggt} |  ¡ |  ¡  ¡   krBtdtdgksHn J t ddgddgddggt} |  ¡ |  ¡  ¡   krtdtdgksn J t g d¢g d¢gt} |  ¡ |  ¡  ¡   krØtdtdgksÞn J d S )	Nr   r   r   r   rG   r   )r   r   r   )r   rG   r   )r   r
   Zdiagonalru   rC   r'   r'   r(   Útest_DomainMatrix_diagonal¬  s    22r   c                  C   sJ   t tdtdgtdtdgtdtdggdt} |  ¡ dksFJ d S )Nr   r   r   r   r   é   r   )r   r   ZrankrC   r'   r'   r(   Útest_DomainMatrix_rankµ  s    6r   c                     s0  t tdtdgtdtdggdt t tdtdgtdtdggdt}       ¡  krn| kstn J t tdtdgtdtdggdt ddgddggtt fdd	 tt fd
d	 t tdtdgtdtdggdtt tdtdggdtttfdd	 ttfdd	 ttfdd	 ttfdd	 t tdtdgtdtdggdtt tdtdgtdtdggdtt tdtdgtdtdggdt} |ksðJ  |ksJ ttfdd	 ttfdd	 t dtdidtdiddtt tdtdgtdtdggdt } }|t ddgddggdtksŠJ |jt	ddgddggdt 
¡ ksÎJ |t ddgddggdtksðJ |jt	ddgddggdt 
¡ ksJ ttfdd	 d S )Nr   r   r   r   r   r   r   c                      s     S rA   r'   r'   ©r&   ÚLr'   r(   r-   Á  r.   z'test_DomainMatrix_add.<locals>.<lambda>c                      s     S rA   r'   r'   r   r'   r(   r-   Â  r.   rH   c                      s     S rA   r'   r'   ©ÚA1ÚA2r'   r(   r-   Æ  r.   c                      s     S rA   r'   r'   r   r'   r(   r-   Ç  r.   c                      s
      ¡S rA   ©Úaddr'   r   r'   r(   r-   È  r.   c                      s
      ¡S rA   r¢   r'   r   r'   r(   r-   É  r.   c                      s
      ¡S rA   r¢   r'   ©rd   r~   r'   r(   r-   Ð  r.   c                      s
      ¡S rA   r¢   r'   r€   r'   r(   r-   Ñ  r.   r   r*   rG   c                      s
      ¡S rA   r¢   r'   rz   r'   r(   r-   Ü  r.   )r   r
   r£   r   r=   r   r   r   r!   r   r}   r   )r\   ZAsumÚAsdÚAdsr'   )r&   r    r¡   r{   rd   r|   r~   r   r(   Útest_DomainMatrix_addº  s:    (($((((("("("(r§   c                     sö  t tdtdgtdtdggdt t tdtdgtdtdggdt}       ¡  krn| kstn J t tdtdgtdtdggdt ddgddggtt fdd tt fd	d t tdtdgtdtdggdtt tdtdggd
tttfdd ttfdd ttfdd ttfdd t tdtdgtdtdggdtt tdtdgtdtdggdtt tdtdgtdtdggdt} |ksðJ  |ksJ ttfdd ttfdd t dtdidtdiddt}t tdtdgtdtdggdt}|| }|| }|t ddgddggdtksŠJ |jt	ddgddggdt 
¡ ksÎJ || ksÞJ |j|j ksòJ d S )Nr   r   r   r   r   r   c                      s     S rA   r'   r'   r   r'   r(   r-   æ  r.   z'test_DomainMatrix_sub.<locals>.<lambda>c                      s     S rA   r'   r'   r   r'   r(   r-   ç  r.   rH   c                      s     S rA   r'   r'   r   r'   r(   r-   ë  r.   c                      s     S rA   r'   r'   r   r'   r(   r-   ì  r.   c                      s
      ¡S rA   ©Úsubr'   r   r'   r(   r-   í  r.   c                      s
      ¡S rA   rš   r'   r   r'   r(   r-   î  r.   c                      s
      ¡S rA   rš   r'   r€   r'   r(   r-   õ  r.   c                      s
      ¡S rA   rš   r'   r€   r'   r(   r-   ö  r.   r*   éÿÿÿÿéüÿÿÿ)r   r
   r©   r   r=   r   r   r   r!   r   r}   )r\   ZAdiffr|   r{   r¥   rŠ   r'   )r&   r    r¡   rd   r~   r   r(   Útest_DomainMatrix_subß  s8    (($((((("("(r¬   c                  C   st   t tdtdgtdtdggdt} t tdtdgtdtd	ggdt}|  |  ¡   krj|kspn J d S )
Nr   r   r   r   r   rª   éþÿÿÿéýÿÿÿr«   )r   r
   Úneg)r&   ZAnegr'   r'   r(   Útest_DomainMatrix_neg  s    ((r°   c                     s  t tdtdgtdtdggdt t tdtdgtdtd	ggdt}       ¡  krn| kstn J t tdtdgtdtdggdt ddgddggtt fd
d tt fdd t tdtdgtdtdggdtt tdtdgtdtdggdtt tdtdgtdtd	ggdt} |ks^J  |kspJ ttfdd ttfdd t tdtdgtdtdggdt t tdtdgtdtdggdt}td} | |    kr"  |¡  kr"|ks(n J t tdtdgtdtdggdt t  dt¡}td} | |    kr  |¡ 	¡   kr|ks n J t dtdidtdiddt}t tdtdgtdtdggdt}|| }|| }|t ddgddggdtksJ |j
tddgddggdt ¡ ksDJ |t ddgddggdtksfJ |j
tddgddggdt ¡ ksJ d S )Nr   r   r   r   r   rE   é
   é   é   c                      s     S rA   r'   r'   r   r'   r(   r-     r.   z'test_DomainMatrix_mul.<locals>.<lambda>c                      s     S rA   r'   r'   r   r'   r(   r-     r.   c                      s
      ¡S rA   ©Úmatmulr'   r€   r'   r(   r-     r.   c                      s
      ¡S rA   rŽ   r'   r€   r'   r(   r-     r.   r   r   r   r*   )r   r
   rµ   r   r=   r   r   ÚmulÚzerosru   r!   r   r}   )r¡   ZAprodZAArg   r|   r{   r¥   rŠ   r'   )r&   rd   r~   r   r(   Útest_DomainMatrix_mul	  s<    (($((((((8(<"("("rž   c                  C   s    t tdtdgtdtdggdt} t tdtdgtdtdggdt}t tdtdgtdtdggdt}|  |¡|ksJ | | ¡|ksJ d S )Nr   r   r   r   r   r   )r   r
   Zmul_elementwiser[   r'   r'   r(   Ú!test_DomainMatrix_mul_elementwise0  s
    (((r¹   c                     sp  t  dt¡} t tdtdgtdtdggdt t tdtdgtdtd	ggdt}t td
tdgtdtdggdt} d   d¡  kr¢| ksšn J  d   d¡  krÆ ksÌn J  d   d¡  krê|ksðn J  d   d¡  kr|ksn J tt fdd tt fdd tt fdd t  dt¡ tt fdd d S )Nr   r   r   r   r   rE   r±   r²   r³   é%   é6   éQ   év   r   c                      s    t dd S ©Nr   r   rT   r'   rC   r'   r(   r-   B  r.   z'test_DomainMatrix_pow.<locals>.<lambda>c                      s    d S ©Nrª   r'   r'   rC   r'   r(   r-   C  r.   c                      s
      d¡S r¿   )Úpowr'   rC   r'   r(   r-   D  r.   ©r   r   c                      s    d S ©Nr   r'   r'   rC   r'   r(   r-   G  r.   )	r   Úeyer
   rÀ   r   r=   ÚNotImplementedErrorr·   r   )rÃ   r¡   ZA3r'   rC   r(   Útest_DomainMatrix_pow8  s    ((($$$(rÅ   c                  C   s   t ddgddggt} ttdt}t ddgdd	ggt}| t¡}|  ¡ ||fksXJ | jd
d||fkspJ | | |ksJ | || ksJ d S )NrH   ©r   r   rJ   ©r   rG   é<   é   é   r²   é   T©rQ   )r   r   r   r
   rb   Zclear_denoms©r&   Zden_ZZAnum_ZZAnum_Qr'   r'   r(   Útest_DomainMatrix_clear_denomsJ  s    
rÎ   c                  C   sr  t ddgddggt} t ddgddggt ¡ }t dd	gd
dggt}t dd	gd
dggt}|  ¡ ||fkspJ | jdd||fksJ ||  |ksJ | | ¡  ¡ | ks°J t g d¢g d¢g d¢gt} t g d¢g d¢g d¢gt ¡ }t g d¢g d¢g d¢gt}| t¡}|  ¡ ||fks(J | jdd||fksBJ ||  |ksTJ | | ¡  ¡ | ksnJ d S )NrH   rÆ   rJ   rÇ   r   r   rÊ   r   r   rG   r   TrÌ   )rH   rÆ   r   r   ©r   r   r   r   )rJ   rÇ   )r   r   )r   rE   )r   r   r   )r   r   r   )r   r   i€  )r   r   r   r   )éi   éT   éF   rÈ   )r   r   r
   ru   Zclear_denoms_rowwisers   Úinvrb   rÍ   r'   r'   r(   Ú&test_DomainMatrix_clear_denoms_rowwiseW  s      
rÔ   c                      sR  t ddgddggt   td¡t ddgddggttdfksFJ   td¡t ddgddggttdfksvJ   td¡t ddgddggttdfksŠJ t ddgddggt   td¡ tdfksÚJ   td¡  tdfksúJ t ddgddggt   tdd¡tdd	  tdfks<J tt fd
d d S )Nr   r   r   r   r   r   r­   r   rª   c                      s      td¡S ©Nr   )Úcancel_denomr
   r'   rC   r'   r(   r-   |  r.   z0test_DomainMatrix_cancel_denom.<locals>.<lambda>)r   r
   rÖ   r   r   ÚZeroDivisionErrorr'   r'   rC   r(   Útest_DomainMatrix_cancel_denomn  s    000 ,rØ   c                     sÈ   t ddgddggt   td¡\} }| t ddgddggtksFJ |t ddgddggtksdJ   td¡\} }| 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 d S )	Nr   r   r   r   r   r   c                      s      td¡S rÕ   )Úcancel_denom_elementwiser
   r'   rC   r'   r(   r-     r.   z<test_DomainMatrix_cancel_denom_elementwise.<locals>.<lambda>)r   r
   rÙ   r   r×   )ZnumersZdenomsr'   rC   r(   Ú*test_DomainMatrix_cancel_denom_elementwise  s    rÚ   c                  C   s\   t ddgddggt} t ddgddggt}td}|  ¡ |ksDJ |  ¡ ||fksXJ d S )Nr   r   r   r   r   r   )r   r
   ÚcontentZ	primitive)r&   ZA_primitiveZ	A_contentr'   r'   r(   Ú#test_DomainMatrix_content_primitive  s
    rÜ   c                     sŒ   t tdtdtdgtdtdtdgtdtdtdggdt} |  ¡ }| j}|j}| |||fD ] |  ¡ dgddggkshJ qhttdtdtdggt tt fdd d S )	Nr   r   r   r   r   ©r   r   c                      s      ¡ S rA   )Úsccr'   rC   r'   r(   r-     r.   z'test_DomainMatrix_scc.<locals>.<lambda>)r   r
   ru   r!   rÞ   r   r   r   )r{   r|   rn   ro   r'   rC   r(   Útest_DomainMatrix_scc  s    þþrß   c                     sì  t g dt} |  ¡ | dfks J t tdggdt} |  ¡ | dfksHJ t tdggdt} |  ¡ | dfkspJ t tdtdgtdtd	ggd
t} |  ¡ \}}|t tdtdgtdtdggd
tksÔJ |dksàJ t tdtdgtdtd	ggd
t} |  ¡ \}}|t tdtdgtdtdggd
tksFJ |dksTJ t tdtdgtdtd	ggd
t} |  ¡ \}}|t tdtdgtdtdggd
tksºJ |dksÈJ t tdtdgtdtd	ggd
t   ¡ \}}|t tdtdgtdtdggd
tks.J |dks<J d}t tdtdgtdtd	ggd
t |D ]V} j|d\}}|t tdtdgtdtdggd
tks²J |dkslJ qltt fdd tt fdd d S )Nr*   r'   r   r0   )r   r   r   r   r   r   )r   )ÚautoZGJr	   ZCDZGJ_denseZFF_denseZCD_dense©Úmethodc                      s    j ddS ©NZfoorá   )Úrrefr'   ©r~   r'   r(   r-   Ç  r.   z(test_DomainMatrix_rref.<locals>.<lambda>c                      s    j ddS rã   )Úrref_denr'   rå   r'   r(   r-   È  r.   )r   r   rä   r
   r   r>   )r&   ZArÚpivotsÚmethodsrâ   r'   rå   r(   Útest_DomainMatrix_rref¡  s<    (0(2(2(2(2ré   c                     s.  t tdtdtdgtdtdtdggdt} t tdtdgtdtdggdt}|  ¡ |kslJ t tdtdtdgtdtdtdggdt tt fdd	 t tdtdtdgtdtdtdggdtd
d} t tdtddtdtddddt}|  ¡ |ks*J d S )Nr   rª   r   r­   r   r   r   c                      s      ¡ S rA   )Úcolumnspacer'   rå   r'   r(   r-   Ñ  r.   z/test_DomainMatrix_columnspace.<locals>.<lambda>r1   r3   r*   )r   r   rê   r
   r   r   )r&   ZAcolr'   rå   r(   Útest_DomainMatrix_columnspaceË  s    4(48.rë   c                     sÖ   t tdtdtdgtdtdtdggdt} |  ¡ | ksDJ t tdtdtdgtdtdtdggdt tt fdd t tdtdtdgtdtdtdggdtd	d
} |  ¡ | ksÒJ d S )Nr   rª   r   r­   r   r   c                      s      ¡ S rA   )Úrowspacer'   rå   r'   r(   r-   Ý  r.   z,test_DomainMatrix_rowspace.<locals>.<lambda>r1   r3   )r   r   rì   r
   r   r   rC   r'   rå   r(   Útest_DomainMatrix_rowspaceØ  s    448rí   c                     sx  t tdtdgtdtdggdt t tdtdggdt}   ¡ | ksRJ t tdtdgtdtdggdt t tdtdggdt}   ¡ | ks€J tt fdd t tdtdgtdtdggdt t tdtdggdt}   ¡ \}}}|tdksJ | ¡ | ks*J | |¡| ks>J | ¡  ¡ |  ¡ ksXJ | ¡  |¡|  ¡ kstJ d S )	Nr   r   rª   rH   c                      s    j ddS )NT)Zdivide_last)Ú	nullspacer'   rC   r'   r(   r-   ì  r.   z-test_DomainMatrix_nullspace.<locals>.<lambda>r   r­   )	r   r   rî   r
   r   r   ræ   Znullspace_from_rrefru   )ZAnullZArrefÚdenrç   r'   rC   r(   Útest_DomainMatrix_nullspaceã  s    (((rð   c                     sê   t tdtdgtdtdggdt t tdgtdggdt} t ddggdt}t ddggdt}  | ¡||fks~J t tdgtdgtdggd	ttt fd
d t tdgtdggdttt fdd d S )Nr   r   r   r   rÁ   r   rH   r­   rI   c                      s
      ¡S rA   ©Ú_solver'   )r&   Úb3r'   r(   r-     r.   z)test_DomainMatrix_solve.<locals>.<lambda>c                      s
      ¡S rA   rñ   r'   )r&   Úbzr'   r(   r-     r.   )r   r   rò   r   r   r
   r   )ÚbZ
particularrî   r'   )r&   ró   rô   r(   Útest_DomainMatrix_solveù  s    ($rö   c                     s|  t g dt} |  ¡ | ksJ t tdtdgtdtdggdt} t tdtdgtddtddggdt}|  ¡ |ksJ t tdtdgtdtdggdtttfd	d
 t tdtdggdtttfdd
 t tdtdgtdtdggdt tt fdd
 td}t	ddgddgg| ¡ t	ddgddgg|ks^J tdttfdd
 d S )Nr<   r   r   r   r   r   r­   rª   c                      s      ¡ S rA   ©rÓ   r'   rå   r'   r(   r-     r.   z'test_DomainMatrix_inv.<locals>.<lambda>rH   c                      s      ¡ S rA   r÷   r'   ©ÚAnsr'   r(   r-     r.   r   c                      s      ¡ S rA   r÷   r'   )ÚAninvr'   r(   r-     r.   r   c                      s   t ddgddgg  ¡ S )Nr   r   r   r   )r   rÓ   r'   )ÚZ6r'   r(   r-     r.   )
r   r   rÓ   r
   r   r   r   r   r	   r   )r&   ZAinvZZ3r'   )rú   rù   r~   rû   r(   Útest_DomainMatrix_inv  s    (,((6rü   c                     s   t g dt} |  ¡ dksJ t dggdt} |  ¡ dks<J t tdtdgtdtdggdt} |  ¡ tdksxJ t tdtdtdgtdtdtdgtdtdtd	ggd
t} |  ¡ tdksÔJ t tdtdtdgtdtdtdgtdtdtd	ggd
t} |  ¡ tdks2J t tdtdggdt tt fdd t tdtdgtdtdggdt} |  ¡ tdksJ d S )Nr<   r   r0   r   r   r   r   r­   rG   rÝ   rª   r   rH   c                      s      ¡ S rA   )Údetr'   rø   r'   r(   r-   1  r.   z'test_DomainMatrix_det.<locals>.<lambda>)r   r
   rý   r   r   r   rC   r'   rø   r(   Útest_DomainMatrix_det   s    (HH(rþ   c                     s"  t tdtdgtdtdggdt} tdtdtdg}t tdtdgtdtd	ggdt}|  |¡|  krš|d
 | d  |d |   |d | d
   ks®n J |  g ¡|  | j| j¡ksÌJ |  tdg¡d|  d| j¡ ksòJ t tdtdggdt tt fdd d S )Nr   r   r   r   r   rË   é   é   é!   r   rH   c                      s      tdg¡S rÂ   )Ú	eval_polyr
   r'   ©ÚdM2r'   r(   r-   @  r.   z-test_DomainMatrix_eval_poly.<locals>.<lambda>)	r   r
   r  r·   r#   r$   rÃ   r   r   )ÚdMÚpÚresultr'   r  r(   Útest_DomainMatrix_eval_poly7  s    ((H&r  c                     s~  t tdtdgtdtdggdt} t tdgtdggdt tdtdtdg}t tdgtdggdt}|  | ¡|  krŸ|d	 | d    |d |     |d    ksÄn J t tdtdgtdtdggdtt tdgtdggdttt fd
d t tdtdggdtttfdd t tdgtdggdtttfdd d S )Nr   r   r   r   r   rÁ   é(   éW   r   c                      s     tdg ¡S rÂ   ©Úeval_poly_mulr
   r'   )rõ   ÚdM1r'   r(   r-   L  r.   z1test_DomainMatrix_eval_poly_mul.<locals>.<lambda>rH   c                      s     tdg ¡S rÂ   r  r'   )Úb1r  r'   r(   r-   N  r.   c                      s     tdg ¡S rÂ   r  r'   )Úbqr  r'   r(   r-   P  r.   )r   r
   r  r   r   r   r   r   )r&   r  r  r'   )rõ   r  r  r  r  r(   Útest_DomainMatrix_eval_poly_mulC  s    (N(r  c                    s  | |f}|   ¡ |  ¡   ¡ f}||fD ]Ø\ }} | || ksFJ ||f| | fg}  ¡|v slJ  jdd|v sJ   ¡|v sJ  j\}	}
|	|
krØ j|dd||fksÀJ   |¡||fksÖJ q(tt fdd tt fdd q(d S )Nrä   rá   Úcharpolyc                      s
      ¡S rA   ©Úsolve_den_charpolyr'   ©ZAirõ   r'   r(   r-   k  r.   z"_check_solve_den.<locals>.<lambda>c                      s    j ddS )Nr  rá   ©Ú	solve_denr'   r  r'   r(   r-   l  r.   )ru   r  Úsolve_den_rrefr#   r  r   r   )r&   rõ   ZxnumZxdenZcase1Zcase2Zxnum_iZb_iZanswersÚmÚnr'   r  r(   Ú_check_solve_denS  s    

r  c                  C   s  t tdtdgtdtdggdt} t tdgtdggdt}t tdgtdggdt}td	}t| ||| t tdtdtdgtdtdtdgtdtdtd
ggdt} t tdgtdgtdggdt}t tdgtdgtdggdt}td}t| ||| t tdgtdggdt} t tdgtdggdt}t tdggdt}td}t| ||| d S )Nr   r   r   r   r   rÁ   r   rª   r­   rG   rÝ   rI   r0   )r   r
   r  )r&   rõ   r  rï   r'   r'   r(   Útest_DomainMatrix_solve_deno  s*    (ýý$$r  c                      sÔ   t tdtdgtdtdggdt t tdgtdggdtt tdtdggdtttfdd	 t tdtdggdttt fd
d	 t tdgtdggdttt fdd	 d S )Nr   r   r   r   r   rÁ   rH   c                      s
      ¡S rA   r  r'   )r    rõ   r'   r(   r-     r.   z6test_DomainMatrix_solve_den_charpoly.<locals>.<lambda>c                      s
      ¡S rA   r  r'   ©r&   r  r'   r(   r-     r.   c                      s
      ¡S rA   r  r'   )r&   r  r'   r(   r-     r.   )r   r
   r   r   r   r   r   r'   r'   )r&   r    rõ   r  r  r(   Ú$test_DomainMatrix_solve_den_charpoly  s    (r  c                     sª   t tdtdgtdtdggdt t tdgtdggdttt fdd t td	gtdggdt}   ¡  | ksJ  jd
d| tdfksŠJ d S )Nr   r   r   r   r   rÁ   c                      s
      ¡S rA   r  r'   ©r&   rõ   r'   r(   r-     r.   z<test_DomainMatrix_solve_den_charpoly_check.<locals>.<lambda>r­   F)Úcheckr   )r   r
   r   r   Úadjugater  )ZadjAbr'   r  r(   Ú*test_DomainMatrix_solve_den_charpoly_check  s    (r!  c                      s  t tdtdggdt t tdgtdggdttt fdd tt fdd t tdtdggdt t tdtdggdttt fdd tt fd	d t tdtdgtd
tdggdt t tdtdggdttt fdd t tdggdt t tdggdttt fdd t tdgtdggdt t tdgtdggdttt fdd d S )Nr   r   rH   rÁ   c                      s
      ¡S rA   r  r'   r  r'   r(   r-     r.   z4test_DomainMatrix_solve_den_errors.<locals>.<lambda>c                      s
      ¡S rA   ©r  r'   r  r'   r(   r-     r.   c                      s
      ¡S rA   r  r'   r  r'   r(   r-   £  r.   c                      s
      ¡S rA   r"  r'   r  r'   r(   r-   €  r.   r   r   r   c                      s
      ¡S rA   r  r'   r  r'   r(   r-   š  r.   r0   c                      s    j ddS )Nr5   rá   r  r'   r  r'   r(   r-   ¬  r.   c                      s
      ¡S rA   r  r'   r  r'   r(   r-   °  r.   )r   r
   r   r   r   r   r'   r'   )r&   rõ   r  r(   Ú"test_DomainMatrix_solve_den_errors  s"    (r#  c                      sp   t tdtdgtdtdggdt t tdgtdggdttt fdd tt fdd d S )Nr   r   r   rÁ   c                      s
      ¡S rA   r  r'   r  r'   r(   r-   ¶  r.   zBtest_DomainMatrix_solve_den_rref_underdetermined.<locals>.<lambda>c                      s
      ¡S rA   r"  r'   r  r'   r(   r-   ·  r.   )r   r
   r   r   r'   r'   r  r(   Ú0test_DomainMatrix_solve_den_rref_underdetermined³  s    (r$  c                     s  t tdtdtdgtdtdtdgtdtdtd	ggt   ¡ \} }| tdtd
tdgkspJ   ¡ | d  d  | d  d   | d  d     krº  | ¡ksÀn J   ¡ |ksÐJ t tdtdtdgtdtdtd	ggt tt fdd d S )Nr   r   r   r   rG   r   rE   r   é	   éñÿÿÿéîÿÿÿr   c                      s      ¡ S rA   )Úadj_poly_detr'   rC   r'   r(   r-   Å  r.   z0test_DomainMatrix_adj_poly_det.<locals>.<lambda>)r   r
   r(  r   r  rý   r   r   )r  ZdetAr'   rC   r(   Útest_DomainMatrix_adj_poly_detº  s     þþPÿÿr)  c                  C   sp   t tdtdgtdtdggdt} td}t tdtdgtdtdggdt}|  ¡ ||fkslJ d S ©Nr   r   r   r   r   r­   r®   )r   r
   Úinv_den)r&   rï   r  r'   r'   r(   Útest_DomainMatrix_inv_denÈ  s    ((r,  c                  C   sd   t tdtdgtdtdggdt} t tdtdgtdtdggdt}|  ¡ |ks`J d S r*  )r   r
   r   )r&   r  r'   r'   r(   Útest_DomainMatrix_adjugateÏ  s    ((r-  c                  C   sl   t tdtdgtdtdggdt} t tdtdgtdtdggdt}|  ¡ |tdfkshJ d S r*  )r   r
   Zadj_det)r&   ZadjAr'   r'   r(   Útest_DomainMatrix_adj_detÕ  s    ((r.  c                     sÖ  t g dt   ¡   g fks"J t tdtdgtdtdggdt t tdtdgtdtdggdt} t tdtdgtdtdggdt}g }  ¡ | ||fksŽJ t tdtdgtdtdggdt t tdtdgtdtdggdt} t tdtdgtdtdggdt}d	g}  ¡ | ||fksJJ t tdtdgtdtdggdt t tdtdgtdtdggdt} t tdtdgtdtdggdt}g }  ¡ | ||fksÞJ t tdtdgtdtdggdt t tdtdgtdtdggdt} t tdtdgtdtdggdt}g }  ¡ | ||fksrJ t tdtdtdgtdtd
tdggdt t tdtdgtdtdggdt} t tdtdtdgtdtdtdggdt}g }  ¡ | ||fksJ t tdtdgtdtdgtd
tdggdt t tdtdtdgtdtdtdgtd
tdtdggdt} t tdtdgtdtdgtdtdggdt}g }  ¡ | ||fksîJ g d¢g d¢g d¢g d¢g g d¢g d¢g d¢g d¢g} g d¢g d¢g d¢g d¢g}dd }t | tdt t || tdt} t ||tdt}  ¡ | |g fksJ t tdtdgtdtdggdt tt fdd d S )Nr<   r   r   r   r   r   r   r­   r*   rG   r   r   r®   iúÿÿÿr   rÝ   )r   r   r   r   rÏ   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   c                    s    fdd| D S )Nc                    s   g | ]} fd d|D qS )c                    s   g | ]} |qS r'   r'   rj   ©rL   r'   r(   r:   	  r.   zEtest_DomainMatrix_lu.<locals>.<lambda>.<locals>.<listcomp>.<listcomp>r'   )r8   Úrowr/  r'   r(   r:   	  r.   z:test_DomainMatrix_lu.<locals>.<lambda>.<locals>.<listcomp>r'   )ÚrowsrL   r'   r/  r(   r-   	  r.   z&test_DomainMatrix_lu.<locals>.<lambda>)r   r   c                      s      ¡ S rA   )Úlur'   rC   r'   r(   r-     r.   )r   r   r2  r
   r   r   )r   ÚUZswapsZto_domr'   rC   r(   Útest_DomainMatrix_luÛ  s`    ((((((((((((4(46ýý6(r4  c                     sV  t g dt   }   ¡| ks&J t tdtdgtdtdggdt t tdgtdggdtt tdgtddggdt}   ¡| ksJ t tdtdgtdtdggdt t tdgtdggdtt tdgtddggdt}   ¡| ksJ t tdtdgtdtdggdt t tdgtdggdttt fd	d
 t tdtdgtdtdgtdtdggdt t tdgtdgtdggdtt tdgtddggdt}   ¡| ksôJ t tdtdgtdtdgtdtdggdt t tdgtdgtdggdttt fdd
 t tdtdggdt t tdggdttt fdd
 t tdtdgtdtdggdt t tdgtdggdttt fdd
 t tdtdgtdtdggdt t tdtdggdttt fdd
 d S )Nr<   r   r   r   r   r   rÁ   r   c                      s
      ¡S rA   ©Úlu_solver'   r  r'   r(   r-   '  r.   z,test_DomainMatrix_lu_solve.<locals>.<lambda>rG   r   r   rI   c                      s
      ¡S rA   r5  r'   r  r'   r(   r-   2  r.   rH   r0   c                      s
      ¡S rA   r5  r'   r  r'   r(   r-   7  r.   c                      s
      ¡S rA   r5  r'   r  r'   r(   r-   <  r.   c                      s
      ¡S rA   r5  r'   r  r'   r(   r-   A  r.   )	r   r   r6  r   r   rÄ   r
   r   r   ©rg   r'   r  r(   Útest_DomainMatrix_lu_solve  s:    (((6$6$((r8  c                     s€  t g dt} tdg}|  ¡ |ks&J |  ¡  ¡ |ks:J t dggdt} tdtdg}|  ¡ |ksjJ |  ¡  ¡ |ks~J t tdtdgtdtdggdt} tdtd	td
g}|  ¡ |ksÌJ |  ¡  ¡ |ksàJ t tdtdtdgtdtdtdgtdtdtdggdt} tdtdtdtdg}|  ¡ |ksVJ |  ¡  ¡ |kslJ t tdtdtdgtdtdtdgtdtdtdggdt} tdtdtd
tdg}|  ¡ |ksâJ |  ¡  ¡ |ksøJ tg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
t} t g d¢¡}|  ¡ |ks^J |  ¡  ¡ |kstJ t tdtdggdt tt fdd d S )Nr<   r   r0   rª   r   r   r   r   éûÿÿÿr­   rG   r   rE   r   r%  rÝ   r&  r'  r   )
é   r   rÉ   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )
éE   r   r   r   r   éV   r   r   r   r   )
é   r   r   r   r   r   r   r   r   r   )
r   r   r   é   r   r   r   r   r   r   )
r   r   r   r   r   r   r   é    r   r   )
r   r   r   r   rº   éC   r   r   r   r   )r   iïÿÿÿiê÷ÿÿr   i€:ôÿr   r   r   r   r   r   rH   c                      s      ¡ S rA   )r  r'   rø   r'   r(   r-   o  r.   z,test_DomainMatrix_charpoly.<locals>.<lambda>)	r   r
   r  ru   r   Úmapr   r   r   )r&   r  r'   rø   r(   Útest_DomainMatrix_charpolyD  sV    
(Hþþ÷	÷
rB  c                  C   sä   t g dt} |  ¡ g ksJ tdggt} |  ¡ tdtdgdfgksLJ tddgddggt} |  ¡ tdtdtdgdfgksJ tg d	¢g d
¢g d¢gt} |  ¡ tdtdgdftdtdtdgdfgksàJ d S )Nr<   r   rª   r   r   r   r9  r­   )r   r   r   )r   r   r   )r   r   r   )r   r
   Zcharpoly_factor_listr   rC   r'   r'   r(   Ú&test_DomainMatrix_charpoly_factor_listr  s    ÿ
ÿ
þrC  c                  C   sB   t  dt¡} | jt dt¡ks"J | jdks0J | jtks>J d S )Nr   rÝ   )r   rÃ   r   r!   r   r#   r$   rC   r'   r'   r(   Útest_DomainMatrix_eye  s    rD  c                  C   sB   t  dt¡} | jt dt¡ks"J | jdks0J | jtks>J d S )NrH   )r   r·   r   r!   r   r#   r$   rC   r'   r'   r(   Útest_DomainMatrix_zeros  s    rE  c                  C   sf   t  dt¡} tdkr,| jt dt¡ksFJ n| jt dt¡ ¡ ksFJ | jdksTJ | j	tksbJ d S )Nr   r    )
r   Zonesr   r   r!   r   r   r"   r#   r$   rC   r'   r'   r(   Útest_DomainMatrix_ones  s    rF  c                  C   s   t dtdidtdiddt} t  tdtdgt¡| ksBJ t dtdidtdiddt} t  tdtdgtd¡| ksJ d S )Nr   r   r   r   r*   r   )r   r   )r   r
   ZdiagrC   r'   r'   r(   Útest_DomainMatrix_diag  s    " "rG  c               	   C   s>  t tdtdgtdtdggdt} t tdtdgtdtd	ggdt}t td
tdgtdtdggdt}t tdtdtdtdgtdtdtdtd	ggdt}t tdtdtdtdtd
tdgtdtdtdtd	tdtdggdt}|  |¡|ks$J |  ||¡|ks:J d S )Nr   r   r   r   r   rG   r   rE   r   r%  r±   é   rË   ©r   r   )r   r   )r   r
   Zhstack©r&   r\   r]   ZABÚABCr'   r'   r(   Útest_DomainMatrix_hstack§  s"    (((þþ&&þþrL  c               	   C   sJ  t tdtdgtdtdggdt} t tdtdgtdtd	ggdt}t td
tdgtdtdggdt}t tdtdgtdtdgtdtdgtdtd	ggdt}t tdtdgtdtdgtdtdgtdtd	gtd
tdgtdtdggdt}|  |¡|ks0J |  ||¡|ksFJ d S )Nr   r   r   r   r   rG   r   rE   r   r%  r±   rH  rË   )r   r   )r   r   )r   r
   ZvstackrJ  r'   r'   r(   Útest_DomainMatrix_vstack¶  s.    (((üüúúrM  c                  C   sN   t tdtdggdt} t tdtdggdt}|  dd ¡|ksJJ d S )Nr   r   rH   r   c                 S   s   d|  S )Nr   r'   r7  r'   r'   r(   r-   Î  r.   z-test_DomainMatrix_applyfunc.<locals>.<lambda>)r   r
   Z	applyfuncr   r'   r'   r(   Útest_DomainMatrix_applyfuncË  s    rN  c                     s4  t tdtdgtdtdggdt ttdtd t}  |  t tddtdgtddtdggdtksvJ  d t tdtdgtdtdggdtksªJ d  t tdtdgtdtdggdtksÞJ  ttd	t t i dtksJ  ttdt  ksJ tt fd
d d S )Nr   r   r   r   r   r%  r   r   r   c                      s    d S ©Ng      ø?r'   r'   rC   r'   r(   r-   Ú  r.   z-test_DomainMatrix_scalarmul.<locals>.<lambda>)r   r
   r   r   r   r=   )Úlamdar'   rC   r(   Útest_DomainMatrix_scalarmulÑ  s    (844$rQ  c                     sP  t  tddgddgg¡ ttdtd t}  |  t tddtdddtdtdddddtkspJ ttdt} | t tdtddtdtddddtksžJ  d t tdtddtdtddddtksòJ  d t tddtddtddtddddtks2J tt fdd	 tt fd
d	 tt fdd	 t tdtdgtdtdggdt   	¡ d t tddtdgtddtdggdtksÎJ  d t tddtdgtddtdggdtksJ   	¡ tdd t tddtdgtddtdggdtksLJ d S )Nr   r   r   r   r*   r   r   c                      s    d S rÕ   r'   r'   rC   r'   r(   r-   ç  r.   z+test_DomainMatrix_truediv.<locals>.<lambda>c                      s    d S rO  r'   r'   rC   r'   r(   r-   è  r.   c                      s    t tdt S rÕ   )r   r
   r'   rC   r'   r(   r-   é  r.   r%  r   )
r   rX   r   r   r   r
   r   r×   r=   rs   )rP  rõ   r'   rC   r(   Útest_DomainMatrix_truedivÝ  s    @::@(>:rR  c                      s$  t tdtdtdgtdtdtdgtdtdtd	ggd
t  dd d df t tdgtdggdtks|J  dd df t tdggdtks€J  d dd df t tdggdtksÐJ  d dddf t tdtdgtdtdggdtksJ  d d df t tdgtdgtd	ggdtksLJ  dd d f t tdtdtd	ggdtksJ  d d dd d f t tdtdtd	gtdtdtdgtdtdtdggd
tksæJ tt fdd tt fdd  d ttdtks&J  d ttdtksBJ  d ttdtks^J  d ttdtkszJ tt fdd tt fdd tt fdd t ddtdiidt  d ttdtksäJ  d ttdtks J t dddiidt  dd df t dddiidtks>J tt fd d t dtdidtdid!dt  d dd df t i dtksJ  dd dd f t ddiddid"d
tksÌJ  dd dd f t dddiidtksúJ  dd dd f t i d#tks J d S )$Nr   r   r   r   rG   r   rE   r   r%  rÝ   r­   rÁ   r0   rª   r   r   rI   rÆ   c                      s    dd df S )Nr   r­   r'   r'   ©r  r'   r(   r-     r.   z+test_DomainMatrix_getitem.<locals>.<lambda>c                      s    d ddf S )Nr­   r   r'   r'   rS  r'   r(   r-     r.   rH   )r­   r   )r   r­   )rª   r®   c                      s    d S )NrÝ   r'   r'   rS  r'   r(   r-   
  r.   c                      s    d S )NrJ   r'   r'   rS  r'   r(   r-     r.   c                      s    d S )N)rª   r«   r'   r'   rS  r'   r(   r-     r.   )r±   r±   ©rG   rG   r<   c                      s    d S )N©r   r   r'   r'   rS  r'   r(   r-     r.   rI  )r   r   rU  )r   r
   r   Ú
IndexErrorr   r'   r'   rS  r(   Útest_DomainMatrix_getitemñ  sP    ýý4(,B:6ýý*"&4.rW  c                  C   sb   t dtdidtdiddt} |  dd¡}|tju s<J |  dd¡}|dkrZt|ts^J d S )Nr   r   r   rI  rT  r   )r   r
   Zgetitem_sympyr   ZZeroÚ
isinstancer   )r  Zval1Zval2r'   r'   r(   Útest_DomainMatrix_getitem_sympy  s
    "rY  c                     s  t tdtdtdgtdtdtdgtdtdtd	ggd
t} t tdtdgtdtd	ggdt}|  ddgddg¡|ksJ |  ¡  ddgddg¡| ¡ ks°J |  ddgddg¡|ksÌJ |  ¡  ddgddg¡| ¡ ksðJ t tdtdtdgtdtdtdgtdtdtdggd
t}|  g d¢g d¢¡|ksVJ |  ¡  g d¢g d¢¡| ¡ ks|J g g dfdgg dfg dgdfg}|D ]P\ }|   ¡t  |t¡ ¡ ksÌJ |  ¡   ¡t  |t¡ks J q t tdtdgtdtdggdtdgdgfdgdgfdgdgfdgdgfg}|D ]6\ tt fdd tt fdd qJd S )Nr   r   r   r   rG   r   rE   r   r%  rÝ   r   r   rª   )r   r   r   r<   r   r*   r®   c                      s      ¡S rA   )Úextractr'   ©Úcolsr  r1  r'   r(   r-   E  r.   z+test_DomainMatrix_extract.<locals>.<lambda>c                      s     ¡   ¡S rA   )ru   rZ  r'   r[  r'   r(   r-   F  r.   )r   r
   rZ  ru   r·   rw   r   rV  )r  r  ZdM3ÚemptyÚsizeZbad_indicesr'   r[  r(   Útest_DomainMatrix_extract%  sL    ýýþþ$$ýý&

ý"&(,r_  c                      s   t dtdidtdiddt td d<  t dtdidtdiddtksXJ  fddttfd	d
 ttfdd
 d S )Nr   r   r   rI  rT  r   c                    s   | | |f< d S rA   r'   )r9   ÚjÚvalrS  r'   r(   ÚsetitemM  s    z*test_DomainMatrix_setitem.<locals>.setitemc                      s    ddt ddS )Nr   r   ri   r'   ©rb  r'   r(   r-   O  r.   z+test_DomainMatrix_setitem.<locals>.<lambda>c                      s    t dddtdS rŸ   )Úslicer
   r'   rc  r'   r(   r-   P  r.   )r   r
   r   r=   rÄ   r'   r'   )r  rb  r(   Útest_DomainMatrix_setitemI  s    "*re  c                  C   s   dd l } tdtdidtdiddt}|  |  |¡¡|ksBJ ttdtdgtdtdggdt}|  |  |¡¡|ksJ d S )	Nr   r   r   r   rI  rT  r   r   )Úpickler   r
   ÚloadsÚdumps)rf  r  r'   r'   r(   Útest_DomainMatrix_picklingS  s
    "(ri  c                  C   s  t ddgddggt} |  ¡ \}}}}|j| jks6J |j| jksFJ |j| jksVJ |j| jksfJ |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 ddgddggtksÞJ | ¡ \}}| | ¡ |¡| |¡ |¡ksJ d S )Nr   r   r   r   r   r­   )r   r
   Zfflur#   r+  rµ   Zrmul)r&   ÚPr   ÚDr3  ZdiÚdr'   r'   r(   Útest_DomainMatrix_fflu[  s    rm  N)vZsympy.external.gmpyr   Zsympyr   r   r   r   r   r   r	   r
   r   r   r   Z!sympy.polys.matrices.domainmatrixr   r   r   Zsympy.polys.matrices.exceptionsr   r   r   r   r   r   r   Zsympy.polys.matrices.ddmr   Zsympy.polys.matrices.sdmr   Zsympy.testing.pytestr   r)   r@   rD   rM   rS   rW   rY   r^   r_   ra   re   rh   rq   rr   rt   rv   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r§   r¬   r°   rž   r¹   rÅ   rÎ   rÔ   rØ   rÚ   rÜ   rß   ré   rë   rí   rð   rö   rü   rþ   r  r  r  r  r  r!  r#  r$  r)  r,  r-  r.  r4  r8  rB  rC  rD  rE  rF  rG  rL  rM  rN  rQ  rR  rW  rY  r_  re  ri  rm  r'   r'   r'   r(   Ú<module>   sº    $)( 	


		%$'*
81.
,$
