a
    d                     @   s\   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ G dd deZ	G dd deZ
dS )	    N)	gradcheck)ParametrizedLinefit_line)
BaseTesterc                   @   s   e Zd 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
ejjdddd Zejjdddd Zejjdddd Zejjdddd Zejjdddd ZdS )TestParametrizedLinec                 C   sb   t jddg||d}t jddg||d}t||}| |j| | |j| | dks^J d S )N        devicedtype      ?   )torchtensorr   assert_closeorigin	directionZdim)selfr	   r
   p0Zd0Zl0 r   `/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/test/geometry/test_line.py
test_smoke
   s    
zTestParametrizedLine.test_smokec                 C   sh   t jddg||d}t jddg||d}t||}t jddg||d}| |j| | |j| d S )Ng      r   r   -?)r   r   r   throughr   r   r   )r   r	   r
   r   p1l1Zdirection_expectedr   r   r   test_through   s    z!TestParametrizedLine.test_throughc                 C   s   t jddg||d}t jddg||d}t||}| |dt jddg||d | |dt jddg||d | |dt jddg||d d S Nr   r   r   g      ?)r   r   r   r   r   point_at)r   r	   r
   r   r   r   r   r   r   test_point_at   s    ""z"TestParametrizedLine.test_point_atc           	      C   sv   t jddg||d}t jddg||d}t jddg||d}t jddg||d}t||}||}| || d S r   r   r   r   r   
projectionr   	r   r	   r
   r   r   p2Zp3_expectedr   Zp3r   r   r   test_projection1"   s    
z%TestParametrizedLine.test_projection1c           	      C   sv   t jddg||d}t jddg||d}t jddg||d}t jddg||d}t||}||}| || d S r   r   r!   r   r   r   test_projection2+   s    
z%TestParametrizedLine.test_projection2c                 C   sr   t jddg||d}t jddg||d}t||}t jddg||d}t jddg||d}| ||| d S )Nr   r   r   g       @)r   r   r   r   r   r    )r   r	   r
   r   r   r   pointZpoint_projectionr   r   r   test_projection4   s    z$TestParametrizedLine.test_projectionc                 C   sn   t jddg||d}t jddg||d}t||}t jddg||d}t jd||d}| ||| d S )Nr   r   r         @)r   r   r   r   r   Zdistancer   r	   r
   r   r   r   r%   Zdistance_expectedr   r   r   test_distance<   s    z"TestParametrizedLine.test_distancec                 C   sn   t jddg||d}t jddg||d}t||}t jddg||d}t jd||d}| ||| d S )Nr   r   r   r'   g      0@)r   r   r   r   r   Zsquared_distancer(   r   r   r   test_squared_distanceD   s    z*TestParametrizedLine.test_squared_distancenot implemented yetreasonc                 C   s   d S Nr   r   r	   r
   r   r   r   test_cardinalityL   s    z%TestParametrizedLine.test_cardinalityc                 C   s   d S r.   r   r/   r   r   r   test_jitP   s    zTestParametrizedLine.test_jitc                 C   s   d S r.   r   r/   r   r   r   test_exceptionT   s    z#TestParametrizedLine.test_exceptionc                 C   s   d S r.   r   r/   r   r   r   test_moduleX   s    z TestParametrizedLine.test_modulec                 C   s   d S r.   r   )r   r	   r   r   r   test_gradcheck\   s    z#TestParametrizedLine.test_gradcheckN)__name__
__module____qualname__r   r   r   r#   r$   r&   r)   r*   pytestmarkskipr0   r1   r2   r3   r4   r   r   r   r   r   	   s$   		



r   c                   @   s   e Zd Zejddejdddd Zdd Zd	d
 Zejj	dddd Z
ejj	dddd Zejj	dddd Zejj	dddd Zejj	dddd ZdS )TestFitLineB)   r   D)r         c           
      C   s   d}t j|||||d}t|}t|ts.J |jj||fksBJ |jj||fksVJ |j|d k slJ |j|d k sJ t|\}}	|j|k sJ |j|	k sJ d S )N
   r   r   r=   )	r   Zonesr   
isinstancer   r   shaper   all)
r   r	   r
   r<   r>   NZpointsliner   r   r   r   r   r   b   s    zTestFitLine.test_smokec                 C   s   t jddg||d}t jddg||d}t||}d}g }t dd|D ]}||}	||	 qJt |}t|d  }
t jddg||d}t j	j
|
j|d}t jdg||d}| | | d S )Nr   r   r   rA   r   r   r   r   r   Zlinspacer   appendstackr   nnZ
functionalZcosine_similarityr   r   absr   r	   r
   r   r   r   Z
num_pointsptstr"   Zline_estZdir_expZ	angle_estZ	angle_expr   r   r   test_fit_line2s   s    

zTestFitLine.test_fit_line2c                 C   s   t jg d||d}t jg d||d}t||}d}g }t dd|D ]}||}	||	 qJt |}t|d  }
t jg d||d}t j	j
|
j|d}t jdg||d}| | | d S )	N)r   r   r   r   )r   r   r   rA   rG   )r   r   r   rH   r   rI   rN   r   r   r   test_fit_line3   s    

zTestFitLine.test_fit_line3z&numerical do not match with analyticalr,   c                 C   sP   dd }t jddd|t jdd}t jdd|t jdd}t|||fdd	sLJ d S )
Nc                 S   s"   t | |}|| d d df jS )Nr   )r   r    T)rO   weightsrF   r   r   r   
proxy_func   s    
z.TestFitLine.test_gradcheck.<locals>.proxy_funcr=   r?   r   T)r	   r
   Zrequires_gradF)Zraise_exception)r   Zrandfloat64r   )r   r	   rU   rO   rT   r   r   r   r4      s    zTestFitLine.test_gradcheckr+   c                 C   s   d S r.   r   r/   r   r   r   r0      s    zTestFitLine.test_cardinalityc                 C   s   d S r.   r   r/   r   r   r   r1      s    zTestFitLine.test_jitc                 C   s   d S r.   r   r/   r   r   r   r2      s    zTestFitLine.test_exceptionc                 C   s   d S r.   r   r/   r   r   r   r3      s    zTestFitLine.test_moduleN)r5   r6   r7   r8   r9   Zparametrizer   rQ   rR   r:   r4   r0   r1   r2   r3   r   r   r   r   r;   a   s   
	


r;   )r8   r   Ztorch.autogradr   Zkornia.geometry.liner   r   Zkornia.testingr   r   r;   r   r   r   r   <module>   s   X