o
    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oleDg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 ]} t | td dd d f td dd d f  qtt t dtd dd d f td dd d f  W d    d S 1 sBw   Y  d S )N)	euclidean
similarityaffine
projective
polynomial   foobar)r   SRCDSTpytestraises
ValueErrortform r!   a/var/www/html/scripts/venv/lib/python3.10/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szJ t|j|j d S )Nr   r   
   r   r      r.   r   r.   r.   r   )r   r   r   r)   r   inverser   estimate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}|| q#t |}t	dd}|
| |sTJ |j}	|j}
t|	| t|
| d S )N     r8   r   r.   dimensionality)nprandomrandpir   reshapematmulappendarrayr   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svJ t|j|j d S )Nr   r   r,   r-   r/   r0   )r   r   r   r   r)   r1   r   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}|| q,t 	|}t
dd}	|	| |s]J |	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   r2   r(   rD   r'   r   )rE   rF   r'   rG   rH   rI   rJ   rK   rL   r    rM   rN   estimated_scaler!   r!   r"   test_3d_similarity_estimation   s,   






rV   c                  C   sL  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g d	g d
g dg}t |}t|j|  t|j| t|j| d S )Nr$   r.   r-   )r'   r(   rD   r   r         ?r,   )r   gs"   <)r.   g3   <gs"   ؼr   r   r.   )	r   r   r'   r(   rD   r)   r<   r?   rC   )r'   r(   rD   r    r4   r)   r!   r!   r"   test_similarity_init   sT   



rZ   c                  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sHJ t|j|j d S )Nr   r8   )r   r   r   r   r1   r   r2   r)   r3   r!   r!   r"   test_affine_estimation      ,.r\   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(   r^   rD   r)   )r'   r(   r^   rD   r    r4   r!   r!   r"   test_affine_init   s&   

r_   c                  C   s   d} t |  }t d|dgg dg dg}t| d}t|j| d} t | d  }t | d  }t d|dg|ddgg dg}t| d}t|j| d S )Nr$   r.   r   r   r.   r   rY   )r^   )333333?g?)r<   tanrC   r   r   r)   )r^   cxexpectedr    cyr!   r!   r"   test_affine_shear  s&   

rf   c                  C   s8   t  } | ttsJ t| tt t| tt d S N)r	   r2   r   r   r   r1   r   r!   r!   r"   test_piecewise_affine#  s   rh   c                  C   f   t g ddd} t g ddd}td| |}t 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?rX   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ᡖ?   r<   rC   r@   r   r   r)   srcrL   r    	tform_refr!   r!   r"   "test_fundamental_matrix_estimation+     
rr   c                  C   s   t tdtg d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 g d d S Nr8   r.   r   r   rP   r   r   r.   )r   r%   r   )r   r<   eyerC   r   r)   r   	residuals)essential_matrix_tformr    rp   rL   r!   r!   r"   !test_fundamental_matrix_residuals>  s   ry   array_like_inputFTc                 C   s   | rg dg dg dg}d}nt d}t g d}t||d}| r-dd |jD }n|j}t|d}t d	d	gd	d
gd
d
gg}t||g dg dg dg d S )Nru   r`   rY   r8   rP   c                 S      g | ]}t |qS r!   list.0pr!   r!   r"   
<listcomp>S      z3test_fundamental_matrix_forward.<locals>.<listcomp>matrixr   r.   r   rX   r   r   rX   r.   )r<   rv   rC   r   r)   r   r   )rz   r(   rD   rx   r)   r    rp   r!   r!   r"   test_fundamental_matrix_forwardH  s   

$r   c                  C   sl   t tdtg dd} t }| j|_tddgddgddgg}t||g dg dg dg d S Nr8   ru   rP   r   r.   r`   )r   r.   rX   )r   r<   rv   rC   r   r)   r   r1   )rx   r    rp   r!   r!   r"   test_fundamental_matrix_inverse[  s   
r   c                  C   s\   t g ddd} t g ddd}td| |}td|| }t j|jj|j d S )Nrj   rX   r   rk   rl   )r<   rC   r@   r   testingr   r1   r)   )rp   rL   r    	tform_invr!   r!   r"   *test_fundamental_matrix_inverse_estimatione  s   r   c               
   C   s~   t g ddd} t g ddd}td| |}t t jt |t t|f||  dd}t 	|dk s=J d S )	Nrj   rX   r   rk   rl   r.   axisg{Gz?)
r<   rC   r@   r   abssumcolumn_stackoneslenall)rp   rL   r    r   r!   r!   r"   +test_fundamental_matrix_epipolar_projectionx  s   0r   c                  C   s>   t tdtg dd} t| jtg ddd d S )Nr8   rY   rP   )	r   rX   r   r.   r   r   r   r   r   )r   r<   rv   rC   r   r)   r@   r   r!   r!   r"   test_essential_matrix_init  s   
r   c                  C   ri   )
Nrj   rX   r   rk   	essential)g"UǴg2FY?gU)gDMȿgkC8g˼Uס?)gCH?gx@ٔ+̿gӠh"rm   rn   ro   r!   r!   r"    test_essential_matrix_estimation  rs   r   c                  C   s\   t tdtg dd} tddgddgddgg}t| |g dg dg dg d S )Nr8   ru   rP   r   r.   r   r   )r   r<   rv   rC   r   r    rp   r!   r!   r"   test_essential_matrix_forward  s
   
$r   c                  C   s^   t tdtg dd} tddgddgddgg}t| |g dg dg dg d S r   )r   r<   rv   rC   r   r1   r   r!   r!   r"   test_essential_matrix_inverse  s   

r   c                  C   sr   t tdtg d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 g d d S rt   )r   r<   rv   rC   r   rw   )r    rp   rL   r!   r!   r"   test_essential_matrix_residuals  s   
r   c                  C   r[   )Nr      )r   r   r   r   r1   r   r2   r)   r3   r!   r!   r"   test_projective_estimation  r]   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瞯<rX   r8   decimal)	r   r   r   r<   r   r   r)   shapearanger    tform_w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   r{   r!   r|   r~   r!   r!   r"   r     r   z(test_projective_init.<locals>.<listcomp>)r   r   r   r)   r   r   rz   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J t|j| j d S )Nr   r+   orderrm   )r   r   r   r   r
   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   rX   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   r{   r!   r|   r~   r!   r!   r"   r     r   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 d    d S 1 sw   Y  d S )Nr   )r   r   NotImplementedErrorr
   r1   r!   r!   r!   r"   test_polynomial_inverse$     "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sAJ 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?ra   r$   r$   r8   rW   g433333)	r   r   r)   r   	__class__r   r1   r<   rv   )r   r4   r5   r    r!   r!   r"   
test_union)  s$   
r   c                  C   sF   t  } t }tt | | W d    d S 1 sw   Y  d S rg   )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
J zt| jjj| j W n ty%   t | ts#J Y nw t| jt| t t | tt	tfsOt| | j tt t| j|  tt d S d S rg   )

isinstancer1   typer   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 d    n1 sw   Y  tdD ]T} 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| srJ 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>   finfofloatepsrC   r   isfiniter   )iHrp   r    rL   r!   r!   r"   test_geometric_tformn  s    $r   c                   C   s  t t ttd W d    n1 sw   Y  t t ttd W d    n1 s3w   Y  t t ttd W d    n1 sOw   Y  t t ttd W d    n1 skw   Y  t t ttddd W d    n1 sw   Y  t t ttddd W d    n1 sw   Y  t t ttddd W d    n1 sw   Y  t t t	td W d    n1 sw   Y  t t t
tdd W d    n1 sw   Y  t t ttdd W d    n	1 sw   Y  t t ttdd	 W d    n	1 s:w   Y  t t ttdd	 W d    n	1 sXw   Y  t t ttd
d	 W d    n	1 svw   Y  t t ttd
tdd W d    n	1 sw   Y  t t ttd
tdd W d    n	1 sw   Y  t t ttd
tdd W d    d S 1 sw   Y  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   rv   r!   r!   r!   r"   test_invalid_input  sx   


$r   c                  C   s  t d } }t }|| |rJ t t |jsJ t }|| |r(J t t |js3J t }|| |r>J t t |jsIJ t	 }|| |rTJ t t |js_J t	 }t
dD ]/}t jddd } t jddd }t j | d d df< || |rt |j sJ qft g dg dg dg} t g d	g d	g d
g}t }|| |rJ t t |jsJ t g dg dg dg dg dg dg dg dg dg	} t g dg dg dg dg dg dg dg dg dg	}t }|| |rJ t t |jd js#J t|jD ]\}}|dkr=t t |jr=J q(|jD ]}t t |jrPJ qBd S )N)r+   r   rS   r   r   r   r.   )r   r   r   )r   r   r   r`   )r   r8   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   )r<   r   r   r2   r   isnanr)   r   r   r   r   r=   r>   r   rC   asarrayr	   affines	enumerateinverse_affines)rp   rL   r    r   idxr   r!   r!   r"   test_degenerate  sV    

r   c                  C   sj   t ddggd } t| \}}t t |sJ t t |s$J |jdks+J |j| jks3J 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   r   )ptsmat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| 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replacer   reprr    wantr!   r!   r"   test_projective_repr  s   	r   c                  C   sJ   t  } ttd }|dd}|dd}t|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   r   strr   r!   r!   r"   test_projective_str  s   	r   c           	      C   s   t | || d }t| jjD ]-}dD ](}t | j}|j|  |7  < | j|d}t ||| d }||ks=J qqd S )Nr   )gMbP?gMbPr   )r<   r   r   r)   sizecopyflatr   )	tfrp   rL   baseliner   updater)   new_tfnew_ssqr!   r!   r"   _assert_least_squares  s   r   c                 C   s.  d}t jd|fdt dd|   }t g dg dg dg dg}| r5d	d
 |D }dd
 |D }t|d}||}|t jd|f }| rQdd
 |D }t|d}|||s^J 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?r   )        rW   r$      )r   r   rW   )r   r   r   rW   c                 S   r{   r!   r|   r   cr!   r!   r"   r   /  r   z+test_estimate_affine_3d.<locals>.<listcomp>c                 S   r{   r!   r|   r  r!   r!   r"   r   0  r   r   c                 S   r{   r!   r|   r  r!   r!   r"   r   7  r   r:   rX   r   r   )
r<   r=   r   rC   r   r2   r   r   r)   r   )rz   ndimrp   r   r   rL   	dst_noisytf2r!   r!   r"   test_estimate_affine_3d"  s,   $


0(r  c                  C   sr   t t tdd} W d    n1 sw   Y  t t ttd} W d    d S 1 s2w   Y  d S )Nr8   r:   r   )r   r   r   r   r<   rv   _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   )dtype)r<   rv   r   r   rC   int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 d    n1 sEw   Y  t	
t t|d d d}W d    d S 1 sdw   Y  d S )N)r8   r   r   rX   r   r   r   )r<   concatenater=   rv   ravelr   r   r   rC   r   r   r   )r   v
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 d    d S 1 sw   Y  d S )Nr   r8   r'   r;   )r   r   r   r   r  r!   r!   r"   test_affine_params_nD_error_  r   r  c                  C   s<   g d} t g d}g d}t|}t||  |dd d S )N)r   r+   r   )Z   -   r  )r  gffffff@r.   r   )r<   radiansr   r   )r  rF   rd   Rr!   r!   r"   test_euler_rotationd  s
   r  c                  C   s   t dd} t| d dksJ t ddd} tt| g dg d	f d tt t d
dd}W d    n1 s<w   Y  tt t ddd}W d    n1 sWw   Y  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   r   r.   )r   rm   r      r   )r   r  r(   r;   rX   )	r   r<   rC   r   r   r   r   r?   r   )r   r  r!   r!   r"   test_euclidean_param_defaultsl  s   
  r  c                  C   s`   t t tddd} W d    n1 sw   Y  tddd}t|g dgg dg d S )N)r   r   rm   r   r   r  r8   r  )r.   r.   r.   )r   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   euclidsimilarr!   r!   r"   test_euler_angle_consistency  s   r$  c                  C   s   t t tdd} W d    n1 sw   Y  tdd}t t |j} W d    n1 s2w   Y  t t |j} W d    d S 1 sKw   Y  d S )Nr8   r:   )r   r   r   r
   r   r(   r^   r   r!   r!   r"   test_2D_only_implementations  s   
"r%  )Xr   r   numpyr<   r   numpy.testingr   r   r   skimage.transformr   r   r   r   r	   r
   r   r   r   r   skimage.transform._geometricr   r   r   r   rC   r   r   r#   r*   r6   rO   rQ   rR   rV   rZ   r\   r_   rf   rh   rr   ry   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   r>   rv   sqrtr)   tr2   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







$$
*<

