o
    iU                     @   s`   d dl Z d dlZd dlmZmZ d dlmZ d dlm	Z	 dd Z
G dd dZG d	d
 d
ZdS )    N)assert_equalassert_allclose)stats)	_survivalc                 C   s   dt fdtfg}tjdd t| |D |d}tj|dd}|d } t|d }| j}t|dd	}t	|| | }tj
| d d d	 d
d\}}	| |	 d  }
||	 d  }|
|fS )Ntimecensoredc                 S   s   g | ]\}}||fqS  r   ).0tdr   r   n/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/scipy/stats/tests/test_survival.py
<listcomp>   s    z+_kaplan_meier_reference.<locals>.<listcomp>)dtype)r   r   )orderr   T)Zreturn_index   )floatintnparrayzipsortlogical_notsizearangeZcumprodunique)timesr   r   datadiedmnsf_indicesZ	ref_timesref_sfr   r   r   _kaplan_meier_reference   s   r%   c                
   @   s8  e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	g dZ
g dZg dZg dZg dZg dZg dZg dZg dZg dZg dZg dZg dZg dZg dZejde
eefeeefeeefeeefeeefgdd Zejdg d d!d" Zd#d$ Zd%d& Zd'd( Z d)d* Z!d+d, Z"d-S ).TestSurvivalc                 C   s`   |  |}| dd|tj}| t||}| j |jd|   k}tj	
||}|||fS )Nr      r   )randomintegersZastyper   Zint32Zpermutedrepeatr   r   CensoredDataright_censored)rngn_uniqueZunique_timesZrepeatsr   r   sampler   r   r   get_random_sample(   s   

zTestSurvival.get_random_samplec                 C   s  d}t jt|d tdgg W d    n1 sw   Y  t jt|d td W d    n1 s7w   Y  d}t jt|d ttjg W d    n1 sWw   Y  d}t jt|d ttjj	dgdgd W d    n1 s}w   Y  d}tg d	}t jt|d |j
jd
d W d    n1 sw   Y  t jt|d |jjdd W d    n1 sw   Y  d}t jt|d |j
d W d    n1 sw   Y  t jt|d |jddg W d    n	1 sw   Y  d}t jt|d |j
 }W d    n	1 s w   Y  d}t jt|d |j  W d    n	1 s?w   Y  t jt|d |j  W d    d S 1 s]w   Y  d S )Nz,`sample` must be a one-dimensional sequence.matchr   z`sample` must not contain nanz5Currently, only uncensored and right-censored data...T)r   zmethod` must be one of...)r         z	ekki-ekkimethodZ	shrubberyz2confidence_level` must be a scalar between 0 and 1r         ?333333?z:The confidence interval is undefined at some observations.z.Confidence interval bounds do not implement...)pytestraises
ValueErrorr   ecdfr   nanNotImplementedErrorr,   Zleft_censoredcdfconfidence_intervalr!   warnsRuntimeWarninglowhigh)selfmessagerescir   r   r   test_input_validation3   sR   $z"TestSurvival.test_input_validationc                 C   sV   t g }t|jjg  t|jjg  t dg}t|jjdg t|jjdg d S )Nr   )r   r=   r   r@   	quantilesprobabilities)rF   rH   r   r   r   test_edge_casesY   s   
zTestSurvival.test_edge_casesc                 C   sv   g d}t |}tt|}tddd }d| }t|jj| t|jj	| t|j
j| t|j
j	| d S )N)gQ@gRQ@g=
ףp=@gGz@g@r         )r   r=   r   r   r   r   r   r@   rK   rL   r!   rF   r0   rH   Zref_xZref_cdfr$   r   r   r   test_uniqueb   s   
zTestSurvival.test_uniquec                 C   st   g d}t |}tt|}tg d}d| }t|jj| t|jj	| t|j
j| t|j
j	| d S )N)r   r4   r   r4   r5   r'   )gUUUUUU?gUUUUUU?gUUUUUU?g?r   r   )r   r=   r   r   r   r   r   r@   rK   rL   r!   rP   r   r   r   test_nonuniquen   s   
zTestSurvival.test_nonuniquec                 C   s  t jd}| |d\}}}t|}|jj}|t j||d d dd  }t	|j
||jj t	|j
||jj t	|j
|d d d t	|j
t j t jgddg t	|j
||jj t	|j
||jj t	|j
|d d d t	|j
t j t jgddg d S )Nl   I)_    r   r   )appendr4   r   )r   r)   default_rngr1   r   r=   r@   rK   diffr   evaluaterL   infr!   )rF   r.   r0   r"   rH   xZxrr   r   r   test_evaluate_methodsz   s   
 $z"TestSurvival.test_evaluate_methods)
%   +   /   8   <   >   G   M   P   Q   )
r   r   r   r   r   r   r   r   r   r   )
r   r         ?      ?rf   rf   rf   r8   g      ?r   )
                  rg          (   )
r   r   r   r   r   r   r   r   r   r   )	?gK7?皙?rq   gHzG?gQ?HzG?rr   rr   )
!      )   0   rv      r[   rv   rw   r\   )
r   r   r   r   r   r   r   r   r   r   )r   re   rf   rf   r9   r9   r9   )   r5         rx      rj   r4         rx   rk   rh   r   
      rN   rO   	   r}   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )ffffff?r   gNbX9?5^I?r   r   r   r   r   r   gRQ?oʡ?r   r   r   MbX9?r   )r5   rO   rg   r~   rO   rO   rg   rh   rS   rj   r4   ry   r~   r   rh   rO   rg   ry   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )
gh|?5?g r?gv?MbX?r   r   gv?^I+?r   r   casec                 C   s   |\}}}t j|t|}t |}t|jj|dd t	|jj
tt| t|t|}t	|d tt| t|d |dd d S )NMbP?Zatolr   r   )r   r,   r-   r   r   r=   r   r!   rL   r   rK   r   r   r%   )rF   r   r   r   refr0   rH   r   r   r   $test_right_censored_against_examples   s   

z1TestSurvival.test_right_censored_against_examplesseed)l   -j|Il   #}|4IQl   >5Gn?l   e5"c           	      C   s   t j|}|dd}| ||\}}}t|}t||}t|j	j
|d  t|j	j|d  tj|d}t|}t|}t|d |j	j
 t|d |jjdd t|d |j	jdd d S )	Nr~   d   r   r   )
uncensored+=Zrtolr4   )r   r)   rU   r*   r1   r   r=   r%   r   r!   rK   rL   r,   r   Z_ecdf_right_censoredr   r@   )	rF   r   r.   r/   r0   r   r   rH   r   r   r   r   4test_right_censored_against_reference_implementation   s   



zATestSurvival.test_right_censored_against_reference_implementationc                 C   s,  | j | j}}tj|t|}t|}g d}|j	 }|j
	 }|jj|jj }t||dd t|jjt|jj| dd t|jjt|jj| dd t|jjt|j
j| dd t|jjt|j
j| dd g d}	g d}
|jj	dd	}t|jj|	d
d t|jj|
d
d d S )N)~jt?r   gHzG?#~j?r   r   r   r   r   r   g1Zd?rh|?r   r   r   m?r   r   r   r   r   )iU;?r   gLƼ?SX?r   r   r   r   r   r   g#?v1<?r   r   r   </O?r   ),?r   gXC%?d=	lN?r   r   r   r   r   r   gG˵h?yjh?r   r   r   @J?r   log-logr6   gư>)t4d4r   r,   r-   r   r   r=   r!   rA   r@   rL   rD   r   ZcliprE   )rF   r   r   r0   rH   Zref_allowancesf_cicdf_ci	allowanceZref_lowZref_highr   r   r   test_right_censored_ci   s2   


z#TestSurvival.test_right_censored_cic                 C   s.  | j | j}}tj|t|}t|}tg d}tg d}|j	j
dd}|jj
dd}t|jj|dd t|jj|dd t|jjd| dd t|jjd| dd g d}	g d	}
|j	j
dd
d}t|jj|	 t|jj|
 g d}	g d}
|j	j
d
d}t|jj|	 t|jj|
 d S )N)
g4S?gn;?g·g	2?oDk?r   r   grSr??T1?r   r   )
g!S?gn2d?g|y?U?r   r   gmēL?^?r   r   r   r6   gh㈵>r   r   )
ge?gC?gW0?J|?r   r   g cav?#	?r   r   )
gx ?g]^L"?gD%V
d?Ԓ?r   r   g[<\+?7ԧx?r   r   rp   )r7   confidence_level)
g7Aca?g|X?g1?/?r   r   gRＯ?        r   r   )
      ?r   g?8ْ`?r   r   gEy?,˪~O?r   r   )r   )t5d5r   r,   r-   r   r   r=   r   r!   rA   r@   r   rD   rL   rE   )rF   r   r   r0   rH   lowerupperr   r   rD   rE   r   r   r    test_right_censored_ci_example_5   s.   

z-TestSurvival.test_right_censored_ci_example_5c              
   C   s  | j | j}}tj|t|}t|}g d}tjddddtjg}tjddddtjg}t	|j
j|}d	}	tjt|	d
 |j
 }
W d    n1 sOw   Y  t|
jj| dd  |dd   t|
jj| dd  |dd   tjddddtjg}tjddddtjg}t	|j
j|}tjt|	d
 |j }
W d    n1 sw   Y  t|
jj| dd  |dd   t|
jj| dd  |dd   dddddddddtjg
}dddddddddtjg
}t|
jj| t|
jj| tjt|	d
 |jjdd}
W d    n	1 sw   Y  tjtjdddddddtjg
}tjtjddddddd tjg
}t|
jj| t|
jj| d S )!N)r[   r]   r^   rb   rc   rd   r   g!E?gܙ{k?guOª?gYe?gaEP?r   z9The confidence interval is undefined at some observationsr2   r   g|E؞?gU<?gsC?gEP?g3&J2?ggE؞?gG<?g!E?r   gEP?g3&J2?r   r6   gk?gutz%?g
?gKuπ?g/8g?g(yD?go(q?g9'?)t1d1r   r,   r-   r   r   r=   r>   Zsearchsortedr@   rK   r:   rB   rC   rA   r   rD   rL   rE   r!   )rF   r   r   r0   rH   rY   floZfupirG   rI   rD   rE   r   r   r   test_right_censored_ci_nans%  sV   
""""z(TestSurvival.test_right_censored_ci_nansc                 C   s   t jd}|jdddd}t |}d|t |< t|}ttj	||}t
|jj|jj t
|jj|jj t
|jjd d |jjd d  t|jjd d |jjd d dd	 d S )
Nl   m"%< r~   r   i  r(   Tr   r   r   )r   r)   rU   r*   Z
zeros_likeZargmaxr   r=   r,   r-   r   r!   rK   Z_n_dr   Z_sf)rF   r.   r0   r   rH   r   r   r   r   &test_right_censored_against_uncensoredk  s   

"*z3TestSurvival.test_right_censored_against_uncensoredc                 C   s   t jd}|dd}| ||\}}}t|}zdd lm} |j	
  W d S  ttfyT   d}tjt|d |j	
  W d    Y d S 1 sLw   Y  Y d S w )Nl   u!u\xD r~   r   r   z2matplotlib must be installed to use method `plot`.r2   )r   r)   rU   r*   r1   r   r=   Zmatplotlib.pyplotZpyplotr!   ZplotModuleNotFoundErrorImportErrorr:   r;   )rF   r.   r/   r0   r"   rH   ZpltrG   r   r   r   test_plot_ivw  s   
&zTestSurvival.test_plot_ivN)#__name__
__module____qualname__staticmethodr1   rJ   rM   rQ   rR   rZ   r   r   r1t2Zd2r2t3Zd3Zr3r   r   Zr4r   r   Zr5r:   markparametrizer   r   r   r   r   r   r   r   r   r   r   r&   &   sD    

&	 

*2Fr&   c                
   @   s   e Zd Zejdg dg dgg dg dgdg dfg dg d	gg d
g dgdg dfg dg dgg dg dgdg dfgdd Zdd ZdS )TestLogRankzx, y, statistic, pvalue)rg   rh   ri   rj   rk   rl   )rg   rm   rn   ro   )rs   rt   ru   )rv   rv   rw   r[   rv   rw   r\   gK@)g܇~?g%?g ~q?)rz   rN   rO   r'   )rn   rz   r}   rj   )   rk      )rk   rS   r|   r|   rO   g8v\?)g?ghG:?g]?)rN   r{   rk      r[   &   1   2   ?   O   V   b         )   r]   rc   R   r      )r~   r~   rh   r{   rj   rS   r   r}   r|   rn   rx   rx   rw   rt   r   rs   #   r[   ro   ro   .   rv   L   rd   r   [   p      )"   ro   F   g.@)gJVQy?g8j^Qi?g%?c                 C   s~   t j|d |d d}t j|d |d d}tg dD ] \}}t j|||d}t|jd |dd t|j|| dd qd S )	Nr   r   )r   right)z	two-sidedlessZgreater)rY   yalternativer4   g|=r   )r   r,   	enumeratelogrankr   	statisticpvalue)rF   rY   r   r   r   r   r   rH   r   r   r   test_log_rank  s   5zTestLogRank.test_log_rankc                 C   s   t ddg}d}tjt|d t j|ddggd W d    n1 s%w   Y  d}tjt|d t jddgg|d W d    d S 1 sIw   Y  d S )Nr   r4   z`y` must ber2   )rY   r   z`x` must be)r   r,   r:   r;   r<   r   )rF   r0   msgr   r   r   test_raises  s   "zTestLogRank.test_raisesN)r   r   r   r:   r   r   r   r   r   r   r   r   r     s4    

4r   )r:   numpyr   Znumpy.testingr   r   Zscipyr   Zscipy.statsr   r%   r&   r   r   r   r   r   <module>   s      b