a
    kº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'   úZ/var/www/auris/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&   ÚelemsÚdataZelemsqZelems2r'   r'   r(   Útest_DomainMatrix_to_flat_nzó   s    

rr   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    (rs   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    (ru   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    (rw   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    ry   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   rz   r!   r   Úto_dfm_or_ddmr   r   r>   )ÚAzrd   ZBsZBdr'   r{   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_Matrixrv   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   )Ú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_dodrv   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_dokrx   rv   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_dokrv   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_diagonalrv   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diagonalrv   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'   r{   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Úzerosrv   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
   rv   Zclear_denoms_rowwisert   Ú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
   rv   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_rrefrv   )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.   )rv   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    ((r0  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   Úrowr1  r'   r(   r:   	  r.   z:test_DomainMatrix_lu.<locals>.<lambda>.<locals>.<listcomp>r'   )ÚrowsrL   r'   r1  r(   r-   	  r.   z&test_DomainMatrix_lu.<locals>.<lambda>)r   r   c                      s      ¡ S rA   )Úlur'   rC   r'   r(   r-     r.   )r   r   r4  r
   r   r   )r    ÚUZswapsZto_domr'   rC   r(   Útest_DomainMatrix_luÛ  s`    ((((((((((((4(46ýý6(r6  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   r7  r'   r   r'   r(   r-   2  r.   rH   r0   c                      s
      ¡S rA   r7  r'   r   r'   r(   r-   7  r.   c                      s
      ¡S rA   r7  r'   r   r'   r(   r-   <  r.   c                      s
      ¡S rA   r7  r'   r   r'   r(   r-   A  r.   )	r   r   r8  r   r   rÆ   r
   r   r   ©rg   r'   r   r(   Útest_DomainMatrix_lu_solve  s:    (((6$6$((r:  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  rv   r   Úmapr   r   r   )r&   r  r'   rú   r(   Útest_DomainMatrix_charpolyD  sV    
(Hþþ÷	÷
rD  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   r;  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    ÿ
ÿ
þrE  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    rF  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    rG  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    rH  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    " "rI  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"    (((þþ&&þþrN  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³   rJ  rÍ   )r   r   )r   r   )r   r
   ZvstackrL  r'   r'   r(   Útest_DomainMatrix_vstack¶  s.    (((üüúúrO  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'   r9  r'   r'   r(   r-   Î  r.   z-test_DomainMatrix_applyfunc.<locals>.<lambda>)r   r
   Z	applyfuncr   r'   r'   r(   Útest_DomainMatrix_applyfuncË  s    rP  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$rS  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 rQ  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=   rt   )rR  r÷   r'   rC   r(   Útest_DomainMatrix_truedivÝ  s    @::@(>:rT  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'   rU  r'   r(   r-     r.   rH   )r¯   r   )r   r¯   )r¬   r°   c                      s    d S )Nrß   r'   r'   rU  r'   r(   r-   
  r.   c                      s    d S )NrJ   r'   r'   rU  r'   r(   r-     r.   c                      s    d S )N)r¬   r­   r'   r'   rU  r'   r(   r-     r.   )r³   r³   ©rG   rG   r<   c                      s    d S )N©r   r   r'   r'   rU  r'   r(   r-     r.   rK  )r   r   rW  )r   r
   r   Ú
IndexErrorr   r'   r'   rU  r(   Útest_DomainMatrix_getitemñ  sP    ýý4(,B:6ýý*"&4.rY  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   rK  rV  r   )r   r
   Zgetitem_sympyr   ZZeroÚ
isinstancer   )r  Zval1Zval2r'   r'   r(   Útest_DomainMatrix_getitem_sympy  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} 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  r3  r'   r(   r-   E  r.   z+test_DomainMatrix_extract.<locals>.<lambda>c                      s     ¡   ¡S rA   )rv   r\  r'   r]  r'   r(   r-   F  r.   )r   r
   r\  rv   r¹   rx   r   rX  )r  r  ZdM3ÚemptyÚsizeZbad_indicesr'   r]  r(   Útest_DomainMatrix_extract%  sL    ýýþþ$$ýý&

ý"&(,ra  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   rK  rV  r   c                    s   | | |f< d S rA   r'   )r9   ÚjÚvalrU  r'   r(   ÚsetitemM  s    z*test_DomainMatrix_setitem.<locals>.setitemc                      s    ddt ddS )Nr   r   ri   r'   ©rd  r'   r(   r-   O  r.   z+test_DomainMatrix_setitem.<locals>.<lambda>c                      s    t dddtdS rÀ   )Úslicer
   r'   re  r'   r(   r-   P  r.   )r   r
   r   r=   rÆ   r'   r'   )r  rd  r(   Útest_DomainMatrix_setitemI  s    "*rg  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   rK  rV  r   r   )Úpickler   r
   ÚloadsÚdumps)rh  r  r'   r'   r(   Útest_DomainMatrix_picklingS  s
    "(rk  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    ÚDr5  ZdiÚdr'   r'   r(   Útest_DomainMatrix_fflu[  s    ro  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   rr   rs   ru   rw   ry   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/  r0  r6  r:  rD  rE  rF  rG  rH  rI  rN  rO  rP  rS  rT  rY  r[  ra  rg  rk  ro  r'   r'   r'   r(   Ú<module>   sº    $)( 	


		%$'*
81.
,$
