
    9i                     \   S SK r S SKrS SKrS SKrS SKJrJrJr  S SK	J
r
JrJrJrJrJrJrJrJrJr  S SKJrJrJrJr  \R2                  " SS/SS/S	S
/SS/SS/SS/SS/SS//5      r\R2                  " S S /S S/SS/SS /SS/SS/SS/SS//5      rS rS  rS! rS" rS# r S$ r!S% r"S& r#S' r$S( r%S) r&S* r'S+ r(S, r)\RT                  RW                  S-S.S//5      S0 5       r,S1 r-S2 r.S3 r/S4 r0S5 r1S6 r2S7 r3S8 r4S9 r5S: r6\RT                  RW                  S-S.S//5      S; 5       r7S< r8S= r9\RT                  RW                  S-S.S//5      S> 5       r:S? r;S@ r<SA r=SB r>\RT                  RW                  SC\" \R~                  R                  SDSD5      SE9\
" SFSGSH9\" SISJSK9\" SLSISH9\" \R                  " SD5      SM\R                  " SN5      -  SM\R                  " SN5      -  S 4SK9\" \" \R                  " SD5      SM\R                  " SN5      -  SM\R                  " SN5      -  S 4SK9R                  SE9\" 5       =rDR                  \\5      =(       a    \D/5      SO 5       rFSP rGSQ rHSR rISS rJST rKSU rLSV rM\RT                  RW                  S-S.S//5      SW 5       rNSX rOSY rPSZ rQS[ rRS\ rSS] rTS^ rUS_ rVS` rWg)a    N)assert_almost_equalassert_array_almost_equalassert_equal)
AffineTransformEssentialMatrixTransformEuclideanTransformFundamentalMatrixTransformPiecewiseAffineTransformPolynomialTransformProjectiveTransformSimilarityTransformestimate_transformmatrix_transform)_GeometricTransform_affine_matrix_from_vector_center_and_normalize_points_euler_rotation_matrixgV-(gp=
%g %g#~j.@gʡe!@g\(%@gQ&@gS㥛$#g9v_@gv@gGzTg(\@gx)@gK7g!rhg'1Zi  i$  i  i  i  iL  i  i  i   i  c            	         S H*  n [        U [        S S2S S 24   [        S S2S S 24   5        M,     [        R                  " [
        5         [        S[        S S2S S 24   [        S S2S S 24   5        S S S 5        g ! , (       d  f       g = f)N)	euclidean
similarityaffine
projective
polynomial   foobar)r   SRCDSTpytestraises
ValueErrortforms    f/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/skimage/transform/tests/test_geometric.pytest_estimate_transformr$   5   sm    R5#bqb!e*c"1"a%j9 S	z	"8S!QZRaRU< 
#	"	"s   (A<<
B
c                  t    [        SSS9n [        U " [        5      [        [        U R                  5      5        g )N)皙?      ?r   scalerotation)r   r   r   r   paramsr!   s    r#   test_matrix_transformr,   <   s(    *q9Es-c5<<@A    c                     [        S[        S S2S S 24   [        S S2S S 24   S-   5      n [        U " [        S S2S S 24   5      [        S S2S S 24   S-   5        [        U R                  S   U R                  S   5        [        U R                  S   U R                  S   * 5        [        S[        [        5      n[        UR                  U" [        5      5      [        5        [        UR                  S   UR                  S   5        [        UR                  S   UR                  S   * 5        [        5       nUR                  [        [        5      (       d   e[        UR                  UR                  5        g )Nr   r   
   r   r      r2   r   r2   r2   r   )r   r   r   r+   r   inverser   estimater"   tform2tform3s      r#   test_euclidean_estimationr:   A   s'   {CAJBQBE
RHEc"1"a%j)3rr1u:?;T*ELL,>?T*U\\$-?,?@  S#6Fvc{3S9d+V]]4-@Ad+fmmD.A-AB  !F??3$$$$v}}5r-   c                     [         R                  R                  SS5      n [         R                  R                  S5      S-  [         R                  -  [         R                  -
  n[	        U5      n[         R                  R                  S5      n/ nU  H`  nUR                  SS5      n[         R                  " X&5      UR                  SS5      -   nUR                  S5      nUR                  U5        Mb     [         R                  " U5      n[        SS9nUR                  X5      (       d   eUR                  n	UR                  n
[        X5        [        X5        g )N     r=   r   r2   dimensionality)nprandomrandpir   reshapematmulappendarrayr   r6   r*   translationr   )
src_pointsanglesrotation_matrixtranslation_vector
dst_pointsptpt_rdstr"   estimated_rotationestimated_translations              r#   test_3d_euclidean_estimationrT   T   s   a(J YYd#a'"%%/"%%7F,V4O))$/Jzz!Qii.1C1K1KAq1QQkk!n#	  *%Ja0E>>*1111!--*<-Br-   c                     Sn Sn[        XS9n[        UR                  U 5        [        UR                  U5        [        UR                  5      n[        UR                  U 5        [        UR                  U5        Sn Sn[        XS9n[        UR                  U 5        [        UR                  U5        [
        R                  S-  n Sn[        XS9n[        UR                  U 5        [        UR                  U5        g )Nr2   r1   r*   rI   r   r   )r   r   r*   rI   r+   rA   rD   )r*   rI   r"   r8   s       r#   test_euclidean_initrW   l   s    HKJE1));7  -F2**K8 HKJE1));7 uuqyHKJE1));7r-   c                     [        S[        S S2S S 24   [        S S2S S 24   5      n [        U " [        S S2S S 24   5      [        S S2S S 24   5        [        U R                  S   U R                  S   5        [        U R                  S   U R                  S   * 5        [        S[        [        5      n[        UR                  U" [        5      5      [        5        [        UR                  S   UR                  S   5        [        UR                  S   UR                  S   * 5        [        5       nUR                  [        [        5      (       d   e[        UR                  UR                  5        g )Nr   r   r0   r1   r3   r4   )r   r   r   r   r+   r5   r   r6   r7   s      r#   test_similarity_estimationrY      s   |S!QZRaRUDEc"1"a%j)3rr1u:6T*ELL,>?T*U\\$-?,?@  c37Fvc{3S9d+V]]4-@Ad+fmmD.A-AB !"F??3$$$$v}}5r-   c                  .   [         R                  R                  SS5      n [         R                  R                  S5      S-  [         R                  -  [         R                  -
  n[         R                  R	                  SS5      n[        U5      U-  n[         R                  R                  S5      n/ nU  H`  nUR                  SS5      n[         R                  " X75      UR                  SS5      -   nUR                  S5      nUR                  U5        Mb     [         R                  " U5      n[        SS9n	U	R                  X5      (       d   eU	R                  n
U	R                  nU	R                  n[        X5        [        X5        [        X5        g )	Nr<   r=   r>   r   r      r2   r?   )rA   rB   rC   rD   randintr   rE   rF   rG   rH   r   r6   r*   rI   r)   r   )rJ   rK   r)   rL   rM   rN   rO   rP   rQ   r"   rR   rS   estimated_scales                r#   test_3d_similarity_estimationr^      s@   a(J YYd#a'"%%/"%%7FIIa$E,V4u<O))$/Jzz!Qii.1C1K1KAq1QQkk!n#	  *%Jq1E>>*1111!--kkO-B/*<r-   c                     Sn SnSn[        XUS9n[        UR                  U 5        [        UR                  U5        [        UR                  U5        [        UR
                  5      n[        UR                  U 5        [        UR                  U5        [        UR                  U5        Sn SnSn[        XUS9n[        UR                  U 5        [        UR                  U5        [        UR                  U5        Sn [        R                  S-  nSn[        XUS9n[        UR                  U 5        [        UR                  U5        [        UR                  U5        Sn [        R                  S-  nSn[        R                  " / S	Q/ S
Q/ SQ/5      n[        U5      n[        UR                  U 5        [        UR                  U5        [        UR                  U5        g )Nr&   r2   r1   )r)   r*   rI   r   r         ?r0   )r   gs"   <)r2   g3   <gs"   ؼr   r   r2   )	r   r   r)   r*   rI   r+   rA   rD   rH   )r)   r*   rI   r"   r8   r+   s         r#   test_similarity_initrc      s   EHKeKXEU+1));7 !.Fe,2**K8 EHKeKXEU+1));7 EuuqyHKeKXEU+1));7 EuuqyHKXX	 "F	RF  'EU+1));7r-   c                     [        S[        S S2S S 24   [        S S2S S 24   5      n [        U " [        S S2S S 24   5      [        S S2S S 24   5        [        S[        [        5      n[        UR	                  U" [        5      5      [        5        [        5       nUR                  [        [        5      (       d   e[        UR                  UR                  5        g )Nr   r=   )r   r   r   r   r5   r   r6   r+   r7   s      r#   test_affine_estimationre      s    xRaRUS!QZ@Ec"1"a%j)3rr1u:6  #s3Fvc{3S9 F??3$$$$v}}5r-   c                     Sn SnSnSn[        XX#S9n[        UR                  U 5        [        UR                  U5        [        UR                  U5        [        UR
                  U5        [        UR                  5      n[        UR                  U 5        [        UR                  U5        [        UR                  U5        [        UR
                  U5        [        [        SS9R                  [        SS9R                  5        g )	N)r&   gp=
ף?r2   r&   r1   )r)   r*   shearrI   r'   )r)   )r'   r'   )r   r   r)   r*   rg   rI   r+   )r)   r*   rg   rI   r"   r8   s         r#   test_affine_initrh      s    EHEKeE U+1U+));7 U\\*Fe,2e,**K8 c"((/
*K*Q*Qr-   c                     Sn [         R                  " U 5      * n[         R                  " SUS// SQ/ SQ/5      n[        U S9n[	        UR
                  U5        Sn [         R                  " U S   5      * n[         R                  " U S   5      * n[         R                  " SUS/USS// SQ/5      n[        U S9n[	        UR
                  U5        g )Nr&   r2   r   r   r2   r   rb   )rg   )333333?g?)rA   tanrH   r   r   r+   )rg   cxexpectedr"   cys        r#   test_affine_shearrp     s    E
&&-Bxx!RY	:;H%(Eh/E
&&q
	B
&&q
	Bxx!Rb!QZ;<H%(Eh/r-   c                      [        5       n U R                  [        [        5      (       d   e[	        U " [        5      [        5        [	        U R                  [        5      [        5        g N)r
   r6   r   r   r   r5   r!   s    r#   test_piecewise_affiners   #  sB    $&E>>#s####c
C(c*C0r-   c                  (   [         R                  " / SQ5      R                  SS5      n [         R                  " / SQ5      R                  SS5      n[        SX5      n[         R                  " / SQ/ SQ/ SQ/5      n[	        UR
                  US	5        g )
Ng0l?gcGP?gz7e?gDo?g-lI?gz0)>?g㪲?gl%?g6?g27߈?gX/@gAG>#@gQ293L?gKh?gK=U?g0DK?ra   r   gэ?gEA?g1#Y?gd9?glY?gh!˛?g?gVa3?gCSvA?g*D/X?gHhy?gRr?g77M?gXR>G?g\mO?gCP5zu?fundamental)gg˿gQKs+?g)gag)n?g`k[9 ?)g`~?g~K|ۿgķfᡖ?   rA   rH   rE   r   r   r+   srcrQ   r"   	tform_refs       r#   "test_fundamental_matrix_estimationr}   +  s    
((	
& gb!n' ( ((	
& gb!n' * }c7E -.,	
I i3r-   c                  ^   [        [        R                  " S5      [        R                  " / SQ5      S9n [	        5       nU R
                  Ul        [        R                  " SS/SS/SS//5      n[        R                  " SS/SS/SS//5      n[        UR                  X#5      S-  / SQ5        g Nr=   r2   r   r   rV   r   r   r2   )r   r'   r   )r   rA   eyerH   r	   r+   r   	residuals)essential_matrix_tformr"   r{   rQ   s       r#   !test_fundamental_matrix_residualsr   b  s    5(; '(E)00EL
((QFQFQF+
,C
((QFQFQF+
,C1Q6Dr-   array_like_inputFTc                    U (       a  / SQ/ SQ/ SQ/nSnO.[         R                  " S5      n[         R                  " / SQ5      n[        XS9nU (       a&  UR                   Vs/ s H  n[        U5      PM     nnOUR                  n[        US9n[         R                  " SS/SS/SS//5      n[        U" U5      / S	Q/ S
Q/ S
Q/5        g s  snf )Nr   rj   rb   r=   rV   matrixr   r2   r   ra   r   r   ra   r2   )rA   r   rH   r   r+   listr	   r   )r   r*   rI   r   pr+   r"   r{   s           r#   test_fundamental_matrix_forwardr   m  s    y)466!9hhy)5 #9#@#@A#@a$q'#@A'..&f5E
((QFQFQF+
,Cc
ZZ$HI Bs   "C
c                  (   [        [        R                  " S5      [        R                  " / SQ5      S9n [	        5       nU R
                  Ul        [        R                  " SS/SS/SS//5      n[        UR                  U5      / SQ/ SQ/ SQ/5        g Nr=   r   rV   r   r2   rj   )r   r2   ra   )r   rA   r   rH   r	   r+   r   r5   )r   r"   r{   s      r#   test_fundamental_matrix_inverser     su    5(; '(E)00EL
((QFQFQF+
,Cc*Y
J,OPr-   c                  P   [         R                  " / SQ5      R                  SS5      n [         R                  " / SQ5      R                  SS5      n[        SX5      n[        SX5      n[         R                  R                  UR                  R                  UR                  5        g )Nru   ra   r   rv   rw   )rA   rH   rE   r   testingr   r5   r+   )r{   rQ   r"   	tform_invs       r#   *test_fundamental_matrix_inverse_estimationr     s    
((	
& gb!n' * ((	
& gb!n' . }c7E"=#;IJJ(()=)=y?O?OPr-   c                     [         R                  " / SQ5      R                  SS5      n [         R                  " / SQ5      R                  SS5      n[        SX5      n[         R                  " [         R
                  " [         R                  " U[         R                  " [        U5      5      45      U" U 5      -  SS95      n[         R                  " US:  5      (       d   eg )	Nru   ra   r   rv   rw   r2   axisg{Gz?)
rA   rH   rE   r   abssumcolumn_stackoneslenall)r{   rQ   r"   r   s       r#   +test_fundamental_matrix_epipolar_projectionr     s    
((	
& gb!n' * ((	
& gb!n' * }c7E 	rvvboosBGGCH,=&>?%*LSTUVA66!d(r-   c                      [        [        R                  " S5      [        R                  " / SQ5      S9n [	        U R
                  [        R                  " / SQ5      R                  SS5      5        g )Nr=   rb   rV   )	r   ra   r   r2   r   r   r   r   r   )r   rA   r   rH   r   r+   rE   r!   s    r#   test_essential_matrix_initr     sJ    $(;E rxx(DEMMaQRSTr-   c                  (   [         R                  " / SQ5      R                  SS5      n [         R                  " / SQ5      R                  SS5      n[        SX5      n[         R                  " / SQ/ SQ/ SQ/5      n[	        UR
                  US	5        g )
Nru   ra   r   rv   	essential)g"UǴg2FY?gU)gDMȿgkC8g˼Uס?)gCH?gx@ٔ+̿gӠh"rx   ry   rz   s       r#    test_essential_matrix_estimationr     s    
((	
& gb!n' ( ((	
& gb!n' * {C5E .-+	
I i3r-   c                      [        [        R                  " S5      [        R                  " / SQ5      S9n [        R                  " SS/SS/SS//5      n[	        U " U5      / SQ/ SQ/ SQ/5        g )Nr=   r   rV   r   r2   r   r   )r   rA   r   rH   r   r"   r{   s     r#   test_essential_matrix_forwardr   .  sZ    $(;E ((QFQFQF+
,Cc
ZZ$HIr-   c                      [        [        R                  " S5      [        R                  " / SQ5      S9n [        R                  " SS/SS/SS//5      n[	        U R                  U5      / SQ/ SQ/ SQ/5        g r   )r   rA   r   rH   r   r5   r   s     r#   test_essential_matrix_inverser   6  s_    $(;E ((QFQFQF+
,Cc*Y
J,OPr-   c                  (   [        [        R                  " S5      [        R                  " / SQ5      S9n [        R                  " SS/SS/SS//5      n[        R                  " SS/SS/SS//5      n[	        U R                  X5      S-  / SQ5        g r   )r   rA   r   rH   r   r   )r"   r{   rQ   s      r#   test_essential_matrix_residualsr   >  s~    $(;E ((QFQFQF+
,C
((QFQFQF+
,C1Q6Dr-   c                     [        S[        S S2S S 24   [        S S2S S 24   5      n [        U " [        S S2S S 24   5      [        S S2S S 24   5        [        S[        [        5      n[        UR	                  U" [        5      5      [        5        [        5       nUR                  [        [        5      (       d   e[        UR                  UR                  5        g )Nr      )r   r   r   r   r5   r   r6   r+   r7   s      r#   test_projective_estimationr   G  s    |S!QZRaRUDEc"1"a%j)3rr1u:6  c37Fvc{3S9 !"F??3$$$$v}}5r-   c            
         [        S[        S S2S S 24   [        S S2S S 24   5      n [        S[        S S2S S 24   [        S S2S S 24   [        R                  " S5      5      n[        U R                  UR                  5        [        S[        [        5      n [        S[        [        [        R                  " [        R                  S   5      5      n[        U R                  UR                  5        [        R                  " [        R                  S   S-   5      nSUS'   [        S[        [        5      n[        S[        [        R                  " S[        R                  S   5      S S 24   [        [        R                  " S[        R                  S   5      S S 24   U5      n[        UR                  UR                  SS9  g )	Nr   r   r   r2   V瞯<ra   r=   decimal)	r   r   r   rA   r   r   r+   shapearanger"   tform_wpoint_weightstform1r8   s        r#   #test_projective_weighted_estimationr   V  sH   |S!QZRaRUDE s2A2q5z3rr1u:rwwqzRGgnn5 |S#6E sC19NOGgnn5 GGCIIaL1,-MM!c37FBIIb#))A,'*+BIIb#))A,'*+	F v}}a@r-   c                     [        S[        [        5      nU (       a&  UR                   Vs/ s H  n[	        U5      PM     nnOUR                  n[        U5      n[        UR                  UR                  5        g s  snf )Nr   )r   r   r   r+   r   r   r   r   r"   r   r+   r8   s        r#   test_projective_initr   o  s[    |S#6E#(<<0<a$q'<0 (Fu||4	 1s   A;c                      [        S[        [        SS9n [        U " [        5      [        S5        [	        5       nUR                  [        [        SS9(       d   e[        UR                  U R                  5        g )Nr   r/   orderrx   )r   r   r   r   r   r6   r+   r"   r8   s     r#   test_polynomial_estimationr   {  sV    |S#R@Ec
C+ !"F??32?...u||4r-   c            
         [        S[        [        SS9n [        S[        [        S[        R                  " [        R
                  S   5      S9n[        U R                  UR                  5        [        R                  " [        R
                  S   S-   5      nSUS'   [        S[        [        SS9n[        S[        [        R                  " S[        R
                  S   5      S S 24   [        [        R                  " S[        R
                  S   5      S S 24   SUS9n[        UR                  UR                  S	S
9  g )Nr   r/   r   r   )r   weightsr2   r   ra   r   r   )	r   r   r   rA   r   r   r   r+   r   r   s        r#   #test_polynomial_weighted_estimationr     s    |S#R@E c3b"''#))A,2GG gnn5 GGCIIaL1,-MM!c3bAFBIIb#))A,'*+BIIb#))A,'*+F v}}a@r-   c                     [        S[        [        SS9nU (       a&  UR                   Vs/ s H  n[	        U5      PM     nnOUR                  n[        U5      n[        UR                  UR                  5        g s  snf )Nr   r/   r   )r   r   r   r+   r   r   r   r   s        r#   test_polynomial_initr     s]    |S#R@E#(<<0<a$q'<0 (Fu||4	 1s   A:c                      [        S[        [        5      n [        S[        [        SS9n[        UR                  U R                  5        g )Nr   r   r   )r   r   r   r   r+   r   s     r#   test_polynomial_default_orderr     s2    |S#6Ec3a@Fu||4r-   c                      [         R                  " [        5         [        5       R	                  S5        S S S 5        g ! , (       d  f       g = f)Nr   )r   r   NotImplementedErrorr   r5    r-   r#   test_polynomial_inverser     s,    	*	+%%a( 
,	+	+s	   >
Ac                  P   [        SSS9n [        SSS9n[        SSS9nX-   n[        UR                  UR                  5        [        SSS9n [        SSS9n[        SSS9nX-   n[        UR                  UR                  5        UR                  [
        :X  d   e[        SSS9n[        X3R                  -   R                  [        R                  " S5      5        [        SSS9n [        SSS9n[        S	S
S9nXR                  -   n[        UR                  UR                  5        g )Nr&   333333?r(   ?g|Gz?rk   r&   r&   r=   r`   g433333)	r   r   r+   r   	__class__r   r5   rA   r   )r   r8   r9   r"   s       r#   
test_unionr     s     sS9F sS9F v	BFOEfmm4:<F sS9F v	BFOEfmm4??1111*s;E.66q	B sS9F sS9F }yIF^^#Efmm4r-   c                      [        5       n [        5       n[        R                  " [        5         U R                  U5        S S S 5        g ! , (       d  f       g = frr   )r   r   r   r   	TypeError__add__)r   r8   s     r#   test_union_differing_typesr     s6     "F "F	y	!v 
"	!	!s   A


Ar"   r=   r   r   r   r(   r      r   rV   r&   r2   r   c                 J   [        U R                  [        U 5      5      (       d   e [        U R                  R                  R                  U R                  5        [        U R                  R                  [        5      U " [        5      5        [        U [        [        [        45      (       dN  [        X R                  -   " [        5      [        5        [        U R                  U -   " [        5      [        5        g g ! [
         a    [        U [        5      (       d   e Nf = frr   )

isinstancer5   typer   r+   AttributeErrorr
   r   r   r	   r!   s    r#   test_inverse_all_transformsr     s    & emmT%[1111;EMM1188%,,G --c2E#J?$&$	
  	U]]2C8#>U]]U2C8#>	  ;%!9::::;s   4C> >!D"!D"c                  R   [         R                  " [        SS9   [        5         S S S 5        [	        S5       H  n [
        R                  R                  SS5      S-  nUSUS   S:H  4==   [
        R                  " [        5      R                  -  ss'   XS   -  n[
        R                  " US	   S
-   US   * -  S
/S
US   S
-   US	   * -  /S
S
//5      n[        U5      nU" U5      n[
        R                  " U5      R                  5       (       a  M   e   g ! , (       d  f       N= f)Nz Can't instantiate abstract class)matchr[   r=   d   r   r   )r   r   )r   r2   r2   )r   r   )r   r   r   r   rangerA   rB   rC   finfofloatepsrH   r   isfiniter   )iHr{   r"   rQ   s        r#   test_geometric_tformr     s   	y(J	K 
L 2YIINN1a 3&	!QqTQY,288E?...	tW hhD'A+!D')1-QtWq[QtWH,-A
 $A&Cj{{3##%%%%' 	 
L	Ks   D
D&c                  
   [         R                  " [        5         [        [        R
                  " S5      5        S S S 5        [         R                  " [        5         [        [        R
                  " S5      5        S S S 5        [         R                  " [        5         [        [        R
                  " S5      5        S S S 5        [         R                  " [        5         [        [        R
                  " S5      5        S S S 5        [         R                  " [        5         [        [        R
                  " S5      SS9  S S S 5        [         R                  " [        5         [        [        R
                  " S5      SS9  S S S 5        [         R                  " [        5         [        [        R
                  " S5      SS9  S S S 5        [         R                  " [        5         [        [        R
                  " S5      5        S S S 5        [         R                  " [        5         [        [        R
                  " S5      S9  S S S 5        [         R                  " [        5         [        [        R
                  " S5      S9  S S S 5        [         R                  " [        5         [        [        R
                  " S5      S	9  S S S 5        [         R                  " [        5         [        [        R
                  " S5      S	9  S S S 5        [         R                  " [        5         [        [        R                  " S
5      S	9  S S S 5        [         R                  " [        5         [        [        R                  " S
5      [        R
                  " S5      S9  S S S 5        [         R                  " [        5         [        [        R                  " S
5      [        R
                  " S5      S9  S S S 5        [         R                  " [        5         [        [        R                  " S
5      [        R
                  " S5      S9  S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN[= f! , (       d  f       GN,= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNq= f! , (       d  f       GNC= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNa= f! , (       d  f       g = f)N)r   r=   r2   )r   r)   r0   )r   rI   r=   r=   )r=   r   r   )r*   r=   )r   rV   r>   )r   r   r    r   rA   zerosr   r   r   r   r	   r   r   r   r-   r#   test_invalid_inputr     s   	z	"BHHV,- 
#	z	"() 
#	z	"BHHV,- 
#	z	"288F+, 
#	z	"rxx/q9 
#	z	"288F#31= 
#	z	""((6"2G 
#	z	"BHHV,- 
#	z	"""((6*:; 
#	z	" (89 
# 
z	" "((6*:; 
#	z	" "((6*:; 
#	z	" "&&)4 
#	z	" "&&)$P 
#	z	" "&&)$P 
#	z	" "&&)$P 
#	"? 
#	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	" 
#	"	"	"	"	"	"	"	"	"	"	"s    Q Q  Q2! R#R$R(%R:& S(S(S0(T(T(T&(3T8=3U
3U
Q 
Q/2
R
R
R%(
R7:
S	
S
S-0
S?
T
T#&
T58
U

U
U*c                     [         R                  " S5      =p[        5       nUR                  X5      (       a   e[         R                  " [         R
                  " UR                  5      5      (       d   e[        5       nUR                  X5      (       a   e[         R                  " [         R
                  " UR                  5      5      (       d   e[        5       nUR                  X5      (       a   e[         R                  " [         R
                  " UR                  5      5      (       d   e[        5       nUR                  X5      (       a   e[         R                  " [         R
                  " UR                  5      5      (       d   e[        5       n[        S5       H  n[         R                  R                  SS5      S-  n [         R                  R                  SS5      S-  n[         R                  R                  5       U S S 2S4'   UR                  X5      (       d  M  [         R                  " UR                  5      R	                  5       (       a  M   e   [         R                  " / SQ/ SQ/ SQ/5      n [         R                  " / S	Q/ S	Q/ S
Q/5      n[        5       nUR                  X5      (       a   e[         R                  " [         R
                  " UR                  5      5      (       d   e[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/	5      n [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/	5      n[!        5       nUR                  X5      (       a   e[         R                  " [         R
                  " UR"                  S   R                  5      5      (       d   e[%        UR"                  5       HH  u  pEUS:w  d  M  [         R                  " [         R
                  " UR                  5      5      (       d  MH   e   UR&                   H>  n[         R                  " [         R
                  " UR                  5      5      (       d  M>   e   g )N)r/   r   r[   r   r   r   r2   )r   r   r   )r   r   r   rj   )r   r=   r   )r         )r   r   r   )r   r   r   )r   @   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r         )r   r   r   )r   ir   )r      r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )rA   r   r   r6   r   isnanr+   r   r   r   r   rB   rC   r   rH   asarrayr
   affines	enumerateinverse_affines)r{   rQ   r"   r   idxr   s         r#   test_degenerater   8  s.   !!C!E~~c''''66"((5<<()))) E~~c''''66"((5<<())))E~~c''''66"((5<<())))!E~~c''''66"((5<<())))  !E2YiinnQ"S(iinnQ"S( IINN$AqD	 >>#++r{{5<</H/L/L/N/NNN  ((Iy)4
5C
((Iy)4
5CE~~c''''66"((5<<()))) **
	
C **
	
C %&E~~c''''66"((5==+2234444 /!8vvbhhv}}56666 0 ''66"((6==12222 (r-   c                  v   [         R                  " SS//S-  5      n [        U 5      u  p[         R                  " [         R                  " U5      5      (       d   e[         R                  " [         R                  " U5      5      (       d   eUR
                  S:X  d   eUR
                  U R
                  :X  d   eg)z?Return nan matrix *of appropriate size* when point is repeated.gYi[R@gW@r=   r   N)rA   rH   r   r   r   r   )ptsmatpts_tfs      r#    test_normalize_degenerate_pointsr     s    
(([*-.2
3C.s3KC66"((3-    66"((6"####99<<399$$$r-   c                  R   [        5       n [        R                  " [        R                  " S5      R                  5       5      S-   [        R                  " S5      -   nUR                  SS5      nUR                  SS5      n[        R                  " U[        U 5      5      (       d   eg )Nz
        <ProjectiveTransform(matrix=
            [[1., 0., 0.],
             [0., 1., 0.],
             [0., 0., 1.]]) at
        z 0x[a-f0-9]+>0\. *0\.1\. *1\.)	r   reescapetextwrapdedentstripreplacer   reprr"   wants     r#   test_projective_reprr    s    !E
		OO eg		
 
	 ))C.	 	  <<)D<<)D88D$u+&&&&r-   c                     [        5       n [        R                  " [        R                  " S5      R                  5       5      nUR                  SS5      nUR                  SS5      n[        R                  " U[        U 5      5      (       d   eg )Nz
        <ProjectiveTransform(matrix=
            [[1., 0., 0.],
             [0., 1., 0.],
             [0., 0., 1.]])>
        r  r  r  r  )	r   r  r  r  r  r	  r
  r   strr  s     r#   test_projective_strr    so    !E99	
 %'	D <<)D<<)D88D#e*%%%%r-   c                    [         R                  " U " U5      U-
  S-  5      n[        U R                  R                  5       H{  nS Hr  n[         R
                  " U R                  5      nUR                  U==   U-  ss'   U R                  US9n[         R                  " U" U5      U-
  S-  5      nX:  a  Mr   e   M}     g )Nr   )gMbP?gMbPr   )rA   r   r   r+   sizecopyflatr   )	tfr{   rQ   baseliner   updater+   new_tfnew_ssqs	            r#   _assert_least_squaresr    s    vvr#w}*+H299>>"%FWWRYY'FKKNf$N\\\0FfffSkC/A56G%%% & #r-   c                 *   Sn[         R                  R                  SU45      S[         R                  " SSU-   5      -  -  n[         R                  " / SQ/ SQ/ SQ/ SQ/5      nU (       a6  U Vs/ s H  n[	        U5      PM     nnU Vs/ s H  n[	        U5      PM     nn[        US	9nU" U5      nU[         R                  R                  SU45      -   nU (       a  U Vs/ s H  n[	        U5      PM     nn[        US
9nUR                  X'5      (       d   e[         R                  " U5      n[        UR                  S S 2S S24   US S 2S S24   SS9  [        UR                  S S 2S4   US S 2S4   SS9  [        XU5        g s  snf s  snf s  snf )Nr=      r      )g333333@r&   g?r  )        r`   r&      )r  r  r`   )r  r  r  r`   r   r?   ra   r   r   )rA   rB   r   rH   r   r   r6   r   r   r+   r  )	r   ndimr{   r   cr  rQ   	dst_noisytf2s	            r#   test_estimate_affine_3dr&    sg   D
))

B:
&bii1t8.D)D
DCXX 		
F  #$1tAw$#)*6a$q'6*		'B
S'Cbii&&Dz22I #$1tAw$

.C<<'''' ZZF

1crc6*F1crc6NAF

1b5)6!R%=!D#I.! %* %s   /F
F!Fc                  $   [         R                  " [        5         [        SS9n S S S 5        [         R                  " [        5         [        [        R
                  " S5      5      n S S S 5        g ! , (       d  f       NQ= f! , (       d  f       g = f)Nr=   r?   r   )r   r   r   r	   rA   r   _s    r#   #test_fundamental_3d_not_implementedr*    sU    	*	+&a8 
,	*	+&rvvay1 
,	+ 
,	+	+	+s   
A0 B0
A>
Bc                      [         R                  " S5      n [        U 5      n[        [         R                  " U5      U 5        [        [         R                  " U[
        S9U R                  [
        5      5        g )Nr   )dtype)rA   r   r   r   rH   intastype)r   r  s     r#   test_array_protocolr/    sH    
&&)C	S	!B"s#"C(#**S/:r-   c                  ,   [         R                  " [         R                  R                  S5      [         R                  " S5      SS  4SS9n U S S R	                  5       n[        U5      n[        US9n[        [         R                  " U5      U 5        [        R                  " [        5         [        US S 5      nS S S 5        [        R                  " [        5         [        US S S9nS S S 5        g ! , (       d  f       N>= f! , (       d  f       g = f)N)r=   r   r   ra   r   r   r   )rA   concatenaterB   r   ravelr   r   r   rH   r   r   r    )r   v
mat_from_vr  r)  s        r#   0test_affine_transform_from_linearized_parametersr5    s    
.."))**62BFF1IbcNC!
LCCRA+A.J	
	+B"s#	z	"&q"v. 
#	z	"1Sb6* 
#	" 
#	"	"	"s   -C4D4
D
Dc                      [         R                  " [        5         [        SSS9n S S S 5        g ! , (       d  f       g = f)Nr   r=   r)   r@   )r   r   r    r   r(  s    r#   test_affine_params_nD_errorr8    s&    	z	"!A6 
#	"	"s   /
=c                      / SQ[         R                  " / SQ5      / SQ4/ SQ[         R                  " / SQ5      / SQ44 H  u  pn[        U5      n[        X0-  USS9  M      g )	N)r   r/   r   )Z   -   r;  )r<  gffffff@)ra   r  r!  )i   i)g?g@gffffffr2   r   )rA   radiansr   r   )r3  rK   rn   Rs       r#   test_euler_rotationr@    sT    	RZZ-}=	bjj02BC 8 #6*AE8Q7 r-   c                  ^   [        SS9n [        R                  " U 5      S   S:X  d   e[        SSS9n [        [        R                  " U 5      / SQ/ S	Q4   S5        [        R
                  " [        5         [        S
SS9nS S S 5        [        R
                  " [        5         [        SSS9nS S S 5        [        [        R                  [        R                  " S5      -  SS9n [        [        R                  " U 5      S S2S4   S5        g ! , (       d  f       N= f! , (       d  f       Nv= f)Nr   )rI   r3   r   )r   r   	   r=   rI   r@   )r   r   r2   r2   r   r   )r2   r   r   r   r   r2   )r   rx   r     r   )r   rD  r*   r@   ra   )	r   rA   rH   r   r   r   r    rD   r   )r  r)  s     r#   test_euclidean_param_defaultsrF    s    		/B88B<"""		!	DB"02DDEqI	z	"<J 
# 
z	"qA 
# 
RUURYYq\%9!	LB"crc1f%q) 
#	" 
#	"s   6D#D
D
D,c                      [         R                  " [        5         [        SSS9n S S S 5        [        SSS9n[	        U" / SQ/5      / SQ/5        g ! , (       d  f       N1= f)N)r   r   rx   r  r   rC  r=   r7  )r2   r2   r2   )r   r   r   )r   r   r    r   r   r)  r  s     r#    test_similarity_transform_paramsrI  "  sF    	z	"LK 
#	1Q	7BYK9+. 
#	"s   A
Ac                      [         R                  R                  S5      S-  [         R                  -  [         R                  -
  n [        U SS9n[	        U SS9n[        X5        g )Nr>   r   r=   rE  )rA   rB   rD   r   r   r   )rK   euclidsimilars      r#   test_euler_angle_consistencyrM  )  sM    YYd#a'"%%/"%%7FBF!6!DGf.r-   c                     [         R                  " [        5         [        SS9n S S S 5        [	        SS9n[         R                  " [        5         UR
                  n S S S 5        [         R                  " [        5         UR                  n S S S 5        g ! , (       d  f       Nv= f! , (       d  f       NO= f! , (       d  f       g = f)Nr=   r?   )r   r   r   r   r   r*   rg   rH  s     r#   test_2D_only_implementationsrO  0  sz    	*	+q1 
,		*B	*	+KK 
,	*	+HH 
,	+ 
,	+ 
,	+	+	+s#   
BB&?B7
B#&
B47
C)Xr  r  numpyrA   r   numpy.testingr   r   r   skimage.transformr   r   r   r	   r
   r   r   r   r   r   skimage.transform._geometricr   r   r   r   rH   r   r   r$   r,   r:   rT   rW   rY   r^   rc   re   rh   rp   rs   r}   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rB   rC   r   sqrtr+   tr6   r   r   r   r   r   r  r  r  r&  r*  r/  r5  r8  r@  rF  rI  rM  rO  r   r-   r#   <module>rX     sn   	    V V    	hh	8	7		'		&		'	 	hh	
A	
D		t	q		t	t	s	t	=B
6&C0886&=6-8`660&144nE +eT];J <J&Q0Qf/dU44nJQE6A2 +eT];5 <55A. +eT];5 <55)
50 299>>!Q#78j37CV<#4 VVAYQ^Q^Q,O	
 	#+RWWQZRWWQZQR0Sf	

 ()
)!	3	3C	=	C!$?%$?(&6!QHK3\%'.&&& +eT];/ </B2;
+7
8*$//r-   