a
    d5                     @   s   d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dl	m
Z
mZmZmZmZ d dlmZ G dd dZG dd dZG d	d
 d
ZG dd dZG dd dZdS )    N)	gradcheck)find_homography_dltfind_homography_dlt_iteratedoneway_transfer_errorsample_is_valid_for_homographysymmetric_transfer_error)assert_closec                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestSampleValidationc                 C   s^   t jddgddgddgddgg||dd  }t||}t jdg|t jd}t ||sZJ d S )N              ?devicedtypeTtorchtensorr   boolequal)selfr   r   pts1maskexpected r   f/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/test/geometry/test_homography.py	test_good   s    ,
zTestSampleValidation.test_goodc                 C   s   t jddgddgddgddgg||dd  }t jddgddgddgddgg||dd  }t||}t jdg|t jd}t ||sJ d S )Nr
   r   r   Fr   )r   r   r   r   pts2r   r   r   r   r   test_bad   s
    ,,
zTestSampleValidation.test_badc                 C   sP   d}t j|dd||d}t j|dd||d}t||}|jt |gksLJ d S )N         r   )r   randr   shapeSize)r   r   r   
batch_sizer   r   r   r   r   r   
test_batch"   s
    
zTestSampleValidation.test_batchN)__name__
__module____qualname__r   r   r$   r   r   r   r   r	      s   r	   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestOneWayErrorc                 C   sZ   t jddd||d}t jddd||d}tdd||}t|||jdksVJ d S N      r   r      )r*   r+   r   r    utilscreate_random_homographytype_astor   r!   r   r   r   r   r   Hr   r   r   
test_smoke+   s    zTestOneWayError.test_smokec                 C   sb   d}t j|dd||d}t j|dd||d}tdd||}t|||j|dfks^J d S Nr   r,   r   r   r*   r-   r   r   r   r#   r   r   r3   r   r   r   r$   1   s
    zTestOneWayError.test_batchc                 C   sl   d\}}}t j||||t jdd}t j||||t jd}t|d||}tt|||fddshJ d S N)r   r,   r   Tr   r   Zrequires_gradr   r,   )raise_exception)	r   r    float64r.   r/   r0   r1   r   r   r   r   r#   
num_pointsZnum_dimspoints1points2r3   r   r   r   test_gradcheck8   s
    
zTestOneWayError.test_gradcheckc                 C   s   t jdd||dd  }t jddgddgddgg||dd  }t jg dg dg d	g||d
d  }t jg d||dd  }tt||||ddd d S )Nr,   r   r   r   r
          @r   r
   r   r
   r   r
   r
   r
   r   r   r   )r
   r   g      @-C6?atolrtol)r   zerosr   r   r   r   r   r   r   r   r3   r   r   r   r   
test_shift@   s
    &&zTestOneWayError.test_shiftNr%   r&   r'   r4   r$   r?   rK   r   r   r   r   r(   *   s   r(   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestSymmetricTransferErrorc                 C   sZ   t jddd||d}t jddd||d}tdd||}t|||jdksVJ d S r)   r   r    r.   r/   r0   r1   r   r!   r2   r   r   r   r4   I   s    z%TestSymmetricTransferError.test_smokec                 C   sb   d}t j|dd||d}t j|dd||d}tdd||}t|||j|dfks^J d S r5   rN   r6   r   r   r   r$   O   s
    z%TestSymmetricTransferError.test_batchc                 C   sl   d\}}}t j||||t jdd}t j||||t jd}t|d||}tt|||fddshJ d S r7   )	r   r    r:   r.   r/   r0   r1   r   r   r;   r   r   r   r?   V   s
    
z)TestSymmetricTransferError.test_gradcheckc                 C   s   t jdd||dd  }t jddgddgddgg||dd  }t jg dg dg d	g||d
d  }t jg d||dd  }tt||||ddd d S )Nr,   r   r   r   r
   r@   rA   rB   rC   rD   )r
   r@   g      $@rE   rF   )r   rI   r   r   r   rJ   r   r   r   rK   ^   s
    &&z%TestSymmetricTransferError.test_shiftNrL   r   r   r   r   rM   H   s   rM   c                   @   s   e Zd Zdd Zdd Zejdg ddd Zejdg dd	d
 Z	ejdg ddd Z
ejdg ddd Zejjejjejdk dddd ZdS )TestFindHomographyDLTc                 C   sX   t jddd||d}t jddd||d}t jdd||d}t|||}|jdksTJ d S )Nr*   r   r   r   r*   r,   r,   r   r    onesr   r!   r   r   r   r=   r>   weightsr3   r   r   r   r4   g   s
    z TestFindHomographyDLT.test_smokec                 C   sd   t jddd||d}t jddd||d}t jdd||d}td|d< t|||}|jdks`J d S )Nr*   r   r   r   nan)r   r   r   rP   )r   r    rR   floatr   r!   rS   r   r   r   test_nocrashn   s    z"TestFindHomographyDLT.test_nocrashbatch_size, num_points)r*   r   )r   r   )r,   r+   c                 C   sh   || }}t j||d||d}t j||d||d}t j||||d}	t|||	}
|
j|ddfksdJ d S Nr   r   r,   rQ   r   r#   r<   r   r   BNr=   r>   rT   r3   r   r   r   
test_shapev   s    
z TestFindHomographyDLT.test_shapec           
      C   sV   || }}t j||d||d}t j||d||d}t||d }	|	j|ddfksRJ d S rZ   )r   r    r   r!   )
r   r#   r<   r   r   r\   r]   r=   r>   r3   r   r   r   test_shape_noweights   s
    
z*TestFindHomographyDLT.test_shape_noweightsc                 C   s   || }}t j||d||d}t j||d||d}t j||||d}	t||d }
t|||	}|
j|ddfkr||j|ddfksJ t|
|ddd d S )Nr   r   r,   MbP?rE   rH   rG   )r   r    rR   r   r!   r   )r   r#   r<   r   r   r\   r]   r=   r>   rT   ZH_noweightsZH_withweightsr   r   r   test_points_noweights   s    
$z+TestFindHomographyDLT.test_points_noweightsr#   )r*   r   r   c           	      C   s   t j|dd||d}td|}|d t | }||d d ddddf  }tj||}t j|d||d}t|||}t	tj|||ddd d S 	N
   r   r   r,   g333333?r`   rE   ra   )
r   r    korniaeye_like	rand_likegeometrytransform_pointsrR   r   r   	r   r#   r   r   
points_srcr3   
points_dstrT   Zdst_homo_srcr   r   r   test_clean_points   s    z'TestFindHomographyDLT.test_clean_points1.76pytorch bug of incopatible types: #33546 fixed in v1.7reasonc           	      C   s   t j }d}|}t|D ]}t | t jddd|t jdd}t |}t |d }zt	t
|||fdddd W nJ ty   ||d krt	t
|||fddddsJ ntd	}Y qY n0 t |  d S d S 
Nrd   r*   r   Tr8   ).r   gư>)rH   rG   r9   l    )r   randominitial_seedrangemanual_seedr    r:   rg   	ones_liker   r   RuntimeError	randrange	r   r   rt   Zmax_number_of_checksZcurrent_seedirk   rl   rT   r   r   r   r?      s2    



	


z$TestFindHomographyDLT.test_gradcheckN)r%   r&   r'   r4   rW   pytestmarkparametrizer^   r_   rb   rm   gradskipifr   __version__r?   r   r   r   r   rO   f   s   




rO   c                   @   s   e Zd Zdd Zejdg ddd Zejddd	gd
d Zejj	ejj
ejdk dddd Zejj	ejddd	gdd ZdS )TestFindHomographyDLTIterc                 C   sZ   t jddd||d}t jddd||d}t jdd||d}t|||d}|jdksVJ d S )Nr*   r   r   r   r   rP   r   r    rR   r   r!   rS   r   r   r   r4      s
    z$TestFindHomographyDLTIter.test_smokerX   rY   c                 C   sj   || }}t j||d||d}t j||d||d}t j||||d}	t|||	d}
|
j|ddfksfJ d S )Nr   r   r   r,   r   r[   r   r   r   r^      s    
z$TestFindHomographyDLTIter.test_shaper#   r*   r   c           	      C   s   t j|dd||d}td|}|d t | }||d d ddddf  }tj||}t j|d||d}t|||d}t	tj|||ddd d S rc   
r   r    re   rf   rg   rh   ri   rR   r   r   rj   r   r   r   rm      s    z+TestFindHomographyDLTIter.test_clean_pointsrn   ro   rp   c           	      C   s   t j }d}|}t|D ]}t | t jddd|t jdd}t |}t |d }zt	t
|||fdddd W nJ ty   ||d krt	t
|||fddddsJ ntd	}Y qY n0 t |  d S d S rr   )r   rs   rt   ru   rv   r    r:   rg   rw   r   r   rx   ry   rz   r   r   r   r?      s:    



		


z(TestFindHomographyDLTIter.test_gradcheckc           	      C   s   t j|dd||d}td|}|dt |  }||d d ddddf  }dt j|dd||d }tj||}|d d dd d f  d7  < t j|d||d}t|||d	d}t	tj||d d d df |d d d df d
d
d d S )Nrd   r   r   r,   r*   g      Y@   g      ?r`   ra   r   rj   r   r   r   test_dirty_points_and_gradcheck  s    2z9TestFindHomographyDLTIter.test_dirty_points_and_gradcheckN)r%   r&   r'   r4   r|   r}   r~   r^   rm   r   r   r   r   r?   r   r   r   r   r   r      s   

+r   )rs   r|   r   Ztorch.autogradr   re   Zkornia.testingZtestingr.   Zkornia.geometry.homographyr   r   r   r   r   r   r	   r(   rM   rO   r   r   r   r   r   <module>   s   e