
    UgK                         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 Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )    )productpermutationsN)assert_array_lessassert_allclose)raises)inveighnorm)orthogonal_procrustes)matrixc                      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Bs     a/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/linalg/tests/test_procrustes.py)test_orthogonal_procrustes_ndim_too_larger      s_    INN4
	1a  A
	1a  A*3Q:::::    c                      t           j                            d           t           j                            d          } t           j                            d          }t	          t
          t          | |           d S )Nr   r   r   r   s     r   )test_orthogonal_procrustes_ndim_too_smallr       sW    INN4
	A
	A*3Q:::::r   c                      t           j                            d           d} t          | d          D ]G\  }}t          j        j        | }t          j        j        | }t          t          t          ||           Hd S )Nr   ))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(      sv    INN4-FVQ'' ? ?1IOQIOQj"7A>>>>? ?r   c                     t           j                            d           d\  } }t           j                            | |          }t           j                            | |          }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   )	mnA_goodB_good	bad_valueA_badB_badr   r   s	            r   0test_orthogonal_procrustes_checkfinite_exceptionr5   #   s    INN4DAqY__Q""FY__Q""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           j                            | |          }t           j                            | |          }t          ||          \  }}t          j        t           j                            d                    D ]_}t          j        t           j                            d                    D ]+}t          ||z  ||z            \  }	}t          |	|           ,`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Rs
             r   +test_orthogonal_procrustes_scale_invariancerA   1   s   INN4DAq1XX + +A&&A&&)&&99	y!3!344 	+ 	+G9RY__Q%7%788 + +,Vg-=v?OPP16****+	+	+ +r   c                  T   t           j                            d           dD ]\  } }t           j                            | |          }t           j                            | |          }||                                t          |          f}||                                t          |          f}t          ||          \  }}|                    |          }t          ||          D ]=\  }	}
t          |	|
          \  }}|                    |          }t          ||           >d S )Nr   )   r   r#   )r   rD   )
r   r   r   r   tolistr   r   dotr   r   )r.   r/   A_arrB_arrAsBsR_arrr=   AR_arrr   r   r@   ARs                r   +test_orthogonal_procrustes_array_conversionrN   >   s
   INN4( 
( 
(1	1%%	1%%U\\^^VE]]3U\\^^VE]]3(66q5!!BOO 	( 	(DAq(A..DAq1BB''''	(
( 
(r   c                     t           j                            d           dD ]\  } }t           j                            | |          }t           j                            ||          }t	          |j        |z             \  }}t          t          |          |j                   t          j        ||j                  }t          ||          \  }}t          t          |          |j                   t          |                    |          |           |dt           j                            | |          z  z   }	t          |	|          \  }
}t          t          |
          |
j                   |	                    |          }|	                    |
          }t          ||z
  d          }t          ||z
  d          }t          ||           d S )Nr   rC   g{Gz?fro)ord)r   r   r   r   r	   Tr   r   rF   r   r
   r   )r.   r/   r   XwVr   r@   r=   A_perturbedR_primenaive_approxoptim_approxnaive_approx_erroroptim_approx_errors                  r   test_orthogonal_procrustesr\   M   s   INN4( B B1IOOAq!! IOOAq!!AC!G}}1A$$$F1acNN$Q**1A$$$a!$$$$A!6!666 +;::
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   	_centeredra   n   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floatra   r   r8   r
   rF   r   )
r:   r;   r   A_mur   B_mur@   r=   scaleB_approxs
             r   (test_orthogonal_procrustes_exact_examplerq   s   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 )Nrc   r   rd   r$   re   (   r*   r   ir      ii   rg   rh   g?rj   )r:   r;   r   rm   r   rn   r@   r=   ro   rp   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   rd   ir$   re   r*   r   gCuRg'a?gCuR?gT6ٿgT6?rj   )r:   r;   B_standardizedr   rm   r   rn   r@   r=   ro   rp   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   )	itertoolsr   r   numpyr   numpy.testingr   r   pytestr   r   scipy.linalgr   r	   r
   r   scipy.sparse._sputilsr   r   r    r(   r5   rA   rN   r\   ra   rq   r{   r   r    r   r   <module>r      s[   + + + + + + + +     < < < < < < < < * * * * * * ( ( ( ( ( ( ( ( ( ( . . . . . . ( ( ( ( ( (; ; ;; ; ;? ? ?C C C
+ 
+ 
+( ( (B B BB  
1 1 106 6 6,1 1 1B' ' ' ' 'r   