o
    jMV                     @   s  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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oe	 d,d-d.d/ Z*d0d1 Z+d2d3 Z,d4d5 Z-d6d7 Z.d8d9 Z/d:d; Z0d<d= Z1d>d? Z2d@dA Z3dBdC Z4dDdE Z5dS )F    N)testing)expected_warnings)arch32is_wasmassert_almost_equalassert_array_lessassert_equalxfailassert_stacklevel)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   _/var/www/html/Deteccion_Ine/venv/lib/python3.10/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 sw   Y  t t t td W d    n1 s7w   Y  t t t tdtd W d    n1 sYw   Y  t t t td W d    n1 sww   Y  t t t tdtd W d    n1 sw   Y  t t	drJ t t	drJ t t t 
t	d W d    d S 1 sw   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(   "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_predict3   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rw|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normcross)model0data0rngdata	model_estar   r   r   test_line_model_nd_estimate;   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   r<   r   r   r   r   test_line_model_nd_residuals_   s      rD   c                   C   B   t t t td W d    d S 1 sw   Y  d S N)   r    )r   r"   r#   r   r%   r   r&   r   r   r   r   test_circle_model_invalid_inputk      "rH   c                  C   sN   t  } d}dd|f| _tddtj tjd }td}t|| | d S )NrG   r   r!   )rG   r   )r   rG   r   )r   rL   )r   r   r   r   pir)   r   
predict_xy)r   rtxyr   r   r   test_circle_model_predictp   s   
rR   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!     r0   r1   )r   r   r   linspacerM   rN   r4   r5   r6   r7   r%   r   )r9   rP   r:   r;   r<   r=   r   r   r   test_circle_model_estimatez   s   

rW   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-     )rY   rY   r   )r   r)   int32r   r%   r   r   )rQ   r   r   r   r   test_circle_model_int_overflow   s
   (
r[   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   rG   rG   r      H   r   )r   r   r   rC   r'   r   r)   r3   r   r   r   r   test_circle_model_residuals   s
    *$r_   c               	   C   s   t  } dg}t| | tddgddgg W d    n1 s#w   Y  t| | tddgddgddgg W d    n1 sHw   Y  d}tjt|d}| td	raJ W d    n1 skw   Y  t	| t
|d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r\   r!   )r   r   r%   r   r)   pytestwarnsRuntimeWarningonesr
   lenr   Zwarning_message	_warningsr   r   r   #test_circle_model_insufficient_data   s   

$rk   c                  C   d   t jg dt jd} t jg dt jd}t j|| d}t }||t js*J 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@rA   )	r   r)   float64r   rN   r%   astyper   r   r   Zanglesr<   r   r   r   r   0test_circle_model_estimate_from_small_scale_data      rq   c                   C   rE   rF   )r   r"   r#   r   r%   r   r&   r   r   r   r    test_ellipse_model_invalid_input   rI   rs   c                  C   sD   t  } d| _tddtj tjd }td}t|| | d S )N)r   r   rG   r   r   r   r!   )rJ   )r   r   rK   )r   r   )r   r   r   r   rM   r)   r   rN   )r   rP   rQ   r   r   r   test_ellipse_model_predict   s
   
rt   c            	      C   s   t dddD ]V} 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/   r0   r1   )ranger   deg2radr   r   rV   rM   rN   r4   r5   r6   r7   r%   r   r'   r   rg   )	angleZradr9   rP   r:   r;   r<   r=   resr   r   r   test_ellipse_model_estimate   s   


 
r}   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 > br      r   r!   rw   r/   2   N)r   r   rz   cossinr)   rV   rM   r   r%   Tr   r   )r{   thetacsRrP   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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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t 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`   rU   )
r   r)   rZ   r   r%   r   r   fullr$   rC   )r<   r   r   r   r   %test_ellipse_model_estimate_from_data  sZ  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	    
$r   c                  C   rl   )N)g    .Ag    >A      ?g?r   r-   rm   rA   )	r   r)   rn   r   rN   r%   ro   r   r   rp   r   r   r   1test_ellipse_model_estimate_from_far_shifted_data  rr   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 s!w   Y  t| t|dks2J d}tjt|d}| t	ddgdd	gd
dggrOJ W d    n1 sYw   Y  t| t|dksjJ d S )NzVStandard deviation of data is too small to estimate ellipse with meaningful precision.ra   rc   r   z3Need at least 5 data points to estimate an ellipse.r   P   3   Q   4   )
r   rd   re   rf   r%   r   rg   r
   rh   r)   ri   r   r   r   #test_ellipse_model_estimate_failers  s   (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   rG   r   r   r   rG   )r   r   r   rC   r'   r   r)   r^   r   r   r   test_ellipse_model_residuals  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|t d
ddd t| j|j |D ]}||vsZJ qRd S )NrS   r   r!   rU   )r   rB      )rU   rU   )ir   r   )r.   r   r    rG   r;   )r   r   r   rV   rM   rN   r   r   )r9   rP   r:   outliersr=   inliersZoutlierr   r   r   test_ransac_shape  s   
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sPJ d S )Ni̼ r/   )r   r!   )r   333333?r   )r   rw   )scaleZrotationtranslation)r   rG   rw   )'  r   r   )r.   r/   )r   r   r!   rw   r   F)	r   r4   r5   r   r   r   r   allZnonzero)r;   srcr9   dstr   r=   r   r   r   r   test_ransac_geometric  s   $r   c               	   C   j   dd } t dg ttdtdtj| dd\}}W d    n1 s$w   Y  t|d  t|d  d S )Nc                 S   s   | j d dkS )Nr   r!   )r7   )r<   r   r   r   is_data_valid  s   z0test_ransac_is_data_valid.<locals>.is_data_validNo inliers foundr   r!   r!   r   )r   r;   r   r   r   r&   r   infr   )r   r   r   r   r   r   test_ransac_is_data_valid     
	r   c               	   C   r   )Nc                 S   s   dS )NFr   )r   r<   r   r   r   is_model_valid)  s   z2test_ransac_is_model_valid.<locals>.is_model_validr   r   r!   r   )r   r;   r   )r   r   r   r   r   r   test_ransac_is_model_valid(  r   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   r      ~      rG   "   	   A   N   i`  i  i#  r   l   aWO)r   r   r   r   r   r   test_ransac_dynamic_max_trials9  s(   r   c                  C   s   t tddddd ttjj} tt| td|   }|dks&J t tdddd| t tddddd t tddddd dS )zLTest that the function behaves well when `nom` or `denom` become almost 1.0.r   r/   r   r   rU   gWw'&l7N)r   r   r   Zfinforn   epsceillog)ZEPSILONZdesiredr   r   r   'test_ransac_dynamic_max_trials_clippingb  s   r   c                   C   s  t t ttdd ddd W d    n1 sw   Y  t t ttdd dddd W d    n1 s<w   Y  t t ttdd dddd W d    n1 s]w   Y  t t ttdd ddd	d W d    n1 s~w   Y  t t ttdd ddd W d    n1 sw   Y  t t ttdd d
dd W d    n1 sw   Y  t t ttdd ddd W d    d S 1 sw   Y  d S )Nr   r!   g      )min_samplesresidual_thresholdr   rX   r   r   
max_trials)r   r   Zstop_probabilityg)\(?   )r   r"   r#   r   r   r$   r   r   r   r   test_ransac_invalid_inputr  sF   		"r   c                  C   sZ   G dd d} t d}tdg t|| dddd W d    d S 1 s&w   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   uniquer2   selfr<   r   r   r   r%     s   z:test_ransac_sample_duplicates.<locals>.DummyModel.estimatec                 S   s   t jt|t jdS )Nr-   )r   rg   rh   rn   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   r<   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 s"w   Y  |d u s-J |d u s3J d S )NrG   r!   z"No inliers found. Model not fittedr    r   i> )Zmodel_classr   r   r;   )r   r4   randr   r   r   )r<   r   r   r   r   r   !test_ransac_with_no_final_inliers  s   r   c               
   C   s   dt f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   dS 1 s<w   Y  dS )zExample from GH issue #5572returnc                 W   s.   t tt| jd g d}|dtj kS )z?Allow models with a maximum of 10 degree tilt from the verticalr   r@   gqq?)rC   r   Zarccosdotr   rM   )r   Zrandom_dataZtiltr   r   r   r     s    z8test_ransac_non_valid_best_model.<locals>.is_model_validr   r+   )r   r   r   rU   r    r   zEstimated model is not validr!   r   r   r   )r   r   r   r;   r   N)	boolr   r4   ZRandomStaterV   r   r   r   r   )r   r;   r<   r   r   r    test_ransac_non_valid_best_model  s   &"r   )6numpyr   rd   Zskimage._sharedr   Zskimage._shared._warningsr   Zskimage._shared.testingr   r   r   r   r   r	   r
   Zskimage.measurer   r   r   r   Zskimage.measure.fitr   Zskimage.transformr   r   r(   r*   r?   rD   rH   rR   rW   r[   r_   rk   rq   rs   rt   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sV    $	$

	 
		)&