o
    gf                     @   s   d dl mZm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 d dlmZ d dlmZ dd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    )productpermutationsN)assert_array_lessassert_allclose)raises)inveighnorm)orthogonal_procrustes)matrixc                  C   s>   t jd t jddd} t jddd}ttt| | d S )N           nprandomseedrandnassert_raises
ValueErrorr
   AB r   `/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_procrustes.py)test_orthogonal_procrustes_ndim_too_large   s   r   c                  C   s6   t jd t jd} t jd}ttt| | d S )Nr   r   r   r   r   r   r   )test_orthogonal_procrustes_ndim_too_small   s   r   c                  C   sN   t jd d} t| dD ]\}}t jj| }t jj| }ttt|| qd S )Nr   ))r   r   )r   r   r   r   r   r      )r   r   r   r   r   r   r   r
   )shapesabr   r   r   r   r   )test_orthogonal_procrustes_shape_mismatch   s   r$   c            	      C   s   t jd d\} }t j| |}t j| |}t jt j t jfD ])}| }||d< | }||d< ||f||f||ffD ]\}}ttt	|| q>q!d S )Nr   )r    r   )   r    )
r   r   r   r   infnancopyr   r   r
   )	mnA_goodB_good	bad_valueA_badB_badr   r   r   r   r   0test_orthogonal_procrustes_checkfinite_exception#   s   r0   c            
      C   s   t jd d\} }tdD ]?}t j| |}t j| |}t||\}}t t jdD ]}t t jdD ]}t|| || \}	}t|	| q9q.qd S )Nr   r   r   )r   r   r   ranger   r
   squarer   )
r)   r*   iA_origB_origR_origsA_scaleB_scaleRr   r   r   +test_orthogonal_procrustes_scale_invariance1   s   r;   c                  C   s   t jd dD ]K\} }t j| |}t j| |}|| t|f}|| t|f}t||\}}||}t||D ]\}	}
t|	|
\}}||}t	|| q=qd S )Nr   )   r   r   )r   r=   )
r   r   r   r   tolistr   r
   dotr   r   )r)   r*   A_arrB_arrAsBsR_arrr7   AR_arrr   r   r:   ARr   r   r   +test_orthogonal_procrustes_array_conversion>   s   

rG   c                  C   s
  t jd dD ]z\} }t j| |}t j||}t|j| \}}tt||j t ||j}t	||\}}tt||j t||| |dt j| |  }	t	|	|\}
}tt|
|
j |	|}|	|
}t
|| dd}t
|| dd}t|| qd S )Nr   r<   g{Gz?fro)ord)r   r   r   r   r   Tr   r   r?   r
   r	   r   )r)   r*   r   XwVr   r:   r7   A_perturbedR_primenaive_approxoptim_approxnaive_approx_erroroptim_approx_errorr   r   r   test_orthogonal_procrustesM   s&   

rT   c                 C   s   | j dd}| | |fS )Nr   )axis)mean)r   mur   r   r   	_centeredn   s   rX   c            
      C   s   t jddgddgddgddggtd} t jddgddgddgddggtd}t| \}}t|\}}t||\}}|t t| }|t || | }	t|	|d	d
 d S )Nr   r    dtyper%   r   r   :0yE>atol	r   arrayfloatrX   r
   r2   r	   r?   r   )
r4   r5   r   A_mur   B_mur:   r7   scaleB_approxr   r   r   (test_orthogonal_procrustes_exact_examples   s   &&rg   c                  C   sP  t jddgddgddgddggtd} t jddgddgdd	gd
dggtd}t| \}}t|\}}t||\}}|t t| }|t || | }	t jddgddgddgddggtd}
t|	|
dd d}t t|	| t| }t|| t||\}}|t t| }|t || | }t t||  t| }t|| d S )NrY   r   rZ   r    r[   (   r%   r   ir      ii   r]   r^   g?r`   )r4   r5   r   rc   r   rd   r:   r7   re   rf   expectedexpected_disparityAB_disparityA_approxBA_disparityr   r   r   ,test_orthogonal_procrustes_stretched_example   s"   &&&
rp   c                  C   s   t jddgddgddgddggtd} t jddgddgddgddggtd}t d	d
gd	dgd	dgddgg}t| \}}t|\}}t||\}}|t t| }	|	t || | }
t|
| t|t| | d S )Nr   rZ   ir    r[   r%   r   gCuRg'a?gCuR?gT6ٿgT6?r`   )r4   r5   B_standardizedr   rc   r   rd   r:   r7   re   rf   r   r   r   (test_orthogonal_procrustes_skbio_example   s   &&
rs   )	itertoolsr   r   numpyr   numpy.testingr   r   pytestr   r   scipy.linalgr   r   r	   r
   scipy.sparse._sputilsr   r   r   r$   r0   r;   rG   rT   rX   rg   rp   rs   r   r   r   r   <module>   s$    	!