U
    @f*                     @   s   d dl mZmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
Z
dd Zdd Zd	ed
ddggeedd
d gdd d
ggefdedeedefdedeedefdedeedefdedeedefded
dgddggeedefded
d
gd
d
ggeedd
ggefded
gd
ggeedefded
d
ggeedd
ggefded d d d d d
d d d d g
d
d d d d d d
d d d g
d d
d d d d d d
d d g
d d d d
d d d d d
d g
d d d d d
d d d d d
g
geed d d
d d d d d d d g
dd d d d d d
d d d g
d dd d d d d d
d d g
d d d dd d d d d
d g
d d d d dd d d d d
g
gefg
Zdd  Zd!d" Zd#d$ Zd%d& Ze
jd'ed(d) Ze
jd'ed*d+ Ze
jd'ed,d- Ze
jd'ed.d/ Ze
jd'ed0d1 Ze
jd'ed2d3 Ze
jd'ed4d5 ZdS )6    )ZZMatrix)DMDomainMatrix)DDM)SDMNc                 C   s   t | | S N)r   zerosto_dense)shapeK r   M/tmp/pip-unpacked-wheel-6uje5nh9/sympy/polys/matrices/tests/test_nullspace.py<lambda>       r   c                 C   s   t | | S r   )r   eyer
   )nr   r   r   r   r   	   r   Zzz_1         Zzz_2)r   r   Zzz_3)r   r   Zzz_4)r   r   Zzz_5)r   r   Zzz_6   Zzz_7Zzz_8)r   r   Zzz_9Zzz_10c                 C   sb   t | tr|  S t | tr4tt| | j| j S t | trVtt| | j| j S ds^t	dS )z#Convert the answer to DomainMatrix.FN)

isinstancer   r
   r   listr   domainr   dictAssertionError)AZansr   r   r   _to_DMi   s    


r    c                 C   s   |   } | jr| S g }t| jd D ]V}tt| jd D ]6}| ||f r:|| |ddf | ||f    q$q:ds$tq$tj| S )z8Normalize the nullspace by the rightmost non-zero entry.r   r   NF)	to_fieldZis_zero_matrixranger   reversedappendr   r   Zvstack)nullZrowsijr   r   r   _divide_lastu   s    "
r(   c                 C   s&   t | |} |  \}}||ks"tdS )z/Check that the primitive of the answer matches.N)r    Z	primitiver   )r%   null_ansZcontZ	null_primr   r   r   _check_primitive   s    
r*   c                 C   s"   t | |} t|}| |kstdS )zCheck the divided answer.N)r    r(   r   )r%   r)   Znull_ans_normr   r   r   _check_divided   s    
r+   zname, A, A_nullc                 C   sT   |  }| }|r tj| }nt|jd}|   }|	 }t
|| d S )Nr   )Z	to_Matrix	nullspacer   Zhstackr	   colsZto_DMr!   r
   Z	transposer+   )namer   A_nullZA_null_colsA_null_foundr   r   r   test_Matrix_nullspace   s    r1   c                 C   s&   |   }|jdd}t|| d S NT)Zdivide_last)r!   r
   r,   r+   r.   r   r/   r0   r   r   r   test_dm_dense_nullspace   s    r4   c                 C   s&   |   }|jdd}t|| d S r2   )r!   	to_sparser,   r+   r3   r   r   r   test_dm_sparse_nullspace   s    r6   c                 C   s&   |   }| \}}t|| d S r   )r!   Zto_ddmr,   r+   r.   r   r/   r0   _r   r   r   test_ddm_nullspace   s    r9   c                 C   s&   |   }| \}}t|| d S r   )r!   Zto_sdmr,   r+   r7   r   r   r   test_sdm_nullspace   s    r:   c                 C   s   |  }| }t|| d S r   )r
   r,   r*   r3   r   r   r    test_dm_dense_nullspace_fracfree   s    r;   c                 C   s   |  }| }t|| d S r   )r5   r,   r*   r3   r   r   r   !test_dm_sparse_nullspace_fracfree   s    r<   )Zsympyr   r   Zsympy.polys.matricesr   r   Zsympy.polys.matrices.ddmr   Zsympy.polys.matrices.sdmr   Zpytestr	   r   ZNULLSPACE_EXAMPLESr    r(   r*   r+   markZparametrizer1   r4   r6   r9   r:   r;   r<   r   r   r   r   <module>   s   
M





