
    Yh"                         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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          }t	          t
          t          ||           d S )N     )nprandomRandomStaterandnassert_raises
ValueErrorr   )rngABs      t/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/linalg/tests/test_procrustes.py)test_orthogonal_procrustes_ndim_too_smallr      sP    
)


%
%C		!A		!A*3Q:::::    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   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_exceptionr2      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   r+   r,   iA_origB_origR_origsA_scaleB_scaleRs              r   +test_orthogonal_procrustes_scale_invariancer>   +   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   rA   )
r   r   r   r   tolistr   r   dotr   r   )r   r+   r,   A_arrB_arrAsBsR_arrr:   AR_arrr   r   r=   ARs                 r   +test_orthogonal_procrustes_array_conversionrK   8   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   r@   g{Gz?fro)ord)r   r   r   r   r	   Tr   r   rC   r   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_procrustesrY   G   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   	_centeredr^   h   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      :0yE>atol	r   arrayfloatr^   r   r5   r
   rC   r   )
r7   r8   r   A_mur   B_mur=   r:   scaleB_approxs
             r   (test_orthogonal_procrustes_exact_examplero   m   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 )Nr`   r   ra   r!   rb   (   r'   r   ird      ii   re   rf   g?rh   )r7   r8   r   rk   r   rl   r=   r:   rm   rn   expectedexpected_disparityAB_disparityA_approxBA_disparitys                  r   ,test_orthogonal_procrustes_stretched_examplery      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   ra   ir!   rb   r'   r   gCuRg'a?gCuR?gT6ٿgT6?rh   )r7   r8   B_standardizedr   rk   r   rl   r=   r:   rm   rn   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   rd   )rd   rd   )rd   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+=rf   r   )r   r   default_rnglinalgqrr   r   conjrO   eyer   sum)r   r+   r,   r   r   Q_r   r=   rm   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%   r2   r>   rK   rY   r^   ro   ry   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   