
    tKgK                         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y)    )productpermutationsN)assert_array_lessassert_allclose)raises)inveighnorm)orthogonal_procrustes)matrixc                      t         j                  j                  d       t         j                  j                  ddd      } t         j                  j                  ddd      }t	        t
        t        | |       y )N           nprandomseedrandnassert_raises
ValueErrorr   ABs     f/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/linalg/tests/test_procrustes.py)test_orthogonal_procrustes_ndim_too_larger      sM    IINN4
		1a A
		1a A*3Q:    c                      t         j                  j                  d       t         j                  j                  d      } t         j                  j                  d      }t	        t
        t        | |       y )Nr   r   r   r   s     r   )test_orthogonal_procrustes_ndim_too_smallr       sE    IINN4
		A
		A*3Q:r   c                  
   t         j                  j                  d       d} t        | d      D ]S  \  }}t        j                  j                  | }t        j                  j                  | }t        t        t        ||       U y )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(      s_    IINN4-FVQ'1IIOOQIIOOQj"7A> (r   c                     t         j                  j                  d       d\  } }t         j                  j                  | |      }t         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   )	mnA_goodB_good	bad_valueA_badB_badr   r   s	            r   0test_orthogonal_procrustes_checkfinite_exceptionr5   #   s    IINN4DAqYY__Q"FYY__Q"FVVbffWbff,	dde_ufou~FDAq*&;QB G -r   c                  (   t         j                  j                  d       d\  } }t        d      D ]  }t         j                  j	                  | |      }t         j                  j	                  | |      }t        ||      \  }}t        j                  t         j                  j	                  d            D ]Z  }t        j                  t         j                  j	                  d            D ]#  }t        ||z  ||z        \  }	}t        |	|       % \  y )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    IINN4DAq1XA&A&)&&9	yy!34G99RYY__Q%78,Vg-=v?OP16* 9 5	 r   c                     t         j                  j                  d       dD ]  \  } }t         j                  j                  | |      }t         j                  j                  | |      }||j	                         t        |      f}||j	                         t        |      f}t        ||      \  }}|j                  |      }t        ||      D ]1  \  }	}
t        |	|
      \  }}|j                  |      }t        ||       3  y )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    IINN4(1		1%		1%U\\^VE]3U\\^VE]3(6q5!BODAq(A.DAq1BB' $ )r   c                  d   t         j                  j                  d       dD ]  \  } }t         j                  j                  | |      }t         j                  j                  ||      }t	        |j
                  |z         \  }}t        t        |      |j
                         t        j                  ||j
                        }t        ||      \  }}t        t        |      |j
                         t        |j                  |      |       |dt         j                  j                  | |      z  z   }	t        |	|      \  }
}t        t        |
      |
j
                         |	j                  |      }|	j                  |
      }t        ||z
  d      }t        ||z
  d      }t        ||        y )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   sF   IINN4(1IIOOAq! IIOOAq!ACC!G}1A$FF1accN$Q*1A$a!$$A!666 +;:
Ggii0"q)"w/!,"2>!,"2>,.@A9 )r   c                 4    | j                  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	
       y )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     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 )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   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   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   " 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   )	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
+(BB
106,1B'r   