o
    g*                     @   sZ  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g d
geeg dg d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g d g d!g d"g d#g d$geeg d%g d&g d'g d(g d)gefg
Zd*d+ Zd,d- Zd.d/ Zd0d1 Ze
jd2ed3d4 Ze
jd2ed5d6 Ze
jd2ed7d8 Ze
jd2ed9d: Ze
jd2ed;d< Ze
jd2ed=d> Ze
jd2ed?d@ ZdS )A    )ZZMatrix)DMDomainMatrix)DDM)SDMNc                 C      t | | S N)r   zerosto_dense)shapeK r   `/var/www/visachat/venv/lib/python3.10/site-packages/sympy/polys/matrices/tests/test_nullspace.py<lambda>       r   c                 C   r   r	   )r   eyer   )nr   r   r   r   r   	   r   zz_1)         )r   r   )r   r   zz_2)r   r   zz_3)r   r   zz_4)r   r   r   zz_5)r   r   zz_6r   r      zz_7zz_8)r   r   zz_9zz_10)
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   )
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   c                 C   sZ   t | tr	|  S t | trtt| | j| j S t | tr+tt| | j| j S J )z#Convert the answer to DomainMatrix.)	
isinstancer   r   r   listr   domainr   dict)Aansr   r   r   _to_DMi   s   


r+   c                 C   s   |   } | jr	| S g }t| jd D ])}tt| jd D ]}| ||f r8|| |ddf | ||f    nqJ qtj| S )z8Normalize the nullspace by the rightmost non-zero entry.r   r   N)to_fieldis_zero_matrixranger   reversedappendr   vstack)nullrowsijr   r   r   _divide_lastu   s   "
r6   c                 C   s&   t | |} |  \}}||ksJ dS )z/Check that the primitive of the answer matches.N)r+   	primitive)r2   null_anscont	null_primr   r   r   _check_primitive   s   
r;   c                 C   s"   t | |} t|}| |ksJ dS )zCheck the divided answer.N)r+   r6   )r2   r8   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   )	to_Matrix	nullspacer   hstackr
   colsto_DMr,   r   	transposer=   )namer)   A_nullA_null_colsA_null_foundr   r   r   test_Matrix_nullspace   s   rH   c                 C   &   |   }|jdd}t|| d S NT)divide_last)r,   r   r?   r=   rD   r)   rE   rG   r   r   r   test_dm_dense_nullspace      rM   c                 C   rI   rJ   )r,   	to_sparser?   r=   rL   r   r   r   test_dm_sparse_nullspace   rN   rP   c                 C   &   |   }| \}}t|| d S r	   )r,   to_ddmr?   r=   rD   r)   rE   rG   _r   r   r   test_ddm_nullspace   rN   rU   c                 C   rQ   r	   )r,   to_sdmr?   r=   rS   r   r   r   test_sdm_nullspace   rN   rW   c                 C      |  }| }t|| d S r	   )r   r?   r;   rL   r   r   r    test_dm_dense_nullspace_fracfree      rY   c                 C   rX   r	   )rO   r?   r;   rL   r   r   r   !test_dm_sparse_nullspace_fracfree   rZ   r[   )sympyr   r   sympy.polys.matricesr   r   sympy.polys.matrices.ddmr   sympy.polys.matrices.sdmr   pytestr
   r   NULLSPACE_EXAMPLESr+   r6   r;   r=   markparametrizerH   rM   rP   rU   rW   rY   r[   r   r   r   r   <module>   s    M





