a
    CCCff                     @   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   ^/var/www/html/django/DPS/env/lib/python3.9/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
   )Z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 ]R}| }||d< | }||d< ||f||f||ffD ]\}}ttt	|| q|qBd S )Nr   )r    r   )   r    )
r   r   r   r   infnancopyr   r   r
   )	mnZA_goodZB_goodZ	bad_valueZA_badZB_badr   r   r   r   r   0test_orthogonal_procrustes_checkfinite_exception#   s    r*   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|	| qrq\qd S )Nr   r   r   )r   r   r   ranger   r
   squarer   )
r(   r)   iA_origB_origZR_origsZA_scaleZB_scaleRr   r   r   +test_orthogonal_procrustes_scale_invariance1   s    r2   c                  C   s   t jd dD ]\} }t j| |}t j| |}|| t|f}|| t|f}t||\}}||}t||D ]*\}	}
t|	|
\}}||}t	|| qzqd S )Nr   )   r   r   )r   r4   )
r   r   r   r   tolistr   r
   dotr   r   )r(   r)   ZA_arrZB_arrZAsZBsZR_arrr0   ZAR_arrr   r   r1   ARr   r   r   +test_orthogonal_procrustes_array_conversion>   s    

r8   c                  C   s
  t jd dD ]\} }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   r3   g{Gz?Zfro)ord)r   r   r   r   r   Tr   r   r6   r
   r	   r   )r(   r)   r   XwVr   r1   r0   ZA_perturbedZR_primeZnaive_approxZoptim_approxZnaive_approx_errorZoptim_approx_errorr   r   r   test_orthogonal_procrustesM   s$    

r>   c                 C   s   | j dd}| | |fS )Nr   )Zaxis)mean)r   mur   r   r   	_centeredn   s    rA   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    Zdtyper$   r   r   :0yE>Zatol	r   arrayfloatrA   r
   r,   r	   r6   r   )
r.   r/   r   A_mur   B_mur1   r0   scaleB_approxr   r   r   (test_orthogonal_procrustes_exact_examples   s    &&rN   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 )NrB   r   rC   r    rD   (   r$   r   ir      ii   rE   rF   g?rG   )r.   r/   r   rJ   r   rK   r1   r0   rL   rM   expectedZexpected_disparityZAB_disparityZA_approxZBA_disparityr   r   r   ,test_orthogonal_procrustes_stretched_example   s"    &&&
rS   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   rC   ir    rD   r$   r   gCuRg'a?gCuR?gT6ٿgT6?rG   )r.   r/   ZB_standardizedr   rJ   r   rK   r1   r0   rL   rM   r   r   r   (test_orthogonal_procrustes_skbio_example   s    &&
rU   )	itertoolsr   r   numpyr   Znumpy.testingr   r   Zpytestr   r   Zscipy.linalgr   r   r	   r
   Zscipy.sparse._sputilsr   r   r   r#   r*   r2   r8   r>   rA   rN   rS   rU   r   r   r   r   <module>   s"   	!