a
    QeU                     @   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   S/var/www/sunrise/env/lib/python3.9/site-packages/scipy/stats/tests/test_survival.py
<listcomp>       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   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 s60    Y  t jt|d td W d    n1 sn0    Y  d}t jt|d ttjg W d    n1 s0    Y  d}t jt|d* ttjj	dgdgd W d    n1 s0    Y  d}tg d	}t jt|d |j
jd
d W d    n1 sJ0    Y  t jt|d |jjdd W d    n1 s0    Y  d}t jt|d |j
d W d    n1 s0    Y  t jt|d  |jddg W d    n1 s0    Y  d}t jt|d |j
 }W d    n1 sF0    Y  d}t jt|d |j  W d    n1 s0    Y  t jt|d |j  W d    n1 s0    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   s<    ,(,8..,0**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   rB   	quantilesprobabilities)rH   rJ   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   rB   rM   rN   r"   rH   r2   rJ   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   r6   r   r6   r7   r(   )gUUUUUU?gUUUUUU?gUUUUUU?g?r   r   )r   r?   r   r   r   r   r   rB   rM   rN   r"   rR   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   )appendr6   r   )r   r*   default_rngr3   r   r?   rB   rM   diffr   evaluaterN   infr"   )rH   r0   r2   r#   rJ   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         ?      ?rh   rh   rh   r:   g      ?r   )
                  ri          (   )
r   r   r   r   r   r   r   r   r   r   )	?gK7?皙?rs   gHzG?gQ?HzG?rt   rt   )
!      )   0   rx      r]   rx   ry   r^   )
r   r   r   r   r   r   r   r   r   r   )r   rg   rh   rh   r;   r;   r;   )   r7         rz      rl   r6         rz   rm   rj   r   
      rP   rQ   	   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   )r7   rQ   ri   r   rQ   rQ   ri   rj   rU   rl   r6   r{   r   r   rj   rQ   ri   r{   )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"   rN   r   rM   r   r   r&   )rH   r   r   r   refr2   rJ   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rtolr6   )r   r*   rW   r+   r3   r   r?   r&   r   r"   rM   rN   r.   r   Z_ecdf_right_censoredr   rB   )	rH   r   r0   r1   r2   r   r   rJ   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-logr8   gư>)t4d4r   r.   r/   r   r   r?   r"   rC   rB   rN   rF   r   ZcliprG   )rH   r   r   r2   rJ   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   r8   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   rr   )r9   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"   rC   rB   r   rF   rN   rG   )rH   r   r   r2   rJ   lowerupperr   r   rF   rG   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 s0    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 sT0    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&0    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`   rd   re   rf   r   g!E?gܙ{k?guOª?gYe?gaEP?r   z9The confidence interval is undefined at some observationsr4   r   g|E؞?gU<?gsC?gEP?g3&J2?ggE؞?gG<?g!E?r   gEP?g3&J2?r   r8   gk?gutz%?g
?gKuπ?g/8g?g(yD?go(q?g9'?)t1d1r   r.   r/   r   r   r?   r@   ZsearchsortedrB   rM   r<   rD   rE   rC   r   rF   rN   rG   r"   )rH   r   r   r2   rJ   r[   ZfloZfupirI   rK   rF   rG   r   r   r   test_right_censored_ci_nans%  sP    
(""*"".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*   rW   r+   Z
zeros_likeZargmaxr   r?   r.   r/   r   r"   rM   Z_nZ_dr   Z_sf)rH   r0   r2   r   rJ   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 nR ttfy   d}tjt|d |j	
  W d    n1 s0    Y  Y n0 d S )Nl   u!u\xD r   r   r   z2matplotlib must be installed to use method `plot`.r4   )r   r*   rW   r+   r3   r   r?   Zmatplotlib.pyplotZpyplotr"   ZplotModuleNotFoundErrorImportErrorr<   r=   )rH   r0   r1   r2   r#   rJ   ZpltrI   r   r   r   test_plot_ivw  s    
zTestSurvival.test_plot_ivN)#__name__
__module____qualname__staticmethodr3   rL   rO   rS   rT   r\   r   r   Zr1t2Zd2Zr2t3Zd3Zr3r   r   Zr4r   r   Zr5r<   markparametrizer   r   r   r   r   r   r   r   r   r   r   r'   &   sB   

&	 

*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)ri   rj   rk   rl   rm   rn   )ri   ro   rp   rq   )ru   rv   rw   )rx   rx   ry   r]   rx   ry   r^   gK@)g܇~?g%?g ~q?)r|   rP   rQ   r(   )rp   r|   r   rl   )   rm      )rm   rU   r~   r~   rQ   g8v\?)g?ghG:?g]?)rP   r}   rm      r]   &   1   2   ?   O   V   b         )   r_   re   R   r      )r   r   rj   r}   rl   rU   r   r   r~   rp   rz   rz   ry   rv   r   ru   #   r]   rq   rq   .   rx   L   rf   r   [   p      )"   rq   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 q8d S )	Nr   r   )r   right)z	two-sidedZlessZgreater)r[   yalternativer6   g|=r   )r   r.   	enumeratelogrankr   	statisticpvalue)rH   r[   r   r   r   r   r   rJ   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 sJ0    Y  d}tjt|d$ t jddgg|d W d    n1 s0    Y  d S )Nr   r6   z`y` must ber4   )r[   r   z`x` must be)r   r.   r<   r=   r>   r   )rH   r2   msgr   r   r   test_raises  s    2zTestLogRank.test_raisesN)r   r   r   r<   r   r   r   r   r   r   r   r   r     s2   
4
r   )r<   numpyr   Znumpy.testingr   r   Zscipyr   Zscipy.statsr   r&   r'   r   r   r   r   r   <module>   s     b