o
    j                     @   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   Zfoobar)r   SRCDSTpytestraises
ValueErrortform r    g/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/skimage/transform/tests/test_geometric.pytest_estimate_transform5   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_transform<   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_estimationA   s   02r5   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     r7   r   r-   dimensionality)nprandomrandpir   reshapematmulappendarrayr   r1   r'   translationr   )
src_pointsanglesrotation_matrixtranslation_vector
dst_pointsptpt_rdstr   estimated_rotationestimated_translationr    r    r!   test_3d_euclidean_estimationT   s"   



rN   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'   rC   r   r   )r   r   r'   rC   r(   r;   r>   )r'   rC   r   r3   r    r    r!   test_euclidean_initl   s$   

rP   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.   r/   )r   r   r   r   r(   r0   r   r1   r2   r    r    r!   test_similarity_estimation   s   ,.rQ   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 )	Nr6   r7   r8   r   r      r-   r9   )r;   r<   r=   r>   randintr   r?   r@   rA   rB   r   r1   r'   rC   r&   r   )rD   rE   r&   rF   rG   rH   rI   rJ   rK   r   rL   rM   Zestimated_scaler    r    r!   test_3d_similarity_estimation   s(   




rT   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'   rC   r   r         ?r+   )r   gs"   <)r-   g3   <gs"   ؼr   r   r-   )	r   r   r&   r'   rC   r(   r;   r>   rB   )r&   r'   rC   r   r3   r(   r    r    r!   test_similarity_init   sF   


rX   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   r7   )r   r   r   r   r0   r   r1   r(   r2   r    r    r!   test_affine_estimation      ,.rZ   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'   shearrC   r$   )r&   )r$   r$   )r   r   r&   r'   r\   rC   r(   )r&   r'   r\   rC   r   r3   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   rW   )r\   )333333?g?)r;   tanrB   r   r   r(   )r\   Zcxexpectedr   cyr    r    r!   test_affine_shear  s   
 
rc   c                  C   s8   t  } | ttsJ t| tt t| tt d S N)r	   r1   r   r   r   r0   r   r    r    r!   test_piecewise_affine#  s   re   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?rV   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;   rB   r?   r   r   r(   srcrK   r   Z	tform_refr    r    r!   "test_fundamental_matrix_estimation+  $   rn   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 Nr7   r-   r   r   rO   r   r   r-   )r   r$   r   )r   r;   eyerB   r   r(   r   	residuals)essential_matrix_tformr   rm   rK   r    r    r!   !test_fundamental_matrix_residualsb  s   ru   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 )Nrq   r^   rW   r7   rO   c                 S      g | ]}t |qS r    list.0pr    r    r!   
<listcomp>y      z3test_fundamental_matrix_forward.<locals>.<listcomp>matrixr   r-   r   rV   r   r   rV   r-   )r;   rr   rB   r   r(   r   r   )rv   r'   rC   rt   r(   r   rm   r    r    r!   test_fundamental_matrix_forwardm  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 Nr7   rq   rO   r   r-   r^   )r   r-   rV   )r   r;   rr   rB   r   r(   r   r0   )rt   r   rm   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 )Nrg   rV   r   rh   ri   )r;   rB   r?   r   Ztestingr   r0   r(   )rm   rK   r   Z	tform_invr    r    r!   *test_fundamental_matrix_inverse_estimation  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 )	Nrg   rV   r   rh   ri   r-   Zaxisg{Gz?)
r;   rB   r?   r   abssumZcolumn_stackoneslenall)rm   rK   r   r|   r    r    r!   +test_fundamental_matrix_epipolar_projection  s   0r   c                  C   s>   t tdtg dd} t| jtg ddd d S )Nr7   rW   rO   )	r   rV   r   r-   r   r   r   r   r   )r   r;   rr   rB   r   r(   r?   r   r    r    r!   test_essential_matrix_init  s   "r   c                  C   rf   )
Nrg   rV   r   rh   Z	essential)g"UǴg2FY?gU)gDMȿgkC8g˼Uס?)gCH?gx@ٔ+̿gӠh"rj   rk   rl   r    r    r!    test_essential_matrix_estimation  ro   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 )Nr7   rq   rO   r   r-   r   r   )r   r;   rr   rB   r   r   rm   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;   rr   rB   r   r0   r   r    r    r!   test_essential_matrix_inverse6  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 rp   )r   r;   rr   rB   r   rs   )r   rm   rK   r    r    r!   test_essential_matrix_residuals>  s   r   c                  C   rY   )Nr      )r   r   r   r   r0   r   r1   r(   r2   r    r    r!   test_projective_estimationG  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瞯<rV   r7   decimal)	r   r   r   r;   r   r   r(   shapearanger   Ztform_wZpoint_weightstform1r3   r    r    r!   #test_projective_weighted_estimationV  s    ,4r   c                 C   sB   t dtt}| rdd |jD }n|j}t|}t|j|j d S )Nr   c                 S   rw   r    rx   rz   r    r    r!   r}   t  r~   z(test_projective_init.<locals>.<listcomp>)r   r   r   r(   r   r   rv   r   r(   r3   r    r    r!   test_projective_inito  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*   orderrj   )r   r   r   r   r
   r1   r(   r   r3   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   rV   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   rw   r    rx   rz   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
   r0   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?r_   r#   r#   r7   rU   g433333)	r   r   r(   r   	__class__r   r0   r;   rr   )r   r3   r4   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 rd   )r   r
   r   r   	TypeError__add__)r   r3   r    r    r!   test_union_differing_types  s
   "r   r   r7   r   r   r   r%   r      r   rO   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 rd   )

isinstancer0   typer   r(   AttributeErrorr	   r   r   r   r   r    r    r!   test_inverse_all_transforms  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)matchrR   r7   d   r   r   )r   r   )r   r-   r-   )r   r   )r   r   r   r   ranger;   r<   r=   ZfinfofloatepsrB   r   isfiniter   )iHrm   r   rK   r    r    r!   test_geometric_tform  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   r7   r-   )r   r&   r+   )r   rC   r7   r7   )r7   r   r   )r'   r7   )r   rO   r8   )r   r   r   r   r;   zerosr   r   r   r
   r   r   rr   r    r    r    r!   test_invalid_input  s`   $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   rR   r   r   r   r-   )r   r   r   )r   r   r   r^   )r   r7   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   r1   r   isnanr(   r   r   r   r   r<   r=   r   rB   asarrayr	   Zaffines	enumerateZinverse_affines)rm   rK   r   r   idxr   r    r    r!   test_degenerate8  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@r7   r   N)r;   rB   r   r   r   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| 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   Z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copyZflatr   )	tfrm   rK   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 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 )Nr7      r      )g333333@r#   g?r   )        rU   r#      )r   r   rU   )r   r   r   rU   c                 S   rw   r    rx   r{   cr    r    r!   r}     r~   z+test_estimate_affine_3d.<locals>.<listcomp>c                 S   rw   r    rx   r   r    r    r!   r}     r~   r   c                 S   rw   r    rx   r   r    r    r!   r}     r~   r9   rV   r   r   )
r;   r<   r   rB   r   r1   r   r   r(   r   )rv   ndimrm   r   r   rK   Z	dst_noisyZ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 )Nr7   r9   r   )r   r   r   r   r;   rr   _r    r    r!   #test_fundamental_3d_not_implemented  s   "r   c                  C   s@   t d} t| }tt ||  tt j|td| t d S )Nr   )Zdtype)r;   rr   r   r   rB   intZastype)r   r   r    r    r!   test_array_protocol  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)r7   r   r   rV   r   r   r   )r;   Zconcatenater<   rr   Zravelr   r   r   rB   r   r   r   )r   vZ
mat_from_vr   r   r    r    r!   0test_affine_transform_from_linearized_parameters  s   (
"r   c                  C   s<   t t tddd} W d    d S 1 sw   Y  d S )Nr   r7   r&   r:   )r   r   r   r   r   r    r    r!   test_affine_params_nD_error  r   r   c                  C   sb   g dt g dg dfg dt g dg dffD ]\} }}t|}t||  |dd qd S )	N)r   r*   r   )Z   -   r   )r   gffffff@)rV   r   r   )i   i)g?g@gffffffr-   r   )r;   radiansr   r   )r   rE   ra   Rr    r    r!   test_euler_rotation  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   )rC   r.   r   )r   r   	   r7   rC   r:   )r   r   r-   r-   r   r   )r-   r   r   r   r   r-   )r   rj   r      r   )r   r  r'   r:   rV   )	r   r;   rB   r   r   r   r   r>   r   )r   r   r    r    r!   test_euclidean_param_defaults  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   rj   r   r   r  r7   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 )Nr8   r   r7   r  )r;   r<   r>   r   r   r   )rE   ZeuclidZ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 )Nr7   r9   )r   r   r   r
   r   r'   r\   r  r    r    r!   test_2D_only_implementations0  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   rB   r   r   r"   r)   r5   rN   rP   rQ   rT   rX   rZ   r]   rc   re   rn   ru   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r<   r=   rr   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07

327	




$$
$N

!	