a
    dr                     @   sp   d dl Z d dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ G dd dZG dd	 d	ZdS )
    N)	gradcheck)RANSACtransform_points)sampson_epipolar_distance)assert_closec                   @   s   e Zd Zdd Zejjdddd Zejjddejjddgd	d
dd Z	ejjddejjddgd	d
dd Z
ejjdddd ZdS )TestRANSACHomographyc                 C   sn   t jd t jdd||d}t jdd||d}tdj||d}t jd |||\}}|jdksjJ d S )Nr         devicedtype
homography   r   torchrandommanual_seedrandr   toshape)selfr   r   points1points2ransacH_ r   b/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/test/geometry/test_ransac.py
test_smoke   s    zTestRANSACHomography.test_smoke>might slightly and randomly imprecise due to RANSAC randomnessreasonc           	      C   s8  t jd t jd||d}|d d dt |d d   |d d< |dd d df dt |dd d df   |dd d df< dt jdd	d||d
 }t|d  |}|d d dd d f  d7  < tddd	dj||d
}||d |d \}}t	t|d  |d d d df |d d d df ddd d S )Nr   r   )r   r   r	   g?MbP?g      Y@      r
   i   r         ?inl_thmax_iterZrtolZatol)
r   r   r   ZeyeZ	rand_liker   r   r   r   r   )	r   r   r   r   Z
points_srcZ
points_dstr   dst_homo_srcr   r   r   r   test_dirty_points   s    *Bz&TestRANSACHomography.test_dirty_pointsdataZ
loftr_homoTZindirectc                 C   s   t jd t|||}t |d }||d  }|d }|d }tdddd	j||d
}|||\}	}
tt	|	d  |d  |d  ddd d S )Nr   H_gtr	   r	   pts0pts1r   r'   r%   r(   r
   r#   r+   
r   r   r   utilsdict_toZinverser   r   r   r   )r   r   r   r.   data_devhomography_gtpts_srcpts_dstr   r,   r   r   r   r   test_real_clean)   s    z$TestRANSACHomography.test_real_cleanc                 C   s   t jd t|||}t |d }||d  }|d }|d }|d }|d }	tdd	d
ddj||d}
|
||	\}}tt	|d  |d  |d  ddd d S )Nr   r0   r1   r2   r3   Zloftr_outdoor_tentatives0Zloftr_outdoor_tentatives1r   g      @   
   r)   r*   Zmax_lo_itersr
      g333333?r+   r4   )r   r   r   r.   r7   r8   r9   r:   kp1kp2r   r,   r   r   r   r   test_real_dirty9   s    z$TestRANSACHomography.test_real_dirtyz-find_homography_dlt is using try/except blockc                 C   s   t jd t jdd||d}t jdd||d}tdj||d}t jtdj||d}t|||d |||d ddd d S )Nr   r   r	   r
   r   g-C6?r+   	r   r   r   r   r   r   Zjitscriptr   r   r   r   r   r   modelZ	model_jitr   r   r   test_jitN   s    zTestRANSACHomography.test_jitN)__name__
__module____qualname__r   pytestmarkxfailr-   parametrizer;   rB   skiprG   r   r   r   r   r      s   	
r   c                   @   s   e Zd Zdd Zejjddejjddgddd	d
 Zejjddejjddgdddd Z	dd Z
ejjdddd ZdS )TestRANSACFundamentalc                 C   sb   t jd t jdd||d}t jdd||d}tdj||d}|||\}}|jdks^J d S )Nr      r	   r
   fundamentalr   r   )r   r   r   r   r   r   ZFmr   r   r   r   r   Y   s    z TestRANSACFundamental.test_smoker    r!   r.   Z
loftr_fundTr/   c                 C   s   t jd t|||}|d }|d }tdddddj||d	}|||\}}	t|d  |d  |d  d
ddk}
|
 	 dksJ d S )Nr   r2   r3   rR   r'   r%   r=   r>   r
   FZsquared      ?
r   r   r   r5   r6   r   r   r   sumitem)r   r   r   r.   r7   r9   r:   r   fundamental_matrixr   gross_errorsr   r   r   r;   a   s    z%TestRANSACFundamental.test_real_cleanz/might fail, because out F-RANSAC is not yet 7ptc                 C   s   t jd t|||}|d }|d }|d }|d }tdddd	d
j||d}	|	||\}
}t|d  |d  |
d  dddk}| 	 dk sJ d S )Nr   r2   r3   Zloftr_indoor_tentatives0Zloftr_indoor_tentatives1rR   rT   r%   r=   r>   r
   FrS   g      $@r	   rU   )r   r   r   r.   r7   r9   r:   r@   rA   r   rX   r   rY   r   r   r   rB   q   s    z%TestRANSACFundamental.test_real_dirtyc                 C   sv   t jd t jdd||d}t jdd||d}tdj||d}t j|}t|||d |||d ddd d S )Nr   rQ   r	   r
   rR   r#   r+   rC   rE   r   r   r   rG      s    zTestRANSACFundamental.test_jitz6RANSAC is random algorithm, so Jacobian is not definedc                    sp   t jd t jdd|t jdd}t jdd|t jd}tdj|t jd  fdd	}t|||fdd
slJ d S )Nr   rQ   r	   T)r   r   Zrequires_gradr
   rR   c                    s    | |d S )Nr   r   )p1p2rF   r   r   gradfun   s    z5TestRANSACFundamental.test_gradcheck.<locals>.gradfun)Zraise_exception)r   r   r   r   float64r   r   r   )r   r   r   r   r]   r   r\   r   test_gradcheck   s    z$TestRANSACFundamental.test_gradcheckN)rH   rI   rJ   r   rK   rL   rM   rN   r;   rB   rG   rO   r_   r   r   r   r   rP   X   s   rP   )rK   r   Ztorch.autogradr   Zkornia.testingZtestingr5   Zkornia.geometryr   r   Zkornia.geometry.epipolarr   r   r   rP   r   r   r   r   <module>   s   M