
    e!h                         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>                  jA                  dg d      d        Z!y)    )productpermutationsN)assert_array_lessassert_allclose)raises)inveighnormsvd)orthogonal_procrustes)matrixc                      t         j                  j                  d      } | j                  ddd      }| j                  ddd      }t	        t
        t        ||       y )N           nprandomRandomStaterandnassert_raises
ValueErrorr   rngABs      j/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/linalg/tests/test_procrustes.py)test_orthogonal_procrustes_ndim_too_larger      sI    
))


%C		!QA		!QA*3Q:    c                      t         j                  j                  d      } | j                  d      }| j                  d      }t	        t
        t        ||       y )Nr   r   r   r   s      r   )test_orthogonal_procrustes_ndim_too_smallr"      s?    
))


%C		!A		!A*3Q:r    c                      t         j                  j                  d      } d}t        |d      D ]9  \  }} | j                  | } | j                  | }t        t        t        ||       ; y )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*      sb    
))


%C-FVQ' ?1CIIqMCIIqMj"7A>?r    c                     t         j                  j                  d      } d\  }}| j                  ||      }| j                  ||      }t         j                  t         j                   t         j
                  fD ]U  }|j                         }||d<   |j                         }||d<   ||f||f||ffD ]  \  }}	t        t        t        ||	        W y )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VVbffWbff, C	dde_ufou~F 	CDAq*&;QB	CCr    c                     t         j                  j                  d      } d\  }}t        d      D ]  }| j	                  ||      }| j	                  ||      }t        ||      \  }}t        j                  | j	                  d            D ]L  }t        j                  | j	                  d            D ]#  }	t        ||z  ||	z        \  }
}t        |
|       % N  y )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1X +1a1a)&&9	yy1. 	+G99SYYq\2 +,Vg-=v?OP16*+	+	+r    c                     t         j                  j                  d      } dD ]  \  }}| j                  ||      }| j                  ||      }||j	                         t        |      f}||j	                         t        |      f}t        ||      \  }}|j                  |      }	t        ||      D ]1  \  }
}t        |
|      \  }}|j                  |      }t        ||	       3  y )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q5!BO 	(DAq(A.DAq1BB'	(
(r    c                     t         j                  j                  d      } dD ]a  \  }}| j                  ||      }| j                  ||      }t	        |j
                  |z         \  }}t        t        |      |j
                         t        j                  ||j
                        }t        ||      \  }}	t        t        |      |j
                         t        |j                  |      |       |d| j                  ||      z  z   }
t        |
|      \  }}	t        t        |      |j
                         |
j                  |      }|
j                  |      }t        ||z
  d      }t        ||z
  d      }t        ||       d y )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   sB   
))


%C( B1IIaO IIaOACC!G}1A$FF1accN$Q*1A$a!$$1a00 +;:
Ggii0"q)"w/!,"2>!,"2>,.@A9Br    c                 4    | j                  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	
       y )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     XXAwQ"a2q':%HFXX1v1v2wA7uEFGAtGAt A&DAq		$q'""Ervva|#d*HHf40r    c                  Z   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        ||       y )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   XXAwQ"a2q':%HFXX2wAC1a&9GFGAtGAt A&DAq		$q'""Ervva|#d*Hxx!R3(QHr1g>eLHHhT2+99T(V"34tAw>?LL"45 A&DAq		$q'""Ervva|#d*H99T(V"34tAw>?LL"4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  |       y )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   " XX2wB!R1b':%HFXX1v1v1v1v6eDFXX	i 	j!	k"	[!	# $N
 GAtGAt A&DAq		$q'""Ervva|#d*HHf%AQK0r    c                     t        j                  d      } t        | |       \  }}t        |t        j                  d             t        j                  d      } t        | |       \  }}t        |t        j                  d             y )N)r   r   )r   r   r   )r   emptyr   r   identity)r(   rr?   s      r   
test_emptyr      sc    
A A&DAqArxx'(
A A&DAqAr{{1~&r    shape)r   r   )r   r   )r   r   c                    | \  }}t         j                  j                  d      }|j                  |       |j                  |       dz  z   }|j                  ||f      |j                  ||f      dz  z   }t         j                  j	                  |      \  }}||z  }t        ||      \  }}	t        ||j                         j                  z  t        j                  |      d       t        ||z  |       | dk7  rt        ||       t        |j                         j                  |z        \  }}
}t        |	t        j                  |
             y )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99<<?DAq	AA$Q*HAuA

NBFF1IE:AE11!&&(**q.!GAq!E266!9%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
+(BB
106,1B' ":;& <&r    