a
    
dL                     @   sl  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	m
Z
mZmZ d dlmZmZmZmZ d dlmZ d dlm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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&d*d+ Z'eed,d-d.d/ Z(d0d1 Z)d2d3 Z*d4d5 Z+d6d7 Z,d8d9 Z-d:d; Z.d<d= Z/d>d? Z0d@dA Z1dBdC Z2dS )D    N)testing)expected_warnings)arch32assert_almost_equalassert_array_lessassert_equalxfail)CircleModelEllipseModelLineModelNDransac)_dynamic_max_trials)AffineTransformc                  C   s6   t  } d| _tdd}| |}t|| | d S )N))r   r   )   r   
   )r   paramsnparange	predict_yr   	predict_xmodelxy r   g/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/skimage/measure/tests/test_fit.pytest_line_model_predict   s
    
r   c                   C   s  t t" t td W d    n1 s20    Y  t t" t td W d    n1 sn0    Y  t t* t tdtd W d    n1 s0    Y  t t" t td W d    n1 s0    Y  t t* t tdtd W d    n1 s40    Y  t t	drVJ t t	drnJ t t" t 
t	d W d    n1 s0    Y  d S )Nr   )r      )r      )r   raises
ValueErrorr   r   r   zerosr   estimateempty	residualsr   r   r   r    test_line_model_nd_invalid_input   s    0080:r&   c                  C   sN   t  } tddgtddgf| _tdd}| |}t|| | d S )Nr   g?g?r   r   )r   r   arrayr   r   r   r   r   r   r   r   r   test_line_model_nd_predict+   s
    
r(   c                  C   s  t  } tjg dddtjg dddtd f| _| jd dtdd	d
tjf  | jd   }tjd}||j	|j
d }t  }|| ttjt| jd |jd dd |jd | jd  }tj|dkr|tj| }ttjt| jd |dd d S )Nr   r   r   floatZdtype)r   r   r   r   r   r   d   .r     size)r   r   r'   sqrtr   r   Znewaxisrandomdefault_rngnormalshaper#   r   ZlinalgZnormZcross)model0data0rngdata	model_estar   r   r   test_line_model_nd_estimate3   s(    "
r<   c                  C   s   t  } tg dtg df| _tt| tg dgd tt| tg dgd tt| tg dgd tg dg}tg dtg df}tt| j||dd d S )	Nr)   r   r   r   r   )r   r   r   r   )r   r   r   r      )r   r   r'   r   r   absr%   )r   r9   r   r   r   r   test_line_model_nd_residualsS   s       rA   c                   C   s@   t t" t td W d    n1 s20    Y  d S N)   r   )r   r    r!   r	   r#   r   r$   r   r   r   r   test_circle_model_invalid_inputa   s    rD   c                  C   sN   t  } d}dd|f| _tddtj tjd }td}t|| | d S )NrC   r   r   )rC   r   )r   rC   r   )r   rG   )r	   r   r   r   pir'   r   
predict_xy)r   rtxyr   r   r   test_circle_model_predictf   s    
rM   c                  C   sl   t  } d| _tddtj d}| |}tjd}||j|j	d }t  }|
| t| j|jd d S )Nr      r   r   r     r.   r/   )r	   r   r   linspacerH   rI   r2   r3   r4   r5   r#   r   )r6   rK   r7   r8   r9   r:   r   r   r   test_circle_model_estimatep   s    

rR   c                  C   sT   t jddgddgddgddggt jd} | d7 } t }||  t|jg d d S )Nr   r   r+     )rT   rT   r   )r   r'   int32r	   r#   r   r   )rL   r   r   r   r   test_circle_model_int_overflow   s
    (
rV   c                  C   sz   t  } d| _tt| tddggd tt| tddggtdd  tt| tddggd d S )N)r   r   rC   rC   r      H   r   )r	   r   r   r@   r%   r   r'   r1   r   r   r   r   test_circle_model_residuals   s     rZ   c               	   C   s  t  } dg}t|, | tddgddgg W d    n1 sF0    Y  t|2 | tddgddgddgg W d    n1 s0    Y  d}tjt|d$}| td	rJ W d    n1 s0    Y  t	|dksJ |d j
tksJ d S )
Nz6Input does not contain enough significant data points.r   r   r      r   zUStandard deviation of data is too small to estimate circle with meaningful precision.matchrW   r   )r	   r   r#   r   r'   pytestwarnsRuntimeWarningoneslenfilename__file__r   Zwarning_message	_warningsr   r   r   #test_circle_model_insufficient_data   s    
:
@2rh   c                  C   sd   t jg dt jd} t jg dt jd}t j|| d}t }||t jsTJ t| |j d S )N)gu`D-g?jS-gJ%H+r+   g1Zd?g?5^I?g|?5^?gm?g|?5^@g/$@gX9v	@gn@g\(\@g?5^I@g^I+@guV@r>   )	r   r'   float64r	   rI   r#   astyper   r   r   Zanglesr9   r   r   r   r   0test_circle_model_estimate_from_small_scale_data   s    
rm   c                   C   s@   t t" t td W d    n1 s20    Y  d S rB   )r   r    r!   r
   r#   r   r$   r   r   r   r    test_ellipse_model_invalid_input   s    rn   c                  C   sD   t  } d| _tddtj tjd }td}t|| | d S )N)r   r   rC   r   r   r   r   )rE   )r   r   rF   )r   r   )r
   r   r   r   rH   r'   r   rI   )r   rK   rL   r   r   r   test_ellipse_model_predict   s
    
ro   c            	      C   s   t dddD ]} t| }t }dddd|f|_tddtj d}||}tj	d	}||j
|jd
 }t }|| t|jd d |jd d d ||}t|t|j qd S )Nr         r         r   r-   r.   r/   )ranger   deg2radr
   r   rQ   rH   rI   r2   r3   r4   r5   r#   r   r%   r   rb   )	angleZradr6   rK   r7   r8   r9   r:   resr   r   r   test_ellipse_model_estimate   s    


 
rx   c                  C   s   t dddD ]} t | }t |}t |}t || g||gg}t ddt j d}d}d}t |t | |t | g}|| }t }	|		|j
 |	j\}
}
}}}t|| t|| t|| qdS )	z-The fit should be modified so that a > b
    r      r   r   rr   r-   2   N)r   r   ru   cossinr'   rQ   rH   r
   r#   Tr   r   )rv   thetacsRrK   r;   bZpointsZellipse_model_Za_primeZb_primeZtheta_primer   r   r    test_ellipse_parameter_stability   s&    


"

r   c                  C   s  t jddgddgddgddgd	d
gddgddgddgddgddgddgddgddgddgddgddgddgddgd d!gd"dgd#d$gd%d&gd'd!gd'd&gd(d&gd)d*gd+dgd,dgd-dgd.d/gd0dgd0dgd1d2gd1d3gd4d5gd4d6gd7d8gd9dgd:d;gd<d=gd>d?gd@d
gdAdBgdCdDgdEdFgdGdHgdIdJgdIdKgdLdMgdLdNgdOdPgdQdRgdSdTgdUdVgdUdMgdWdXgdWdYgdZdMgd[d\gdZdHgdZd]gd[dgd^d_gd`dagdbdcgdddegdddfgdbdggdbdgdddgd`dhgdid]gdjdkgdldmgdldgdndogdpdqgdrdsgdtdugdndJgdrdgdvd
gdwdqgdxdHgdydzgdwd{gd|d}gdxd~gddgddgddKgdd5gddsgdd$gddgddgddgddgddgddegddgddgddgddgddgddgddgddgddgddgddcgddgddgddgddgddgddsgddggddgddgddegddgddgddgddgddXgddNgddgddgddgddgddgddgddgddgddggt jd} t }||  t|jd d t dd tt dt 	|jd d  d S )Ni  iV  i	  ik  i  i_  i  iY  i  i  i  i  i1  i  iD  i  iO  i  iP  iY  i  ib  i  ic  i  il  i  im  i  iw  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  iW  i  iL  iu  i  iM  ii  i  is  i!  ij  i  i`  i)  ia  i*  i9  iC  i3  i5  i:  i  i=  i
  i<  i/  i>  i$  i?  i  i  i  i  iF  iC  i  iG  i%  iJ  i  iH  i8  iI  i  iE  i  iK  iR  iQ  iN  i{  i  iT  i  i  i[  i  i\  i  i]  i^  i  ie  i"  i  ig  i  ii  io  i  ip  i  iq  i  iy  i  i  i  i  iz  i  i{  i  i  i}  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i)  i  i  i  i  i  i  i+  i  i  i  i  i  io  r+   r[   rP   )
r   r'   rU   r
   r#   r   r   fullr"   r@   )r9   r   r   r   r   %test_ellipse_model_estimate_from_data   s>    $$$$$$$$$$$$$$$$$$$$$$
r   c                  C   sd   t jg dt jd} t jg dt jd}t j|| d}t }||t jsTJ t| |j d S )N)g    .Ag    >A      ?g?r   r+   ri   r>   )	r   r'   rj   r
   rI   r#   rk   r   r   rl   r   r   r   1test_ellipse_model_estimate_from_far_shifted_data"  s    
r   zKnown test failure on 32-bit platforms. See links for details: https://github.com/scikit-image/scikit-image/issues/3091 https://github.com/scikit-image/scikit-image/issues/2670)	conditionreasonc                  C   s   t  } d}tjt|d$}| tdr.J W d    n1 sB0    Y  t|dks\J |d jt	ksnJ | t
ddgdd	gd
dggrJ d S )NzVStandard deviation of data is too small to estimate ellipse with meaningful precision.r\   r^   r   r   rz   P   3   Q   4   )r
   r_   r`   ra   r#   r   rb   rc   rd   re   r'   rf   r   r   r   #test_ellipse_model_estimate_failers0  s    2r   c                  C   sp   t  } d| _tt| tddggd tt| tddggd tt| tddggd d S )N)r   r   r   rC   r   r   r   rC   )r
   r   r   r@   r%   r   r'   rY   r   r   r   test_ellipse_model_residualsE  s
      r   c                  C   s   t  } d| _tddtj d}| |}d}d||d d d f< d||d d d f< d	||d d d f< t|t d
ddd\}}tdg" t|t d
ddd W d    n1 s0    Y  t| j|j |D ]}||vsJ qd S )NrN   r   r   rP   )r   r?      )rP   rP   )irz   r   )r,   r   r   rC   r8   z'`random_state` is a deprecated argument)Zrandom_state)	r	   r   r   rQ   rH   rI   r   r   r   )r6   rK   r7   outliersr:   inliersZoutlierr   r   r   test_ransac_shapeN  s    
0r   c                  C   s   t jd} d| d }tdddd}||}d}d	||d
 < d||d < d||d < t||ftdd| d\}}t|j|j t t |dkd
 |ksJ d S )Ni̼ r-   )rz   r   )r   333333?r   )r   rr   )ZscaleZrotationtranslation)r   rC   rr   )'  r   r   )r,   r-   )rz   rz   r   rr   r   F)	r   r2   r3   r   r   r   r   allZnonzero)r8   srcr6   dstr   r:   r   r   r   r   test_ransac_geometricf  s    
r   c               	   C   sj   dd } t dg0 ttdtdtj| dd\}}W d    n1 sH0    Y  t|d  t|d  d S )Nc                 S   s   | j d dkS )Nr   r   )r5   )r9   r   r   r   is_data_valid  s    z0test_ransac_is_data_valid.<locals>.is_data_validNo inliers foundr   r   r   r   )r   r8   r   r   r   r$   r   infr   )r   r   r   r   r   r   test_ransac_is_data_valid~  s    (
r   c               	   C   sj   dd } t dg0 ttdtdtj| dd\}}W d    n1 sH0    Y  t|d  t|d  d S )Nc                 S   s   dS )NFr   )r   r9   r   r   r   is_model_valid  s    z2test_ransac_is_model_valid.<locals>.is_model_validr   r   r   r   )r   r8   r   )r   r   r   r   r   r   test_ransac_is_model_valid  s    (
r   c                   C   s  t tddddd t tddddd t tddddd t tddddd t tddddd t tddddd	 t td
dddd t td
dddd t tddddd t tddddd t tddddd t tddddd t tddddd t tddddd t td
dddd t td
dddd t tddddd t tddddd t tddddd t tddddd d S )Nr-   r   gGz?r   _      Z   r      F      6   rz      ~      rC   "   	   A   N   i`  i  i#  r   l   aWO)r   r   r   r   r   r   test_ransac_dynamic_max_trials  s(    r   c                   C   s  t t& ttdd ddd W d    n1 s60    Y  t t( ttdd dddd W d    n1 sx0    Y  t t( ttdd dddd W d    n1 s0    Y  t t( ttdd ddd	d W d    n1 s0    Y  t t& ttdd ddd W d    n1 s>0    Y  t t& ttdd d
dd W d    n1 s0    Y  t t& ttdd ddd W d    n1 s0    Y  d S )Nr   r   g      )min_samplesresidual_thresholdr   rS   r   r   
max_trials)r   r   Zstop_probabilityg)\(?   )r   r    r!   r   r   r"   r   r   r   r   test_ransac_invalid_input  s8    $$$$&&r   c                  C   sX   G dd d} t d}tdg" t|| dddd W d    n1 sJ0    Y  d S )	Nc                   @   s    e Zd ZdZdd Zdd ZdS )z1test_ransac_sample_duplicates.<locals>.DummyModelz$Dummy model to check for duplicates.c                 S   s   t t|j|j dS )NT)r   r   uniquer0   selfr9   r   r   r   r#     s    z:test_ransac_sample_duplicates.<locals>.DummyModel.estimatec                 S   s   t jt|t jdS )Nr+   )r   rb   rc   rj   r   r   r   r   r%     s    z;test_ransac_sample_duplicates.<locals>.DummyModel.residualsN)__name__
__module____qualname____doc__r#   r%   r   r   r   r   
DummyModel  s   r   r[   r   r   g        r   r   )r   r   r   r   )r   r9   r   r   r   test_ransac_sample_duplicates  s    

r   c                  C   sj   t jdd} tdg& t| tdddd\}}W d    n1 sD0    Y  |d u sZJ |d u sfJ d S )NrC   r   z"No inliers found. Model not fittedr   r   i> )Zmodel_classr   r   r8   )r   r2   randr   r   r   )r9   r   r   r   r   r   !test_ransac_with_no_final_inliers  s    (r   c               
   C   s   t ddd} tjd}tg dg dd|dd d	 }td
g& t|tdddd| d W d   n1 sv0    Y  dS )zExample from GH issue #5572)returnc                 W   s.   t tt| jd g d}|dtj kS )zIAllow models with a maximum of 10 degree tilt from the vertical

        r   r=   gqq?)r@   r   Zarccosdotr   rH   )r   Zrandom_dataZtiltr   r   r   r     s     z8test_ransac_non_valid_best_model.<locals>.is_model_validr   r)   )r   r   r   rP   r   r   zEstimated model is not validr   r   rz   r   )r   r   r   r8   r   N)	boolr   r2   ZRandomStaterQ   r   r   r   r   )r   r8   r9   r   r   r    test_ransac_non_valid_best_model  s    &r   )3numpyr   r_   Zskimage._sharedr   Zskimage._shared._warningsr   Zskimage._shared.testingr   r   r   r   r   Zskimage.measurer	   r
   r   r   Zskimage.measure.fitr   Zskimage.transformr   r   r&   r(   r<   rA   rD   rM   rR   rV   rZ   rh   rm   rn   ro   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sN    

		&
	

)	