U
    ?h                     @   s  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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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d  Zd!d" Zd#d$ Zd%d& Zd'd( Z d)d* Z!d+d, Z"d-d. Z#d/d0 Z$d1d2 Z%d3d4 Z&d5d6 Z'd7d8 Z(d9d: Z)ej*+d;d<d=gd>d? Z,d@dA Z-dBdC Z.dDdE Z/dFdG Z0dHdI Z1dJdK Z2dLdM Z3dNdO Z4dPdQ Z5dRdS Z6ej*+d;d<d=gdTdU Z7dVdW Z8dXdY Z9ej*+d;d<d=gdZd[ Z:d\d] Z;d^d_ Z<d`da Z=dbdc Z>ej*+ddeej?@dededfe
dgdhdiedjdkdledmdjdieeAdedneBdo dneBdo d fdleeeAdedneBdo dneBdo d fdljCdfe  ZDEeeoeDgdpdq ZFdrds ZGdtdu ZHdvdw ZIdxdy ZJdzd{ ZKd|d} ZLd~d ZMej*+d;d<d=gdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdS )    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               	   C   s|   dD ]0} t | td dd d f td dd d f  qtt2 t dtd dd d f td dd d f  W 5 Q R X d S )N)	euclidean
similarityaffine
projective
polynomial   Zfoobar)r   SRCDSTpytestraises
ValueErrortform r    X/var/www/html/venv/lib/python3.8/site-packages/skimage/transform/tests/test_geometric.pytest_estimate_transform)   s    .r"   c                  C   s&   t ddd} t| ttt| j d S )N)皙?      ?r   scalerotation)r   r   r   r   paramsr   r    r    r!   test_matrix_transform1   s    r)   c                  C   s  t dtd dd d f td dd d f d } t| td dd d f td dd d f d  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stt|j|j d S )Nr   r   
   r   r      r-   r   r-   r-   r   )	r   r   r   r(   r   inverser   estimateAssertionErrorr   tform2tform3r    r    r!   test_euclidean_estimation6   s    02r6   c                  C   s   t jdd} t jdd t j t j }t|}t jd}g }| D ]<}|dd}t |||dd }|d}|| qFt |}t	dd}|
| |st|j}	|j}
t|	| t|
| d S )N     r8   r   r-   dimensionality)nprandomrandpir   reshapematmulappendarrayr   r1   r2   r'   translationr   )
src_pointsanglesrotation_matrixtranslation_vector
dst_pointsptpt_rdstr   estimated_rotationestimated_translationr    r    r!   test_3d_euclidean_estimationI   s&    





rO   c                  C   s   d} d}t | |d}t|j|  t|j| t |j}t|j|  t|j| d} d}t | |d}t|j|  t|j| tjd } d}t | |d}t|j|  t|j| d S )Nr-   r,   r'   rD   r   r   )r   r   r'   rD   r(   r<   r?   )r'   rD   r   r4   r    r    r!   test_euclidean_initb   s$    

rQ   c                  C   s   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stt|j|j d S )Nr   r   r+   r,   r.   r/   )	r   r   r   r   r(   r0   r   r1   r2   r3   r    r    r!   test_similarity_estimation~   s    ,.rR   c                  C   s   t jdd} t jdd t j t j }t jdd}t|| }t jd}g }| D ]<}|dd}t |||dd }|d}|| qXt 	|}t
dd}	|	| |st|	j}
|	j}|	j}t|| t|| t|
| d S )	Nr7   r8   r9   r   r      r-   r:   )r<   r=   r>   r?   randintr   r@   rA   rB   rC   r   r1   r2   r'   rD   r&   r   )rE   rF   r&   rG   rH   rI   rJ   rK   rL   r   rM   rN   Zestimated_scaler    r    r!   test_3d_similarity_estimation   s,    






rU   c                  C   sR  d} d}d}t | ||d}t|j|  t|j| t|j| t |j}t|j|  t|j| t|j| d} d}d}t | ||d}t|j|  t|j| t|j| d} tjd }d}t | ||d}t|j|  t|j| t|j| d} tjd }d}tdd	d
gdddgdddgg}t |}t|j|  t|j| t|j| d S )Nr#   r-   r,   )r&   r'   rD   r   r         ?r+   gs"   <g3   <gs"   ؼ)	r   r   r&   r'   rD   r(   r<   r?   rC   )r&   r'   rD   r   r4   r(   r    r    r!   test_similarity_init   sT    


rX   c                  C   s   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stt|j|j d S )Nr   r8   )	r   r   r   r   r0   r   r1   r2   r(   r3   r    r    r!   test_affine_estimation   s    ,.rY   c                  C   s   d} d}d}d}t | |||d}t|j|  t|j| t|j| t|j| t |j}t|j|  t|j| t|j| t|j| tt ddjt ddj d S )	N)r#   gp=
ף?r-   r#   r,   )r&   r'   shearrD   r$   )r&   )r$   r$   )r   r   r&   r'   rZ   rD   r(   )r&   r'   rZ   rD   r   r4   r    r    r!   test_affine_init   s&    

r[   c                  C   s   d} t |  }t d|dgdddgdddgg}t| d}t|j| d} t | d  }t | d  }t d|dg|ddgdddgg}t| d}t|j| d S )Nr#   r-   r   )rZ   )333333?g?)r<   tanrC   r   r   r(   )rZ   Zcxexpectedr   cyr    r    r!   test_affine_shear  s&    

r`   c                  C   s8   t  } | ttstt| tt t| tt d S N)r	   r1   r   r   r2   r   r0   r   r    r    r!   test_piecewise_affine#  s    rb   c                  C   s   t ddddddddd	d
ddddddgdd} t dddddddddddddd d!d"gdd}td#| |}t d$d%d&gd'd(d)gd*d+d,gg}t|j|d- d S ).N0l?cGP?z7e?Do?-lI?z0)>?㪲?l%?禺6?27߈?X/@AG>#@Q293L?Kh?K=U?0DK?rW   r   э?EA?1#Y?d9?lY?h!˛??Va3?CSvA?*D/X?綾Hhy?Rr?77M?XR>G?\mO?CP5zu?fundamentalgg˿gQKs+?ggag)n?g`k[9 ?g`~?g~K|ۿgķfᡖ?   r<   rC   r@   r   r   r(   srcrL   r   Z	tform_refr    r    r!   "test_fundamental_matrix_estimation+  sP                        r   c                  C   s   t tdtdddgd} t }| j|_tddgddgddgg}tddgddgddgg}t|||d dddg d S Nr8   r-   r   rP   r   r$   )r   r<   eyerC   r   r(   r   	residuals)essential_matrix_tformr   r   rL   r    r    r!   !test_fundamental_matrix_residuals>  s     r   array_like_inputFTc                 C   s   | r&dddgdddgdddgg}d}nt d}t dddg}t||d}| rbdd |jD }n|j}t|d}t ddgddgddgg}t||dd	dgdd	dgdd	dgg d S )
Nr-   r   )r-   r   r   r8   rP   c                 S   s   g | ]}t |qS r    list.0pr    r    r!   
<listcomp>S  s     z3test_fundamental_matrix_forward.<locals>.<listcomp>matrixrW   )r<   r   rC   r   r(   r   r   )r   r'   rD   r   r(   r   r   r    r    r!   test_fundamental_matrix_forwardH  s    
 
r   c                  C   st   t tdtdddgd} t }| j|_tddgddgddgg}t||dddgdddgdddgg d S Nr8   r-   r   rP   rW   )r   r<   r   rC   r   r(   r   r0   )r   r   r   r    r    r!   test_fundamental_matrix_inverse[  s     
r   c                  C   s   t ddddddddd	d
ddddddgdd} t dddddddddddddd d!d"gdd}td#| |}td#|| }t j|jj|j d S )$Nrc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rW   r   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   )r<   rC   r@   r   Ztestingr   r0   r(   )r   rL   r   Z	tform_invr    r    r!   *test_fundamental_matrix_inverse_estimatione  sJ                        r   c                  C   s   t ddddddddd	d
ddddddgdd} t dddddddddddddd d!d"gdd}td#| |}t t jt |t t|f||  d$d%}t 	|d&k st
d S )'Nrc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rW   r   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r-   Zaxisg{Gz?)r<   rC   r@   r   abssumZcolumn_stackoneslenallr2   )r   rL   r   r   r    r    r!   +test_fundamental_matrix_epipolar_projectionx  sJ                        0r   c                  C   sN   t tdtdddgd} t| jtdddddddddg	dd d S )Nr8   r   r-   rP   rW   )r   r<   r   rC   r   r(   r@   r   r    r    r!   test_essential_matrix_init  s    
"r   c                  C   s   t ddddddddd	d
ddddddgdd} t dddddddddddddd d!d"gdd}td#| |}t d$d%d&gd'd(d)gd*d+d,gg}t|j|d- d S ).Nrc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rW   r   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   Z	essentialg"UǴg2FY?gUgDMȿgkC8g˼Uס?gCH?gx@ٔ+̿gӠh"r   r   r   r    r    r!    test_essential_matrix_estimation  sP                        r   c                  C   sd   t tdtdddgd} tddgddgddgg}t| |dddgdddgdddgg d S r   )r   r<   r   rC   r   r   r   r    r    r!   test_essential_matrix_forward  s
    
r   c                  C   sf   t tdtdddgd} tddgddgddgg}t| |dddgdddgdddgg d S r   )r   r<   r   rC   r   r0   r   r    r    r!   test_essential_matrix_inverse  s    

r   c                  C   sv   t tdtdddgd} tddgddgddgg}tddgddgddgg}t| ||d dddg d S r   )r   r<   r   rC   r   r   )r   r   rL   r    r    r!   test_essential_matrix_residuals  s    
r   c                  C   s   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stt|j|j d S )Nr      )	r   r   r   r   r0   r   r1   r2   r(   r3   r    r    r!   test_projective_estimation  s    ,.r   c               	   C   s"  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d}t| j|j t dtt} t dttttjd }t| j|j ttjd d }d|d< t dtt}t dttdtjd d d f ttdtjd d d f |}t|j|jdd d S )	Nr   r   r   r-   V瞯<rW   r8   decimal)	r   r   r   r<   r   r   r(   shapearanger   Ztform_wZpoint_weightstform1r4   r    r    r!   #test_projective_weighted_estimation  s.    ,    r   c                 C   sB   t dtt}| r"dd |jD }n|j}t|}t|j|j d S )Nr   c                 S   s   g | ]}t |qS r    r   r   r    r    r!   r     s     z(test_projective_init.<locals>.<listcomp>)r   r   r   r(   r   r   r   r   r(   r4   r    r    r!   test_projective_init  s    r   c                  C   sL   t dttdd} t| ttd t }|jttdds:tt|j| j d S )Nr   r*   orderr   )r   r   r   r   r
   r1   r2   r(   r   r4   r    r    r!   test_polynomial_estimation  s
    r   c               	   C   s   t dttdd} t dttdttjd d}t| j|j ttjd d }d|d< t dttdd}t dttdtjd d d f ttdtjd d d f d|d}t|j|jd	d
 d S )Nr   r*   r   r   )r   weightsr-   r   rW   r   r   )	r   r   r   r<   r   r   r   r(   r   r   r    r    r!   #test_polynomial_weighted_estimation  s$    r   c                 C   sF   t dttdd}| r&dd |jD }n|j}t|}t|j|j d S )Nr   r*   r   c                 S   s   g | ]}t |qS r    r   r   r    r    r!   r     s     z(test_polynomial_init.<locals>.<listcomp>)r   r   r   r(   r
   r   r   r    r    r!   test_polynomial_init  s    r   c                  C   s.   t dtt} t dttdd}t|j| j d S )Nr   r   r   )r   r   r   r   r(   r   r    r    r!   test_polynomial_default_order  s    r   c                	   C   s&   t t t d W 5 Q R X d S )Nr   )r   r   NotImplementedErrorr
   r0   r    r    r    r!   test_polynomial_inverse$  s    r   c                  C   s   t ddd} t ddd}t ddd}| | }t|j|j tddd} t ddd}t ddd}| | }t|j|j |jtksttddd}t||j jt	d t ddd} t ddd}t d	d
d}| |j }t|j|j d S )Nr#   333333?r%   ?g|Gz?r\   r#   r#   r8   rV   g433333)
r   r   r(   r   	__class__r   r2   r0   r<   r   )r   r4   r5   r   r    r    r!   
test_union)  s$    
r   c               	   C   s0   t  } t }tt | | W 5 Q R X d S ra   )r   r
   r   r   	TypeError__add__)r   r4   r    r    r!   test_union_differing_typesA  s    r   r   r8   r   r   r   r%   r      r   rP   r#   r-   r   c                 C   s   t | jt| stzt| jjj| j W n" tk
rL   t | tsHtY nX t| jt| t t | t	t
tfst| | j tt t| j|  tt d S ra   )
isinstancer0   typer2   r   r(   AttributeErrorr	   r   r   r   r   r    r    r!   test_inverse_all_transformsH  s    r   c               	   C   s   t jtdd t  W 5 Q R X tdD ]} tjddd }|d|d dkf  tt	j
7  < ||d  }t|d	 d
 |d   d
gd
|d d
 |d	   gd
d
gg}t|}||}t| s(tq(d S )Nz Can't instantiate abstract class)matchrS   r8   d   r   r   )r   r   )r   r-   r-   )r   r   )r   r   r   r   ranger<   r=   r>   ZfinfofloatepsrC   r   isfiniter   r2   )iHr   r   rL   r    r    r!   test_geometric_tformn  s    $r   c                	   C   sx  t t ttd W 5 Q R X t t ttd W 5 Q R X t t ttd W 5 Q R X t t ttd W 5 Q R X t t ttddd W 5 Q R X t t ttddd W 5 Q R X t t ttddd W 5 Q R X t t t	td W 5 Q R X t t t
tdd W 5 Q R X t t ttdd W 5 Q R X t t ttdd	 W 5 Q R X t t ttdd	 W 5 Q R X t t ttd
d	 W 5 Q R X t t ttd
tdd W 5 Q R X t t ttd
tdd W 5 Q R X t t ttd
tdd W 5 Q R X d S )N)r   r8   r-   )r   r&   r+   )r   rD   r8   r8   )r8   r   r   )r'   r8   )r   rP   r9   )r   r   r   r   r<   zerosr   r   r   r
   r   r   r   r    r    r    r!   test_invalid_input  s\     

 r   c                  C   s  t d } }t }|| |r$tt t |js:tt }|| |rPtt t |jsftt	 }|| |r|tt t |jstt
 }|| |rtt t |jstt
 }tdD ]^}t jddd } t jddd }t j | d d df< || |rt |j stqt dddgdddgdddgg} t dddgdddgdddgg}t	 }|| |rtt t |jstt dd	d
gdd
d
gddd	gdddgdddgddd
gdd	d	gdd
d
gdd	d
gg	} t dddgdddgdddgdddgdddgdddgdddgdddgdddgg	}t }|| |r\tt t |jd jsztt|jD ],\}}|dkrt t |jrtq|jD ]}t t |jrtqd S )N)r*   r   rS   r   r   r   r-   r   r8         r   @         i   )r<   r   r   r1   r2   r   isnanr(   r   r   r   r   r=   r>   r   rC   asarrayr	   Zaffines	enumerateZinverse_affines)r   rL   r   r   idxr   r    r    r!   test_degenerate  sl    """              

r   c                  C   sj   t ddggd } t| \}}t t |s4tt t |sHt|jdksVt|j| jksftdS )z?Return nan matrix *of appropriate size* when point is repeated.gYi[R@gW@r8   r   N)r<   rC   r   r   r   r2   r   )ZptsmatZpts_tfr    r    r!    test_normalize_degenerate_points  s    r   c                  C   sX   t  } ttd d td }|dd}|dd}t|t| sTt	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replacer   reprr2   r   Zwantr    r    r!   test_projective_repr  s    	r   c                  C   sJ   t  } ttd }|dd}|dd}t|t| sFt	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   r   strr2   r   r    r    r!   test_projective_str  s    
	r   c           	      C   s   t | || d }t| jjD ]Z}dD ]P}t | j}|j|  |7  < | j|d}t ||| d }||ks*tq*q"d S )Nr   )gMbP?gMbPr   )	r<   r   r   r(   sizecopyZflatr   r2   )	tfr   rL   Zbaseliner   updater(   Znew_tfZnew_ssqr    r    r!   _assert_least_squares  s    r   c              	   C   s>  d}t jd|fdt dd|   }t ddddgdd	dd
gddd	dgdddd	gg}| rzdd |D }dd |D }t|d}||}|t jd|f }| rdd |D }t|d}|||stt |}t|j	d d d df |d d d df dd t|j	d d df |d d df dd t
||| d S )Nr8      r      g333333@r#   g?g        rV      c                 S   s   g | ]}t |qS r    r   r   cr    r    r!   r   /  s     z+test_estimate_affine_3d.<locals>.<listcomp>c                 S   s   g | ]}t |qS r    r   r   r    r    r!   r   0  s     r   c                 S   s   g | ]}t |qS r    r   r   r    r    r!   r   7  s     r:   rW   r   r   )r<   r=   r   rC   r   r1   r2   r   r   r(   r   )r   ndimr   r   r   rL   Z	dst_noisyZtf2r    r    r!   test_estimate_affine_3d"  s,    $






0(r  c               	   C   sH   t t tdd} W 5 Q R X t t ttd} W 5 Q R X d S )Nr8   r:   r   )r   r   r   r   r<   r   _r    r    r!   #test_fundamental_3d_not_implementedB  s    r  c                  C   s@   t d} t| }tt ||  tt j|td| t d S )Nr   )Zdtype)r<   r   r   r   rC   intZastype)r   r   r    r    r!   test_array_protocolI  s    
r  c               	   C   s   t jt jdt ddd  fdd} | d d  }t|}t|d}tt ||  t	
t t|d d }W 5 Q R X t	
t t|d d d}W 5 Q R X d S )N)r8   r   r   rW   r   r   r   )r<   Zconcatenater=   r   Zravelr   r   r   rC   r   r   r   )r   vZ
mat_from_vr   r  r    r    r!   0test_affine_transform_from_linearized_parametersP  s     
r  c               	   C   s&   t t tddd} W 5 Q R X d S )Nr   r8   r&   r;   )r   r   r   r   r  r    r    r!   test_affine_params_nD_error_  s    r
  c                  C   sB   dddg} t dddg}dddg}t|}t||  |dd d S )	Nr   r*   Z   -   gffffff@r-   r   )r<   radiansr   r   )r  rF   r^   Rr    r    r!   test_euler_rotationd  s
    

r  c               	   C   s   t dd} t| d dks tt ddd} tt| ddddd	d	gdd	dd	ddgf d tt t d
dd}W 5 Q R X tt t ddd}W 5 Q R X t tjt	d dd} tt| d ddf d d S )Nr   )rD   r.   r   )r   r   	   r8   rD   r;   r-   r   )r   r   r      r   )r   r  r'   r;   rW   )
r   r<   rC   r2   r   r   r   r   r?   r   )r   r  r    r    r!   test_euclidean_param_defaultsl  s    
0r  c               	   C   sP   t t tddd} W 5 Q R X tddd}t|dddggdddgg d S )N)r   r   r   r   r   r  r8   r	  r-   )r   r   r   r   r   r  r   r    r    r!    test_similarity_transform_params~  s    r  c                  C   sB   t jdd t j t j } t| dd}t| dd}t|| d S )Nr9   r   r8   r  )r<   r=   r?   r   r   r   )rF   ZeuclidZsimilarr    r    r!   test_euler_angle_consistency  s    r  c               	   C   sf   t t tdd} W 5 Q R X tdd}t t |j} W 5 Q R X t t |j} W 5 Q R X d S )Nr8   r:   )r   r   r   r
   r   r'   rZ   r  r    r    r!   test_2D_only_implementations  s    
r  )Xr   r   numpyr<   r   Znumpy.testingr   r   r   Zskimage.transformr   r   r   r   r	   r
   r   r   r   r   Zskimage.transform._geometricr   r   r   r   rC   r   r   r"   r)   r6   rO   rQ   rR   rU   rX   rY   r[   r`   rb   r   r   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   r>   r   sqrtr(   tr1   r   r   r   r   r   r   r   r   r  r  r  r  r
  r  r  r  r  r  r    r    r    r!   <module>   s   0
3







  
*<

