o
    GZh*                     @   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   X/var/www/auris/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   Zzz_1)         )r   r   )r   r   Zzz_2)r   r   Zzz_3)r   r   Zzz_4)r   r   r   Zzz_5)r   r   Zzz_6r   r      Zzz_7Zzz_8)r   r   Zzz_9Z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)AZ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_fieldZis_zero_matrixranger   reversedappendr   Zvstack)nullrowsijr   r   r   _divide_lastu   s   "
r)   c                 C   s&   t | |} |  \}}||ksJ dS )z/Check that the primitive of the answer matches.N)r    Z	primitive)r%   null_anscontZ	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    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   r3   c                 C   &   |   }|jdd}t|| d S NT)Zdivide_last)r!   r   r.   r-   r0   r   r1   r2   r   r   r   test_dm_dense_nullspace      r7   c                 C   r4   r5   )r!   	to_sparser.   r-   r6   r   r   r   test_dm_sparse_nullspace   r8   r:   c                 C   &   |   }| \}}t|| d S r	   )r!   Zto_ddmr.   r-   r0   r   r1   r2   _r   r   r   test_ddm_nullspace   r8   r>   c                 C   r;   r	   )r!   Zto_sdmr.   r-   r<   r   r   r   test_sdm_nullspace   r8   r?   c                 C      |  }| }t|| d S r	   )r   r.   r,   r6   r   r   r    test_dm_dense_nullspace_fracfree      rA   c                 C   r@   r	   )r9   r.   r,   r6   r   r   r   !test_dm_sparse_nullspace_fracfree   rB   rC   )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parametrizer3   r7   r:   r>   r?   rA   rC   r   r   r   r   <module>   s    M





