
    a6dv                     T   d dl Z d dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZmZmZmZ  ej        ddgddgd	d
gddgddgddgddgddgg          Z ej        d d gd dgddgdd gddgddgddgddgg          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+ Z(ej)        *                    d,d-d.g          d/             Z+d0 Z,d1 Z-d2 Z.d3 Z/d4 Z0d5 Z1d6 Z2d7 Z3ej)        *                    d,d-d.g          d8             Z4d9 Z5d: Z6ej)        *                    d,d-d.g          d;             Z7d< Z8d= Z9d> Z:d? Z;d@ Z<dA Z=dB Z>dC Z?dD Z@dE ZAdF ZBej)        *                    d,d-d.g          dG             ZCdH ZDdI ZEdJ ZFdK ZGdL ZHdM ZIdN ZJdO ZKdP ZLdS )Q    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            	      @   dD ]5} t          | t          d dd d f         t          d dd d f                    6t          j        t
                    5  t          dt          d dd d f         t          d dd d f                    d d d            d S # 1 swxY w Y   d S )N)	euclidean
similarityaffine
projective
polynomial   foobar)r   SRCDSTpytestraises
ValueErrortforms    Flib/python3.11/site-packages/skimage/transform/tests/test_geometric.pytest_estimate_transformr$   )   s      : :5#bqb!!!e*c"1"aaa%j9999	z	"	" = =8S!QQQZRaRU<<<= = = = = = = = = = = = = = = = = =s   4BBBc                      t          dd          } t           | t                    t          t          | j                             d S )N)皙?      ?r   scalerotation)r   r   r   r   paramsr!   s    r#   test_matrix_transformr,   1   s?    *q999Es-c5<@@AAAAA    c                  X   t          dt          d dd d f         t          d dd d f         dz             } t           | t          d dd d f                   t          d dd d f         dz              t          | j        d         | j        d                    t          | j        d         | j        d                     t          dt          t                    }t          |                     |t                              t                     t          |j        d         |j        d                    t          |j        d         |j        d                     t                      }|                    t          t                    sJ t          |j        |j                   d S )Nr   r   
   r   r      r2   r   r2   r2   r   )r   r   r   r+   r   inverser   estimater"   tform2tform3s      r#   test_euclidean_estimationr:   6   sk   {CAAAJBQBE
RHHEc"1"aaa%j))3rr111u:?;;;T*EL,>???T*el4.@,@AAA  S#66Fvvc{{33S999d+V]4-@AAAd+v}T/B-BCCC  !!F??3$$$$$v}55555r-   c                     t           j                            dd          } t           j                            d          dz  t           j        z  t           j        z
  }t	          |          }t           j                            d          }g }| D ]n}|                    dd          }t          j        ||          |                    dd          z   }|                    d          }|                    |           ot          j        |          }t          d          }|
                    | |          sJ |j        }	|j        }
t          |	|           t          |
|           d S )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   I   sM   a((J Yd##a'"%/"%7F,V44O))$//J  zz!Qi..&&q!,,-kk!nn#*%%Ja000E>>*j11111!-*O<<<-/ABBBBBr-   c                     d} d}t          | |          }t          |j        |            t          |j        |           t          |j                  }t          |j        |            t          |j        |           d} d}t          | |          }t          |j        |            t          |j        |           t
          j        dz  } d}t          | |          }t          |j        |            t          |j        |           d S )Nr2   r1   r*   rI   r   r   )r   r   r*   rI   r+   rA   rD   )r*   rI   r"   r8   s       r#   test_euclidean_initrW   b   s   HKkJJJE111);777  --F222*K888 HKkJJJE111);777 uqyHKkJJJE111);77777r-   c                  L   t          dt          d dd d f         t          d dd d f                   } t           | t          d dd d f                   t          d dd d f                    t          | j        d         | j        d                    t          | j        d         | j        d                     t          dt          t                    }t          |                     |t                              t                     t          |j        d         |j        d                    t          |j        d         |j        d                     t                      }|                    t          t                    sJ t          |j        |j                   d S )Nr   r   r0   r1   r3   r4   )r   r   r   r   r+   r5   r   r6   r7   s      r#   test_similarity_estimationrY   ~   sc   |S!QQQZRaRUDDEc"1"aaa%j))3rr111u:666T*EL,>???T*el4.@,@AAA  c377Fvvc{{33S999d+V]4-@AAAd+v}T/B-BCCC !""F??3$$$$$v}55555r-   c                  H   t           j                            dd          } t           j                            d          dz  t           j        z  t           j        z
  }t           j                            dd          }t          |          |z  }t           j                            d          }g }| D ]n}|                    dd          }t          j        ||          |                    dd          z   }|                    d          }|                    |           ot          j	        |          }t          d          }	|	                    | |          sJ |	j        }
|	j        }|	j        }t          ||           t          ||           t          |
|           d S )	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 Yd##a'"%/"%7FIa$$E,V44u<O))$//J  zz!Qi..&&q!,,-kk!nn#*%%Jq111E>>*j11111!-kO-/ABBB///*O<<<<<r-   c                     d} d}d}t          | ||          }t          |j        |            t          |j        |           t          |j        |           t          |j                  }t          |j        |            t          |j        |           t          |j        |           d} d}d}t          | ||          }t          |j        |            t          |j        |           t          |j        |           d} t          j        dz  }d}t          | ||          }t          |j        |            t          |j        |           t          |j        |           d} t          j        dz  }d}t          j        g d	g d
g dg          }t          |          }t          |j        |            t          |j        |           t          |j        |           d S )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eh,79 9 9EU+++111);777 !..Fe,,,222*K888 EHKeh,79 9 9EU+++111);777 EuqyHKeh,79 9 9EU+++111);777 EuqyHKX...;;; yy" # #F  ''EU+++111);77777r-   c                     t          dt          d dd d f         t          d dd d f                   } t           | t          d dd d f                   t          d dd d f                    t          dt          t                    }t          |                     |t                              t                     t                      }|                    t          t                    sJ t          |j        |j                   d S )Nr   r=   )r   r   r   r   r5   r   r6   r+   r7   s      r#   test_affine_estimationre      s    xRaRUS!QQQZ@@Ec"1"aaa%j))3rr111u:666  #s33Fvvc{{33S999 F??3$$$$$v}55555r-   c                      d} d}d}d}t          | |||          }t          |j        |            t          |j        |           t          |j        |           t          |j        |           t          |j                  }t          |j        |            t          |j        |           t          |j        |           t          |j        |           t          t          d          j        t          d          j                   d S )	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%(%(35 5 5EU+++111U+++);777 U\**Fe,,,222e,,,*K888 c2228'j999?A A A A Ar-   c                     t                      } |                     t          t                    sJ t	           | t                    t                     t	          |                     t                    t                     d S N)r
   r6   r   r   r   r5   r!   s    r#   test_piecewise_affinerk     sa    $&&E>>#s#####c

C(((c**C00000r-   c                  6   t          j        g d                              dd          } t          j        g d                              dd          }t          d| |          }t          j        g dg dg dg          }t	          |j        |d	           d S )
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_estimationru     s    
( = = = > > ?Fgb!nn  ( < < < = = >EWR^^ 
 }c377E ;;;<<<:::< = =I i33333r-   c                  n   t          t          j        d          t          j        g d                    } t	                      }| j        |_        t          j        ddgddgddgg          }t          j        ddgddgddgg          }t          |                    ||          dz  g d           d S Nr=   r2   r   r   rV   r   r   r2   )r   r'   r   )r   rA   eyerH   r	   r+   r   	residuals)essential_matrix_tformr"   rs   rQ   s       r#   !test_fundamental_matrix_residualsr|   #  s    5(;(;= = =&((E)0EL
(QFQFQF+
,
,C
(QFQFQF+
,
,CS1114kkkBBBBBr-   array_like_inputFTc                 p   | rg dg dg dg}d}n*t          j        d          }t          j        g d          }t          ||          }| rd |j        D             }n|j        }t          |          }t          j        ddgdd	gd	d	gg          }t           ||          g d
g dg dg           d S )Nrx   r   r2   r   rb   r=   rV   c                 ,    g | ]}t          |          S  list.0ps     r#   
<listcomp>z3test_fundamental_matrix_forward.<locals>.<listcomp>8  s    AAAa$q''AAAr-   matrixr   r2   r   ra   r   r   ra   r2   )rA   ry   rH   r   r+   r	   r   )r}   r*   rI   r{   r+   r"   rs   s          r#   test_fundamental_matrix_forwardr   -  s     *IIyyy)))46!99hyyy))5{4 4 4 /AA#9#@AAA'.&f555E
(QFQFQF+
,
,Cc

ZZZZZZ$HIIIIIr-   c                  :   t          t          j        d          t          j        g d                    } t	                      }| j        |_        t          j        ddgddgddgg          }t          |                    |          g dg dg dg           d S Nr=   rx   rV   r   r2   r   )r   r2   ra   )r   rA   ry   rH   r	   r+   r   r5   )r{   r"   rs   s      r#   test_fundamental_matrix_inverser   @  s    5(;(;= = =&((E)0EL
(QFQFQF+
,
,Cc**"JJJ


;= = = = =r-   c                      t          t          j        d          t          j        g d                    } t	          | j        t          j        g d                              dd                     d S )Nr=   rb   rV   )	r   ra   r   r2   r   r   r   r   r   )r   rA   ry   rH   r   r+   rE   r!   s    r#   test_essential_matrix_initr   J  s}    $bfQii13)))1D1DF F FE66677??1EEG G G G Gr-   c                  6   t          j        g d                              dd          } t          j        g d                              dd          }t          d| |          }t          j        g dg dg dg          }t	          |j        |d	           d S )
Nrm   ra   r   rn   	essential)g"UǴg2FY?gU)gDMȿgkC8g˼Uס?)gCH?gx@ٔ+̿gӠh"rp   rq   rr   s       r#    test_essential_matrix_estimationr   Q  s    
( = = = > > ?Fgb!nn  ( < < < = = >EWR^^ 
 {C55E <<<;;;999; < <I i33333r-   c                      t          t          j        d          t          j        g d                    } t          j        ddgddgddgg          }t	           | |          g dg dg dg           d S )Nr=   rx   rV   r   r2   r   r   )r   rA   ry   rH   r   r"   rs   s     r#   test_essential_matrix_forwardr   d  s    $bfQii13)))1D1DF F FE
(QFQFQF+
,
,Cc

ZZZZZZ$HIIIIIr-   c                     t          t          j        d          t          j        g d                    } t          j        ddgddgddgg          }t	          |                     |          g dg dg dg           d S r   )r   rA   ry   rH   r   r5   r   s     r#   test_essential_matrix_inverser   k  s    $bfQii13)))1D1DF F FE
(QFQFQF+
,
,Cc**"JJJ


;= = = = =r-   c                  :   t          t          j        d          t          j        g d                    } t          j        ddgddgddgg          }t          j        ddgddgddgg          }t	          |                     ||          dz  g d           d S rw   )r   rA   ry   rH   r   rz   )r"   rs   rQ   s      r#   test_essential_matrix_residualsr   s  s    $bfQii13)))1D1DF F FE
(QFQFQF+
,
,C
(QFQFQF+
,
,CS1114kkkBBBBBr-   c                     t          dt          d dd d f         t          d dd d f                   } t           | t          d dd d f                   t          d dd d f                    t          dt          t                    }t          |                     |t                              t                     t                      }|                    t          t                    sJ t          |j        |j                   d S )Nr      )r   r   r   r   r5   r   r6   r+   r7   s      r#   test_projective_estimationr   {  s    |S!QQQZRaRUDDEc"1"aaa%j))3rr111u:666  c377Fvvc{{33S999 !""F??3$$$$$v}55555r-   c            
         t          dt          d dd d f         t          d dd d f                   } t          dt          d dd d f         t          d dd d f         t          j        d                    }t          | j        |j                   t          dt          t                    } t          dt          t          t          j        t          j        d                             }t          | j        |j                   t          j        t          j        d         dz             }d|d<   t          dt          t                    }t          dt          t          j        dt          j        d                   d d f         t          t          j        dt          j        d                   d d f         |          }t          |j        |j        d           d S )	Nr   r   r   r2   V瞯<ra   r=   decimal)	r   r   r   rA   onesr   r+   shapearanger"   tform_wpoint_weightstform1r8   s        r#   #test_projective_weighted_estimationr     s    |S!QQQZRaRUDDE !$RaRUS!QQQZE EGgn555 |S#66E !$c2739Q<+@+@B BGgn555 GCIaL1,--MM!c377F #BIb#)A,$?$?$B C #BIb#)A,$?$?$B C -/ /F v}a@@@@@@r-   c                     t          dt          t                    }| rd |j        D             }n|j        }t	          |          }t          |j        |j                   d S )Nr   c                 ,    g | ]}t          |          S r   r   r   s     r#   r   z(test_projective_init.<locals>.<listcomp>      000a$q''000r-   )r   r   r   r+   r   r   r}   r"   r+   r8   s       r#   test_projective_initr     s`    |S#66E 005<000 ((Fu|44444r-   c                      t          dt          t          d          } t           | t                    t          d           t	                      }|                    t          t          d          sJ t          |j        | j                   d S )Nr   r/   orderrp   )r   r   r   r   r   r6   r+   r"   r8   s     r#   test_polynomial_estimationr     sw    |S#R@@@Ec

C+++ !""F??32?.....u|44444r-   c            
         t          dt          t          d          } t          dt          t          dt          j        t          j        d                             }t          | j        |j                   t          j        t          j        d         dz             }d|d<   t          dt          t          d          }t          dt          t          j        dt          j        d                   d d f         t          t          j        dt          j        d                   d d f         d|          }t          |j        |j        d	
           d S )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 !$!$'))+1)>)>	@ @ @G
 gn555 GCIaL1,--MM!c3bAAAF #BIb#)A,$?$?$B C #BIb#)A,$?$?$B C&((5	7 7 7F
 v}a@@@@@@r-   c                     t          dt          t          d          }| rd |j        D             }n|j        }t	          |          }t          |j        |j                   d S )Nr   r/   r   c                 ,    g | ]}t          |          S r   r   r   s     r#   r   z(test_polynomial_init.<locals>.<listcomp>  r   r-   )r   r   r   r+   r   r   r   s       r#   test_polynomial_initr     se    |S#R@@@E 005<000 ((Fu|44444r-   c                      t          dt          t                    } t          dt          t          d          }t          |j        | j                   d S )Nr   r   r   )r   r   r   r   r+   r   s     r#   test_polynomial_default_orderr     sC    |S#66Ec3a@@@Fu|44444r-   c                      t          j        t                    5  t                                          d           d d d            d S # 1 swxY w Y   d S )Nr   )r   r   	Exceptionr   r5   r   r-   r#   test_polynomial_inverser     s    	y	!	! ) )%%a((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   "A		AAc                     t          dd          } t          dd          }t          dd          }| |z   }t          |j        |j                   t          dd          } t          dd          }t          dd          }| |z   }t          |j        |j                   |j        t
          k    sJ t          dd          }t          ||j        z   j        t          j        d                     t          dd          } t          dd          }t          d	d
          }| |j        z   }t          |j        |j                   d S )Nr&   g333333?r(   g?g|Gz?g333333?)r&   r&   r=   r`   g433333)	r   r   r+   r   	__class__r   r5   rA   ry   )r   r8   r9   r"   s       r#   
test_unionr     sL    sS999F sS999F x)DDDFVOEfm444:<<<F sS999F x)DDDFVOEfm444?11111*s;;;E.6q		BBB sS999F sS999F {YGGGFV^#Efm44444r-   c                      t                      } t                      }t          j        t                    5  |                     |           d d d            d S # 1 swxY w Y   d S rj   )r   r   r   r   	TypeError__add__)r   r8   s     r#   test_union_differing_typesr     s     ""F ""F	y	!	!  v                 s   AA Ac                     t                      } t          j        t                    5   | d           d d d            n# 1 swxY w Y   t          j        t                    5  |                     d           d d d            n# 1 swxY w Y   t          j        t                    5  |                     d           d d d            n# 1 swxY w Y   t          d          D ]}t          j        	                    dd          dz  }|d|d         dk    fxx         t          j
        t                    j        z  cc<   ||d         z  }t          j        |d         dz   |d	          z  dgd|d	         dz   |d          z  gddgg          }t          |          }  | |          }t          j        |                                          sJ d S )
Nr   r[   r=   d   r   )r   r   )r   r2   r2   )r   r   )r   r   r   NotImplementedErrorr5   r   rangerA   rB   rC   finfofloatepsrH   r   isfiniteall)r"   iHrs   rQ   s        r#   test_geometric_tformr     s{     E	*	+	+  a              	*	+	+  a              	*	+	+  a               2YY ' 'INN1a  3&	!QqTQY,28E??..	QtW hgkagX%q)414()F
   $A&&eCjj{3##%%&&&&#' 's5   A  AA$BB
B
*CCCc                  
   t          j        t                    5  t          t	          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          d           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          d           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          d           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          	           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          	           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d
          	           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d
          t	          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d
          t	          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d
          t	          j        d                     d d d            d S # 1 swxY w Y   d S )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   ry   r   r-   r#   test_invalid_inputr   &  s`   	z	"	" . .BHV,,---. . . . . . . . . . . . . . .	z	"	" * *(()))* * * * * * * * * * * * * * *	z	"	" . .BHV,,---. . . . . . . . . . . . . . .	z	"	" - -28F++,,,- - - - - - - - - - - - - - -	z	"	" : :rx//q9999: : : : : : : : : : : : : : :	z	"	" > >28F#3#31====> > > > > > > > > > > > > > >	z	"	" 9 98F##	9 	9 	9 	99 9 9 9 9 9 9 9 9 9 9 9 9 9 9 
z	"	" . .BHV,,---. . . . . . . . . . . . . . .	z	"	" < <""(6*:*:;;;;< < < < < < < < < < < < < < <	z	"	" : : (8(89999: : : : : : : : : : : : : : : 
z	"	" < < "(6*:*:;;;;< < < < < < < < < < < < < < <	z	"	" ' ' Xf%%	' 	' 	' 	'' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 
z	"	"     VAYY	  	  	  	                               
z	"	" = = "&))-/Xd^^	= 	= 	= 	== = = = = = = = = = = = = = = 
z	"	" = = "&))-/Xd^^	= 	= 	= 	== = = = = = = = = = = = = = = 
z	"	" < < VAYYBHTNN	< 	< 	< 	<< < < < < < < < < < < < < < < < < <s  "AAA,"BB!B>"C,,C03C0"D>>EE"$FFF6$G&&G*-G*
$H::H>H>"JJJ0#KK#&K##L22L69L6#NN	N	)#OOO<#P++P/2P/6RRR56S77S;>S;6UU"%U"c                      t          j        d          x} }t                      }|                    | |          rJ t          j        t          j        |j                            sJ t                      }|                    | |          rJ t          j        t          j        |j                            sJ t                      }|                    | |          rJ t          j        t          j        |j                            sJ t                      }|                    | |          rJ t          j        t          j        |j                            sJ t                      }t          d          D ]}t           j                            dd          dz  } t           j                            dd          dz  }t           j                                        | d d df<   |                    | |          r-t          j        |j                                                  sJ t          j        g dg dg dg          } t          j        g d	g d	g d
g          }t                      }|                    | |          rJ t          j        t          j        |j                            sJ t          j        g dg dg dg dg dg dg dg dg dg	          } t          j        g dg dg dg dg dg dg dg dg dg	          }t!                      }|                    | |          rJ t          j        t          j        |j        d         j                            sJ t%          |j                  D ]8\  }}|dk    r-t          j        t          j        |j                            rJ 9|j        D ]/}t          j        t          j        |j                            rJ 0d S )N)r/   r   r[   r   r   r   r2   )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   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)rs   rQ   r"   r   idxr   s         r#   test_degenerater   P  s   !!!C#!!E~~c3'''''6"(5<(()))))  E~~c3'''''6"(5<(()))))E~~c3'''''6"(5<(()))))!!E~~c3'''''6"(5<(()))))  !!E2YY 	P 	PinnQ""S(innQ""S( INN$$AAAqD	 >>#s++Or{5</H/H/L/L/N/NOOO
(IIIyyy)))4
5
5C
(IIIyyy)))4
5
5CE~~c3'''''6"(5<(())))) *}}}kkk:::{{{mmm]]]MMM  C
 *}}}mmmZZZmmm]]]MMM  C %&&E~~c3'''''6"(5=+23344444 // 7 7V!88vbhv}5566666' 3 36"(6=112222223 3r-   c                  <   t          j        ddggdz            } t          |           \  }}t          j        t          j        |                    sJ t          j        t          j        |                    sJ |j        dk    sJ |j        | j        k    sJ dS )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
3
3C.s33KC6"(3--     6"(6""#####9<39$$$$$$r-   c                  b   t                      } t          j        t          j        d                                                    dz   t          j        d          z   }|                    dd          }|                    dd          }t          j        |t          |                     sJ d S )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replacematchreprr"   wants     r#   test_projective_reprr     s    !!E9X_	  UWW  '' *,38D <<))D<<))D8D$u++&&&&&&&r-   c                  P   t                      } t          j        t          j        d                                                    }|                    dd          }|                    dd          }t          |           t          j        |t          |                     sJ d S )Nz
        <ProjectiveTransform(matrix=
            [[1., 0., 0.],
             [0., 1., 0.],
             [0., 0., 1.]])>
        r   r   r   r   )
r   r   r   r   r   r   r   printr   strr   s     r#   test_projective_strr     s    !!E9X_	  UWW D <<))D<<))D	$KKK8D#e**%%%%%%%r-   c                 l   t          j         | |          |z
  dz            }t          | j        j                  D ]v}dD ]q}t          j        | j                  }|j        |xx         |z  cc<   |                     |          }t          j         ||          |z
  dz            }||k    sJ rwd S )Nr   )gMbP?gMbPr   )rA   sumr   r+   sizecopyflatr   )	tfrs   rQ   baseliner   updater+   new_tfnew_ssqs	            r#   _assert_least_squaresr
    s    vrr#ww}*++H29>"" & &% 	& 	&FWRY''FKNNNf$NNN\\\00FfffSkkC/A566GX%%%%%	&& &r-   c                    d}t           j                            d|f          dt          j        dd|z             z  z  }t          j        g dg dg dg dg          }| rd	 |D             }d
 |D             }t	          |          } ||          }|t           j                            d|f          z   }| rd |D             }t	          |          }|                    ||          sJ t          j        |          }t          |j        d d d df         |d d d df         d           t          |j        d d df         |d d df         d           t          |||           d S )Nr=      r      )g333333@r&   g?r  )        r`   r&      )r  r  r`   )r  r  r  r`   c                 ,    g | ]}t          |          S r   r   r   cs     r#   r   z+test_estimate_affine_3d.<locals>.<listcomp>      $$$1tAww$$$r-   c                 ,    g | ]}t          |          S r   r   r  s     r#   r   z+test_estimate_affine_3d.<locals>.<listcomp>  s    ***a$q''***r-   r   c                 ,    g | ]}t          |          S r   r   r  s     r#   r   z+test_estimate_affine_3d.<locals>.<listcomp>  r  r-   r?   ra   r   r   )
rA   rB   r   rH   r   r6   r   r   r+   r
  )r}   ndimrs   r   r  rQ   	dst_noisytf2s           r#   test_estimate_affine_3dr    s   D
)

B:
&
&bi1t8.D.D)D
DCX	  F  +$$$$$**6***		'	'	'B
"S''Cbi&&Dz222I %$$$$$

.
.
.C<<Y''''' ZF
111crc6*F111crc6NAFFFF
111b5)6!!!R%=!DDDD#sI.....r-   c                  .   t          j        t                    5  t          d          } d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d                    } d d d            d S # 1 swxY w Y   d S )Nr=   r?   r   )r   r   r   r	   rA   ry   _s    r#   #test_fundamental_3d_not_implementedr    s   	*	+	+ 9 9&a8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9	*	+	+ 2 2&rvayy112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   7;;"B

BBc                     t          j        d          } t          |           }t          t          j        |          |            t          t          j        |t
                    |                     t
                               d S )Nr   )dtype)rA   ry   r   r   rH   intastype)r   r  s     r#   test_array_protocolr#    sc    
&))C	S	!	!B"s###"C(((#**S//:::::r-   c                     t          j        t           j                            d          t          j        d          dd          fd          } | d d                                         }t          |          }t          |          }t          t          j        |          |            t          j
        t                    5  t          |d d                   }d d d            n# 1 swxY w Y   t          j
        t                    5  t          |d d                   }d d d            d S # 1 swxY w Y   d S )N)r=   r   r   ra   r   )axisr   )rA   concatenaterB   ry   ravelr   r   r   rH   r   r   r    )r   v
mat_from_vr  r  s        r#   0test_affine_transform_from_linearized_parametersr*    s   
.			&	!	!26!99RSS>2  C 	CRCA+A..J	
	+	+	+B"s###	z	"	" / /&q"v../ / / / / / / / / / / / / / /	z	"	" + +1SbS6***+ + + + + + + + + + + + + + + + + +s$   C**C.1C.D44D8;D8c                      t          j        t                    5  t          dd          } d d d            d S # 1 swxY w Y   d S )Nr   r=   r)   r@   )r   r   r    r   r  s    r#   test_affine_params_nD_errorr-    s    	z	"	" 7 7!A6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   9= =c                      g d} t          j        g d          }g d}t          |          }t          || z  |d           d S )N)r   r/   r   )Z   -   r0  )r1  gffffff@r2   r   )rA   radiansr   r   )r(  rK   expectedRs       r#   test_euler_rotationr5    sS    

AZ%%F}}Hv&&AAx333333r-   c                     t          d          } t          j        |           d         dk    sJ t          dd          } t          t          j        |           g dg d	f         d           t	          j        t                    5  t          d
d          }d d d            n# 1 swxY w Y   t	          j        t                    5  t          dd          }d d d            n# 1 swxY w Y   t          t          j        t          j        d          z  d          } t          t          j        |           d ddf         d           d S )N)r   r   )rI   r3   r   )r   r   	   r=   rI   r@   )r   r   r2   r2   r   r   )r2   r   r   r   r   r2   )r   rp   r     r   )r   r9  r*   r@   ra   )	r   rA   rH   r   r   r   r    rD   r   )r  r  s     r#   test_euclidean_param_defaultsr;    s   		/	/	/B8B<<""""		!	D	D	DB"0002D2D2DDEqIII	z	"	" K K<JJJK K K K K K K K K K K K K K K 
z	"	" B BqAAAB B B B B B B B B B B B B B B 
RURYq\\%9!	L	L	LB"crc1f%q)))))s$   	B''B+.B+C))C-0C-c                      t          j        t                    5  t          dd          } d d d            n# 1 swxY w Y   t          dd          }t	           |g dg          g dg           d S )N)r   r   rp   r  r   r8  r=   r,  )r2   r2   r2   )r   r   r   )r   r   r    r   r   r  r  s     r#    test_similarity_transform_paramsr>    s    	z	"	" L LLKKKL L L L L L L L L L L L L L L	1Q	7	7	7BYYYK999+.....s   8<<c                      t           j                            d          dz  t           j        z  t           j        z
  } t          | d          }t	          | d          }t          ||           d S )Nr>   r   r=   r:  )rA   rB   rD   r   r   r   )rK   euclidsimilars      r#   test_euler_angle_consistencyrB  %  sd    Yd##a'"%/"%7FBBBF!6!DDDGfg.....r-   c                     t          j        t                    5  t          d          } d d d            n# 1 swxY w Y   t	          d          }t          j        t                    5  |j        } d d d            n# 1 swxY w Y   t          j        t                    5  |j        } d d d            d S # 1 swxY w Y   d S )Nr=   r?   )r   r   r   r   r   r*   rg   r=  s     r#   test_2D_only_implementationsrD  ,  sq   	*	+	+ 2 2q1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2		*	*	*B	*	+	+  K              	*	+	+  H                 s0   7;;+A??BB#B88B<?B<)Mr   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   rk   ru   r|   markparametrizer   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-  r5  r;  r>  rB  rD  r   r-   r#   <module>rK     s^   				      ) ) ) ) ) ) ) ) ) )E E E E E E E E E E E E E E E E E E E E E E E E
B B B B B B B B B B B B
 bhxwWgVfWg	 	 	 bhFI	4L	1I	4L	4L	3K	4L	 	 	= = =B B B
6 6 6&C C C28 8 886 6 6&= = =808 08 08f6 6 6A A A21 1 14 4 4&C C C +eT];;J J <;J$= = =G G G4 4 4&J J J= = =C C C6 6 6A A A4 +eT];;5 5 <;55 5 5A A A. +eT];;5 5 <;55 5 5) ) )
5 5 50  ' ' '<'< '< '<T93 93 93x% % %' ' ' & & &"& & & +eT];;/ / <;/>2 2 2; ; ;+ + +7 7 7
4 4 4* * *$/ / // / /    r-   