
    ^Mh                        d dl mZmZ d dlZd dlZd dlmZmZ d dlm	Z
 d dlmZmZmZmZ d dlmZ d dlmZ d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                             dg d          d             Z!dS )    )productpermutationsN)assert_array_lessassert_allclose)raises)inveighnormsvd)orthogonal_procrustes)matrixc                      t           j                            d          } |                     ddd          }|                     ddd          }t	          t
          t          ||           d S )N           nprandomRandomStaterandnassert_raises
ValueErrorr   rngABs      b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/linalg/tests/test_procrustes.py)test_orthogonal_procrustes_ndim_too_larger      s\    
)


%
%C		!QA		!QA*3Q:::::    c                      t           j                            d          } |                     d          }|                     d          }t	          t
          t          ||           d S )Nr   r   r   r   s      r   )test_orthogonal_procrustes_ndim_too_smallr"      sP    
)


%
%C		!A		!A*3Q:::::r    c                      t           j                            d          } d}t          |d          D ]5\  }} | j        | } | j        | }t          t          t          ||           6d S )Nr   ))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_mismatchr*      su    
)


%
%C-FVQ'' ? ?1CIqMCIqMj"7A>>>>? ?r    c                     t           j                            d          } d\  }}|                     ||          }|                     ||          }t           j        t           j         t           j        fD ]a}|                                }||d<   |                                }||d<   ||f||f||ffD ]!\  }}	t          t          t          ||	           "bd S )Nr   )r&   r   )   r&   )
r   r   r   r   infnancopyr   r   r   )
r   mnA_goodB_good	bad_valueA_badB_badr   r   s
             r   0test_orthogonal_procrustes_checkfinite_exceptionr7   $   s    
)


%
%CDAqYYq!__FYYq!__FVbfWbf, C C	dde_ufou~F 	C 	CDAq*&;QBBBB	CC Cr    c                     t           j                            d          } d\  }}t          d          D ]}|                     ||          }|                     ||          }t          ||          \  }}t          j        |                     d                    D ]U}t          j        |                     d                    D ]+}	t          ||z  ||	z            \  }
}t          |
|           ,Vd S )Nr   r$   r   )r   r   r   ranger   r   squarer   )r   r0   r1   iA_origB_origR_origsA_scaleB_scaleRs              r   +test_orthogonal_procrustes_scale_invariancerC   2   s    
)


%
%CDAq1XX + +1a1a)&&99	y1.. 	+ 	+G9SYYq\\22 + +,Vg-=v?OPP16****+	+	+ +r    c                  (   t           j                            d          } dD ]\  }}|                     ||          }|                     ||          }||                                t          |          f}||                                t          |          f}t          ||          \  }}|                    |          }	t          ||          D ]=\  }
}t          |
|          \  }}|                    |          }t          ||	           >d S )Nr   )   r   r%   )r   rF   )
r   r   r   r   tolistr   r   dotr   r   )r   r0   r1   A_arrB_arrAsBsR_arrr?   AR_arrr   r   rB   ARs                 r   +test_orthogonal_procrustes_array_conversionrP   ?   s   
)


%
%C( 
( 
(1		!Q		!QU\\^^VE]]3U\\^^VE]]3(66q5!!BOO 	( 	(DAq(A..DAq1BB''''	(
( 
(r    c                  r   t           j                            d          } dD ]\  }}|                     ||          }|                     ||          }t	          |j        |z             \  }}t          t          |          |j                   t          j        ||j                  }t          ||          \  }}	t          t          |          |j                   t          |                    |          |           |d|                     ||          z  z   }
t          |
|          \  }}	t          t          |          |j                   |
                    |          }|
                    |          }t          ||z
  d          }t          ||z
  d          }t          ||           d S )Nr   rE   g{Gz?fro)ord)r   r   r   r   r	   Tr   r   rH   r   r
   r   )r   r0   r1   r   XwVr   rB   r?   A_perturbedR_primenaive_approxoptim_approxnaive_approx_erroroptim_approx_errors                   r   test_orthogonal_procrustesr^   N   s   
)


%
%C( B B1IIaOO IIaOOAC!G}}1A$$$F1acNN$Q**1A$$$a!$$$$1a00 +;::
Ggi000"q))"w//!,"2>>>!,"2>>>,.@AAAA9B Br    c                 <    |                      d          }| |z
  |fS )Nr   )axis)mean)r   mus     r   	_centeredrc   o   s!    	
QBr62:r    c                     t          j        ddgddgddgddggt                    } t          j        ddgddgddgddggt                    }t          |           \  }}t          |          \  }}t	          ||          \  }}|t          j        t          |                    z  }|t          j        ||          z  |z   }	t          |	|d	
           d S )Nr   r&   dtyper,   r   r   :0yE>atol	r   arrayfloatrc   r   r:   r
   rH   r   )
r<   r=   r   A_mur   B_murB   r?   scaleB_approxs
             r   (test_orthogonal_procrustes_exact_examplers   t   s     XAwQ"a2q':%HHHFX1v1v2wA7uEEEFGAtGAt A&&DAq	$q''"""Erva||#d*HHf4000000r    c                     t          j        ddgddgddgddggt                    } t          j        ddgddgdd	gd
dggt                    }t          |           \  }}t          |          \  }}t	          ||          \  }}|t          j        t          |                    z  }|t          j        ||          z  |z   }	t          j        ddgddgddgddggt                    }
t          |	|
d           d}t          j        t          |	|z
            t          |          z            }t          ||           t	          ||          \  }}|t          j        t          |                    z  }|t          j        ||          z  |z   }t          j        t          || z
            t          |          z            }t          ||           d S )Nre   r   rf   r&   rg   (   r,   r   ir      ii   ri   rj   g?rl   )r<   r=   r   ro   r   rp   rB   r?   rq   rr   expectedexpected_disparityAB_disparityA_approxBA_disparitys                  r   ,test_orthogonal_procrustes_stretched_exampler}      s   XAwQ"a2q':%HHHFX2wAC1a&9GGGFGAtGAt A&&DAq	$q''"""Erva||#d*Hx!R3(QHr1g>eLLLHHhT2222+9T(V"344tAww>??LL"4555 A&&DAq	$q''"""Erva||#d*H9T(V"344tAww>??LL"455555r    c                  .   t          j        ddgddgddgddggt                    } t          j        ddgddgddgddggt                    }t          j        d	d
gd	dgd	dgddgg          }t          |           \  }}t          |          \  }}t	          ||          \  }}|t          j        t          |                    z  }	|	t          j        ||          z  |z   }
t          |
|           t          |t          |          z  |           d S )Nr   rf   ir&   rg   r,   r   gCuRg'a?gCuR?gT6ٿgT6?rl   )r<   r=   B_standardizedr   ro   r   rp   rB   r?   rq   rr   s              r   (test_orthogonal_procrustes_skbio_exampler      s.   " X2wB!R1b':%HHHFX1v1v1v1v6eDDDFX	i 	j!	k"	[!	# $ $N
 GAtGAt A&&DAq	$q''"""Erva||#d*HHf%%%AQK00000r    c                  *   t          j        d          } t          | |           \  }}t          |t          j        d                     t          j        d          } t          | |           \  }}t          |t          j        d                     d S )N)r   r   )r   r   r   )r   emptyr   r   identity)r(   rr?   s      r   
test_emptyr      s~    
A A&&DAqArx''(((
A A&&DAqAr{1~~&&&&&r    shape)r   r   )r   r   )r   r   c                    | \  }}t           j                            d          }|                    |           |                    |           dz  z   }|                    ||f          |                    ||f          dz  z   }t           j                            |          \  }}||z  }t          ||          \  }}	t          ||                                j        z  t          j	        |          d           t          ||z  |           | dk    rt          ||           t          |                                j        |z            \  }}
}t          |	t          j        |
                     d S )Nl   sIHb$y              ?g+=rj   r   )r   r   default_rnglinalgqrr   r   conjrT   eyer   sum)r   r0   r1   r   r   Q_r   rB   rq   r?   s              r   test_unitaryr      s@    DAq
)


-
-C

5CJJu--22A

Aq6SZZA//"44A9<<??DAq	AA$Q**HAuA
NBF1IIE::::AE11!&&((*q.!!GAq!E26!99%%%%%r    )"	itertoolsr   r   numpyr   pytestnumpy.testingr   r   r   r   scipy.linalgr   r	   r
   r   r   scipy.sparse._sputilsr   r   r"   r*   r7   rC   rP   r^   rc   rs   r}   r   r   markparametrizer    r    r   <module>r      s   + + + + + + + +      < < < < < < < < * * * * * * - - - - - - - - - - - - . . . . . . ( ( ( ( ( (; ; ;; ; ;? ? ?C C C
+ 
+ 
+( ( (B B BB  
1 1 106 6 6,1 1 1B' ' ' ":":":;;& & <;& & &r    