
    doib#                         S SK JrJr  S SKrS SKrS SKJr  S SKJr	  S SK
Jr  S SKJr  S SKJrJr  S SKJr  S	 r\" \5       " S
 S5      5       rg)    )productpermutationsN)assert_allclose)raises)orthogonal_procrustes)matrix)make_xp_test_casexp_assert_close)skip_xp_invalid_argc                 .    UR                  U SS9nX-
  U4$ )Nr   )axis)mean)Axpmus      ^/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/linalg/tests/test_procrustes.py	_centeredr      s     		B62:    c                       \ rS rSrS rS rS rS r\" 5       S 5       r	S r
S rS	 rS
 rS r\R                   R#                  S/ SQ5      S 5       rSrg)TestOrthogonalProcrustes   c                     [         R                  R                  S5      nUR                  UR	                  S5      5      nUR                  UR	                  S5      5      n[        [        [        X45        g )N     )nprandomRandomStateasarrayrandnassert_raises
ValueErrorr   )selfr   rngr   Bs        r   )test_orthogonal_procrustes_ndim_too_smallBTestOrthogonalProcrustes.test_orthogonal_procrustes_ndim_too_small   sO    ii##D)JJsyy|$JJsyy|$j"7>r   c                    [         R                  R                  S5      nSn[        US5       HV  u  pEUR	                  UR
                  " U6 5      nUR	                  UR
                  " U6 5      n[        [        [        Xg5        MX     g )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_mismatchBTestOrthogonalProcrustes.test_orthogonal_procrustes_shape_mismatch   sg    ii##D)1 +DA

399a=)A

399a=)A*&;QB ,r   c           
         [         R                  R                  S5      nSu  p4UR                  X45      nUR                  X45      n[         R                  [         R                  * [         R
                  4 Hp  nUR                  5       nXxS'   UR                  5       n	XyS'   XY4X4X44 H9  u  p[        [        [        UR                  U
5      UR                  U5      5        M;     Mr     g )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_exceptionITestOrthogonalProcrustes.test_orthogonal_procrustes_checkfinite_exception!   s    ii##D)11"&&"&&0IKKME#$KKKME#$K 5/E>Jj*?A jjm- K 1r   c           
      .   [         R                  R                  S5      nSu  p4[        S5       H  nUR	                  UR                  X45      5      nUR	                  UR                  X45      5      n[        Xg5      u  p[         R                  " UR                  S5      5       Hj  n
[         R                  " UR                  S5      5       H>  n[        XaR	                  U
5      -  XqR	                  U5      -  5      u  p[        X5        M@     Ml     M     g )Nr   r)   r   )	r   r   r   ranger   r   r   squarer
   )r"   r   r#   r6   r7   iA_origB_origR_origsA_scaleB_scaleRs                r   +test_orthogonal_procrustes_scale_invarianceDTestOrthogonalProcrustes.test_orthogonal_procrustes_scale_invariance/   s    ii##D)qAZZ		!0FZZ		!0F-f=IF99SYYq\2!yy16G0**W:M1M17**W:M1MODA#A.  7 3	 r   c                    [         R                  R                  S5      nS H  u  p#UR                  X#5      nUR                  X#5      nXDR	                  5       [        U5      4nXUR	                  5       [        U5      4n[        XE5      u  pUR                  U5      n
[        Xg5       H.  u  p[        X5      u  pUR                  U5      n[        X5        M0     M     g )Nr   )   r(   r*   )r(   rN   )
r   r   r   r   tolistr   r   dotr   r   )r"   r#   r6   r7   A_arrB_arrAsBsR_arrrF   AR_arrr   r$   rI   ARs                  r   +test_orthogonal_procrustes_array_conversionDTestOrthogonalProcrustes.test_orthogonal_procrustes_array_conversion<   s    ii##D),DAIIaOEIIaOE7B7B,U:HEYYu%F,Q2YYq\+ ( -r   c           	         [         R                  R                  S5      nS GH  u  p4UR                  UR	                  X45      5      nUR                  UR	                  XD5      5      nUR
                  R                  UR                  U-   5      u  px[        UR
                  R                  U5      UR                  5        XXR                  -  n	[        X5      u  p[        UR
                  R                  U
5      U
R                  5        [        X-  U5        U	SUR                  UR	                  X45      5      -  -   n[        X5      u  p[        UR
                  R                  U5      UR                  5        X-  nX-  nUR
                  R                  X-
  SS9nUR
                  R                  X-
  SS9nUR                  UU:  5      (       a  GM   e   g )Nr   rM   g{Gz?fro)ord)r   r   r   r   r   linalgeighTr
   invr   matrix_normall)r"   r   r#   r6   r7   r$   XwVr   rI   rF   A_perturbedR_primenaive_approxoptim_approxnaive_approx_erroroptim_approx_errors                     r   test_orthogonal_procrustes3TestOrthogonalProcrustes.test_orthogonal_procrustesK   ss   ii##D),DA

399Q?+A 

399Q?+A99>>!##'*DABIIMM!,acc2CCA(.DABIIMM!,acc2AE1%dRZZ		!%@@@K /{>JGBIIMM'2GII>&?L&0L!#!6!6|7GU!6!S!#!6!6|7GU!6!S66,/AABBBB9 -r   c                 R   UR                  SS/SS/SS/SS//UR                  S9nUR                  SS/SS/SS/SS//UR                  S9n[        X!5      u  pE[        X15      u  pg[        XF5      u  pXR                  R                  U5      S-  -  n
X-  U-  U-   n[        XS	S
9  g )Nr   r+   dtyper2   r      :0yE>atolr   float64r   r   r]   ra   r
   )r"   r   rC   rD   r   A_mur$   B_murI   rF   scaleB_approxs               r   (test_orthogonal_procrustes_exact_exampleATestOrthogonalProcrustes.test_orthogonal_procrustes_exact_examplek   s     b!Wr1gAwQ@

SaVaVaWq!f=RZZPF'F'$Q*II))!,a//9q=4't4r   c                 d   UR                  SS/SS/SS/SS//UR                  S9nUR                  SS/SS/SS	/S
S//UR                  S9n[        X!5      u  pE[        X15      u  pg[        XF5      u  pXR                  R                  U5      S-  -  n
X-  U-  U-   nUR                  SS/SS/SS/SS//UR                  S9n[        XSS9  UR                  SUR                  S9S   nUR                  R                  X-
  5      UR                  R                  U5      -  S-  n[        X5        [        Xd5      u  pXR                  R                  U5      S-  -  n
X-  U-  U-   nUR                  R                  X-
  5      UR                  R                  U5      -  S-  n[        UU5        g )Nro   r   rp   r+   rq   (   r2   r   irs      ii   rt   ru   g? rw   )r"   r   rC   rD   r   ry   r$   rz   rI   rF   r{   r|   expectedexpected_disparityAB_disparityA_approxBA_disparitys                    r   ,test_orthogonal_procrustes_stretched_exampleETestOrthogonalProcrustes.test_orthogonal_procrustes_stretched_example   s   b!Wr1gAwQ@

SaWq!fq#hA?rzzRF'F'$Q*II))!,a//9q=4'::2wa1c(RGDBJJ:W6ZZ(:"**ZMbQ		--h.?@))//235679$Q*II))!,a//9q=4'		--h.?@))//23567&89r   c                    UR                  SS/SS/SS/SS//UR                  S9nUR                  SS/SS/SS/SS//UR                  S9nUR                  S	S
/S	S/S	S/SS//UR                  S9n[        X!5      u  pV[        X15      u  px[        XW5      u  pXR                  R                  U5      S-  -  nX-  U	-  U-   n[        X5        [        XqR                  R                  U5      -  U5        g )Nr(   rp   ir+   rq   r2   r   gCuRg'a?gCuR?gT6ٿgT6?rw   )r"   r   rC   rD   B_standardizedr   ry   r$   rz   rI   rF   r{   r|   s                r   (test_orthogonal_procrustes_skbio_exampleATestOrthogonalProcrustes.test_orthogonal_procrustes_skbio_example   s   " aWq"g2wB@

SaVaVaVaV<BJJOk9%=&1:%>&1;%?&0+%>%@ HJzz $ S F'F'$Q*II))!,a//9q=4')II11!44nEr   c                     UR                  S5      n[        X"5      u  p4[        X1R                  S5      5        UR                  S5      n[        X"5      u  p4[        X1R                  S5      5        g )N)r   r   )r   r   r   )emptyr   r
   eye)r"   r   r-   rrF   s        r   
test_empty#TestOrthogonalProcrustes.test_empty   sW    HHV$Q*88F+,HHV$Q*66!9%r   shape)r(   rs   )rs   rs   )rs   r(   c                    Uu  p4[         R                  R                  S5      nUR                  UR                  U5      UR                  U5      S-  -   5      nUR                  UR                  XD45      UR                  XD45      S-  -   5      nUR                  R                  U5      u  pxXg-  n	[        Xi5      u  p[        XR                  U
5      R                  -  UR                  XBR                  S9SS9  [        Xg-  U	5        US:w  a  [        X5        UR                  R                  UR                  U5      R                  U	-  5      u  pn[        XR                  U5      5        g )Nl   sIHb$y              ?rq   g+=ru   r   )r   r   default_rngr   r]   qrr   r
   conjr_   r   
complex128svdsum)r"   r   r   r6   r7   r#   r   Q_r$   rI   r{   rF   s                r   test_unitary%TestOrthogonalProcrustes.test_unitary   s    ii##L1JJszz%(3::e+<r+AABJJszz1&)CJJv,>,CCDyy||AE(.GGAJLL("&&--&*HuUq!F?A!))--
q 01avvay)r   r   N)__name__
__module____qualname____firstlineno__r%   r/   r=   rJ   r   rX   rl   r}   r   r   r   pytestmarkparametrizer   __static_attributes__r   r   r   r   r      sq    ?C-/ , ,C@5.:.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      sG    +   ) * . ( D . ()* * **r   