
    -iib#                         d dl mZmZ d dlZd dlZd dlmZ d dlmZ	 d dl
mZ d dlmZ d dlmZmZ d dlmZ d	 Z ee           G d
 d                      ZdS )    )productpermutationsN)assert_allclose)raises)orthogonal_procrustes)matrix)make_xp_test_casexp_assert_close)skip_xp_invalid_argc                 >    |                     | d          }| |z
  |fS )Nr   )axis)mean)Axpmus      h/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/linalg/tests/test_procrustes.py	_centeredr      s%    			Br62:    c                       e Zd Zd Zd Zd Zd Z e            d             Zd Z	d Z
d Zd	 Zd
 Zej                            dg d          d             ZdS )TestOrthogonalProcrustesc                    t           j                            d          }|                    |                    d                    }|                    |                    d                    }t          t          t          ||           d S )N     )nprandomRandomStateasarrayrandnassert_raises
ValueErrorr   )selfr   rngr   Bs        r   )test_orthogonal_procrustes_ndim_too_smallzBTestOrthogonalProcrustes.test_orthogonal_procrustes_ndim_too_small   sh    i##D))JJsyy||$$JJsyy||$$j"7A>>>>>r   c                     t           j                            d          }d}t          |d          D ][\  }}|                     |j        |           }|                     |j        |           }t          t          t          ||           \d S )Nr   ))r   r   )r      r&   r   r&   r&      )	r   r   r   r   r   r   r   r    r   )r!   r   r"   shapesabr   r#   s           r   )test_orthogonal_procrustes_shape_mismatchzBTestOrthogonalProcrustes.test_orthogonal_procrustes_shape_mismatch   s    i##D))1 ++ 	C 	CDAq

939a=))A

939a=))A*&;QBBBB	C 	Cr   c           
         t           j                            d          }d\  }}|                    ||          }|                    ||          }t           j        t           j         t           j        fD ]}|                                }||d<   |                                }	||	d<   ||	f||f||	ffD ]G\  }
}t          t          t          |
                    |
          |
                    |                     Hd S )Nr   )r)   r   )   r)   )r   r   r   r   infnancopyr   r    r   r   )r!   r   r"   mnA_goodB_good	bad_valueA_badB_badr   r#   s               r   0test_orthogonal_procrustes_checkfinite_exceptionzITestOrthogonalProcrustes.test_orthogonal_procrustes_checkfinite_exception!   s    i##D))11a1a"&"&0 	- 	-IKKMME#E$KKKMME#E$K %5&/E5>J - -1j*?A jjmm- - - --	- 	-r   c           
         t           j                            d          }d\  }}t          d          D ]}|                    |                    ||                    }|                    |                    ||                    }t          ||          \  }}	t          j        |                    d                    D ]{}
t          j        |                    d                    D ]Q}t          ||                    |
          z  ||                    |          z            \  }}	t          ||           R|d S )Nr   r'   r   )	r   r   r   ranger   r   r   squarer
   )r!   r   r"   r3   r4   iA_origB_origR_origsA_scaleB_scaleRs                r   +test_orthogonal_procrustes_scale_invariancezDTestOrthogonalProcrustes.test_orthogonal_procrustes_scale_invariance/   s+   i##D))1q 	/ 	/AZZ		!Q00FZZ		!Q00F-ff==IFA9SYYq\\22 / /!y166 / /G0"**W:M:M1M17"**W:M:M1MO ODAq#Av....//		/ 	/r   c                 (   t           j                            d          }dD ]\  }}|                    ||          }|                    ||          }||                                t          |          f}||                                t          |          f}t          ||          \  }}	|                    |          }
t          ||          D ]=\  }}t          ||          \  }}	|                    |          }t          ||
           >d S )Nr   )   r&   r(   )r&   rI   )
r   r   r   r   tolistr   r   dotr   r   )r!   r"   r3   r4   A_arrB_arrAsBsR_arrrB   AR_arrr   r#   rE   ARs                  r   +test_orthogonal_procrustes_array_conversionzDTestOrthogonalProcrustes.test_orthogonal_procrustes_array_conversion<   s   i##D)), 
	, 
	,DAqIIaOOEIIaOOE7B7B,UE::HE1YYu%%FB , ,1,Q221YYq\\F++++,
	, 
	,r   c           	         t           j                            d          }dD ]\  }}|                    |                    ||                    }|                    |                    ||                    }|j                            |j        |z             \  }}t          |j        	                    |          |j                   ||j        z  }	t          |	|          \  }
}t          |j        	                    |
          |
j                   t          |	|
z  |           |	d|                    |                    ||                    z  z   }t          ||          \  }}t          |j        	                    |          |j                   ||
z  }||z  }|j                            ||z
  d          }|j                            ||z
  d          }|                    ||k               sJ d S )Nr   rH   g{Gz?fro)ord)r   r   r   r   r   linalgeighTr
   invr   matrix_normall)r!   r   r"   r3   r4   r#   XwVr   rE   rB   A_perturbedR_primenaive_approxoptim_approxnaive_approx_erroroptim_approx_errors                     r   test_orthogonal_procrustesz3TestOrthogonalProcrustes.test_orthogonal_procrustesK   s   i##D)), 	C 	CDAq

399Q??++A 

399Q??++A9>>!#'**DAqBIMM!,,ac222ACA(A..DAqBIMM!,,ac222AE1%%%dRZZ		!Q%@%@@@K /{A>>JGQBIMM'22GI>>>&?L&0L!#!6!6|a7GU!6!S!S!#!6!6|a7GU!6!S!S66,/AABBBBBB9	C 	Cr   c                    |                     ddgddgddgddgg|j                  }|                     ddgddgddgddgg|j                  }t          ||          \  }}t          ||          \  }}t          ||          \  }}	|	|j                            |          dz  z  }
|
|z  |z  |z   }t          ||d	
           d S )Nr   r)   dtyper/   r      :0yE>atolr   float64r   r   rW   r[   r
   )r!   r   r?   r@   r   A_mur#   B_murE   rB   scaleB_approxs               r   (test_orthogonal_procrustes_exact_examplezATestOrthogonalProcrustes.test_orthogonal_procrustes_exact_examplek   s     b!Wr1gAwQ@
SSaVaVaWq!f=RZPPFB''4FB''4$Q**1BI))!,,a//19q=4'&t444444r   c                    |                     ddgddgddgddgg|j                  }|                     ddgddgdd	gd
dgg|j                  }t          ||          \  }}t          ||          \  }}t          ||          \  }}	|	|j                            |          dz  z  }
|
|z  |z  |z   }|                     ddgddgddgddgg|j                  }t          ||d           |                     d|j                  d         }|j                            ||z
            |j                            |          z  dz  }t          ||           t          ||          \  }}	|	|j                            |          dz  z  }
|
|z  |z  |z   }|j                            ||z
            |j                            |          z  dz  }t          ||           d S )Nrh   r   ri   r)   rj   (   r/   r   irl      ii   rm   rn   g? rp   )r!   r   r?   r@   r   rr   r#   rs   rE   rB   rt   ru   expectedexpected_disparityAB_disparityA_approxBA_disparitys                    r   ,test_orthogonal_procrustes_stretched_examplezETestOrthogonalProcrustes.test_orthogonal_procrustes_stretched_example   s   b!Wr1gAwQ@
SSaWq!fq#hA?rzRRFB''4FB''4$Q**1BI))!,,a//19q=4'::2wa1c(RGDBJ:WW(6666ZZ(:"*ZMMbQ	--h.?@@)//223567&8999$Q**1BI))!,,a//19q=4'	--h.?@@)//223567&899999r   c                 4   |                     ddgddgddgddgg|j                  }|                     ddgddgddgddgg|j                  }|                     d	d
gd	dgd	dgddgg|j                  }t          ||          \  }}t          ||          \  }}t          ||          \  }	}
|
|j                            |          dz  z  }||z  |	z  |z   }t          ||           t          ||j                            |          z  |           d S )Nr&   ri   ir)   rj   r/   r   gCuRg'a?gCuR?gT6ٿgT6?rp   )r!   r   r?   r@   B_standardizedr   rr   r#   rs   rE   rB   rt   ru   s                r   (test_orthogonal_procrustes_skbio_examplezATestOrthogonalProcrustes.test_orthogonal_procrustes_skbio_example   sS   " aWq"g2wB@
SSaVaVaVaV<BJOOk9%=&1:%>&1;%?&0+%>%@ HJz $ S S FB''4FB''4$Q**1BI))!,,a//19q=4'&)))BI11!444nEEEEEr   c                 2   |                     d          }t          ||          \  }}t          ||                     d                     |                     d          }t          ||          \  }}t          ||                    d                     d S )N)r   r   )r   r   r   )emptyr   r
   eye)r!   r   r+   rrB   s        r   
test_emptyz#TestOrthogonalProcrustes.test_empty   s    HHV$Q**1288F++,,,HHV$Q**1266!99%%%%%r   shape)r&   rl   )rl   rl   )rl   r&   c                 \   |\  }}t           j                            d          }|                    |                    |          |                    |          dz  z             }|                    |                    ||f          |                    ||f          dz  z             }|j                            |          \  }}||z  }	t          ||	          \  }
}t          |
|                    |
          j	        z  |
                    ||j                  d           t          ||z  |	           |dk    rt          |
|           |j                            |                    |          j	        |	z            \  }}}t          ||                    |                     d S )Nl   sIHb$y              ?rj   g+=rn   r   )r   r   default_rngr   rW   qrr   r
   conjrY   r   
complex128svdsum)r!   r   r   r3   r4   r"   r   Q_r#   rE   rt   rB   s                r   test_unitaryz%TestOrthogonalProcrustes.test_unitary   sp    1i##L11JJszz%((3::e+<+<r+AABBJJszz1a&))CJJ1v,>,>,CCDDy||A1E(A..5BGGAJJL("&&"-&*H*HuUUUUAq!!!F??Aq!!!)--

q 0111arvvayy)))))r   N)__name__
__module____qualname__r$   r-   r:   rF   r   rS   rf   rv   r   r   r   pytestmarkparametrizer   r{   r   r   r   r      s        ? ? ?C C C- - -/ / / , , ,C C C@5 5 5.: : :.F F F>& & & [W&>&>&>??* * @?* * *r   r   )	itertoolsr   r   numpyr   r   numpy.testingr   r   r   scipy.linalgr   scipy.sparse._sputilsr   scipy._lib._array_apir	   r
   scipy.conftestr   r   r   r{   r   r   <module>r      s   + + + + + + + +      ) ) ) ) ) ) * * * * * * . . . . . . ( ( ( ( ( ( D D D D D D D D . . . . . .   ())* * * * * * * *)* * *r   