
    oVh                         d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlmZmZ d dlmZmZ d dlmZmZ d Zd Zd	 Zy
)    )raises)Symbol)invariant_factorssmith_normal_formsmith_normal_decompis_smith_normal_formhermite_normal_form_hermite_normal_form_hermite_normal_form_modulo_D)ZZQQ)DomainMatrixDM)DMDomainErrorDMShapeErrorc                     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              g} 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              g}| D ]  }t        |      du rJ  |D ]  }t        |      du rJ  y )Nr            TF)r   r   r   )snf_examplesnon_snf_examplesms      [/home/dcms/DCMS/lib/python3.12/site-packages/sympy/polys/matrices/tests/test_normalforms.pytest_is_smith_normal_formr      s     	QFQFR 
QFQFR 
QFQFR 
QFQFR 	L 	QFQFR 
QFQFR 
QFQFR   /#A&$.../  0#A&%///0    c                  
   t        g dg dg dg dgt              } t        g dg dg dg dgt              }t        g d	g d
g dg dgt              }t        g dg dg dg dgt              }t        |       j                         |k(  sJ t	        |       |||fk(  sJ t        |      sJ ||| z  |z  k(  sJ t        j                  dt              j                         }t        j                  dt              j                         }t        j                  dt              j                         }t        dggt              }t        |      |j                         k(  sJ t        |      |j                         k(  sJ t        |      |j                         k(  sJ t        |      |j                         k(  sJ t	        |      |||fk(  sJ t	        |      |||fk(  sJ t	        |      |||fk(  sJ t	        |      |||fk(  sJ t        d      t        dz
  ddgddgddggt                 } | j                  j                  d   }t        |       d|dz
  |dz  dz
  fk(  sJ t        g dt              }	t        g g gdt              }
t        |	      j                         |	k(  sJ t        |
      j                         |
k(  sJ t        t        ddggt                    j                         t        ddggt              k(  sJ t        t        ddggt                    j                         t        ddggt              k(  sJ t        t        dgdggt                    j                         t        dgdggt              k(  sJ t	        t        ddggt                    t        ddggt              t        dggt              t        ddgddggt              fk(  sJ t	        t        dgdggt                    t        dgdggt              t        ddgddggt              t        dggt              f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        g d#g dg d$g d%gt              }t        |       j                         |k(  sJ t	        |       |||fk(  sJ t        |      sJ ||| z  |z  k(  sJ t        t        fd&       y )'N)            )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   xr(   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                  @    t        t        dggt                        S Nr   )r   r   r   )r+   s   r   <lambda>z#test_smith_normal.<locals>.<lambda>w   s    0aSE2a51AB r   )r   r   r   to_denser   r   r   zeros	to_sparser   r   domaingensr   r   
ValueError)r   smfstm00m01m10i11dxzrzcsnfr+   s               @r   test_smith_normalr@   (   s   
	 		A 	 	C 		 		A 		 		A Q((*c111q!c1a[000$$$!a%!)


VR
(
1
1
3C


VR
(
1
1
3C


VR
(
1
1
3C
qcUB-CS!S]]_444S!S]]_444S!S]]_444S!S]]_444s#S#666s#S#666s#S#666s#S#666sA
QqS1bM1bM"qMqE	#A 
q	BQAr!tRU1W#5555	b&"	%B	r2h	+BR ))+r111R ))+r111R!Q"-.779R!Q"=MMMMR!R	2./88:b1a&2>NNNNR!rdR01::<QC!:r@RRRRrAr7)R01
QF8R"rdVR."q!fq!f-=r*B6    rA3+r23
QC!:rBB!Q0"5rA3%}8    lL,7
<A
lL,7
<C
Iy),b1A
M<ErJAQ((*c111q!c1a[000$$$!a%!)
:BCr   c                     t        g dg dg dgt              t        g dg dg dgt              } t              | k(  sJ t        t        d            | k(  sJ t        t        d      d	
      | k(  sJ j                         t        g dg dg dg dg dgt              } t              | k(  sJ t	        t
        fd       t	        t        fd       t        g dg dg dgt              t        g dg dg dgt              } t              | k(  sJ t        t        d            | k(  sJ t        t        d      d	
      | k(  sJ t        g dg dg dgt              t        ddgddgddggt              } t              | k(  sJ t        ddgddgddggt              t        dgdgdggt              } t              | k(  sJ t        ddgddggt              t        ddgddggt              } t              | k(  sJ t        t        d      ggdt              t	        t        fd       t	        t        fd       t	        t        fd       y ) N)r            )   )r            +   )         %   /   )r   r   r   )r   r   r   )r   r   r   r   )DT)rO   
check_rank)rM   r   rG   )   iq   )0   r      c                  .    t         t        d            S N`   r   r   r   s   r   r.   z%test_hermite_normal.<locals>.<lambda>   s    !>q"R&!I r   c                  .    t         t        d            S rV   )r   r   rY   s   r   r.   z%test_hermite_normal.<locals>.<lambda>   s    "?2b6"J r   )r    r$   D   t      )r   r   r   r    )r&   r    r   r'   r   )-   $         r!   )rJ   r   r   r   r      r   r!   r   rB   r*   )r   r   c                      t               S N)r	   rY   s   r   r.   z%test_hermite_normal.<locals>.<lambda>   s    "5a"8 r   c                      t               S rd   )r
   rY   s   r   r.   z%test_hermite_normal.<locals>.<lambda>   s    "6q"9 r   c                  .    t         t        d            S r-   rX   rY   s   r   r.   z%test_hermite_normal.<locals>.<lambda>   s    "?2a5"I r   )	r   r   r	   	transposer   r   r   r   r   )hnfr   s    @r   test_hermite_normalri   z   s;   
 35HI2NA
iI.
3Cq!S(((qBqE*c111qBqEd;sBBB	A
k>;	9Mr
RCq!S(((
<IJ
=JK
!#68KLbQA
iI.
3Cq!S(((qBqE*c111qBqEd;sBBB
2ODbIA
r1g1v1v&
+Cq!S(((
QFQFQF#R(A
qcA3_b
!Cq!S(((
RGaVb!A
q!fq!fr
"Cq!S(((r!ugY+A
=89
=9:
=IJr   N)sympy.testing.pytestr   sympy.core.symbolr    sympy.polys.matrices.normalformsr   r   r   r   r	   r
   r   sympy.polys.domainsr   r   sympy.polys.matricesr   r   sympy.polys.matrices.exceptionsr   r   r   r@   ri    r   r   <module>rq      s8    ' $   ' 1 G0,ODd"Kr   