a
    BCCfV                     @   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   [/var/www/html/django/DPS/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   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 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   rA   	quantilesprobabilities)rG   rI   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   rA   rL   rM   r"   rG   r1   rI   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   r5   r   r5   r6   r(   )gUUUUUU?gUUUUUU?gUUUUUU?g?r   r   )r   r>   r   r   r   r   r   rA   rL   rM   r"   rQ   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   )appendr5   r   )r   r*   default_rngr2   r   r>   rA   rL   diffr   evaluaterM   infr"   )rG   r/   r1   r#   rI   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         ?      ?rg   rg   rg   r9   g      ?r   )
                  rh          (   )
r   r   r   r   r   r   r   r   r   r   )	?gK7?皙?rr   gHzG?gQ?HzG?rs   rs   )
!      )   0   rw      r\   rw   rx   r]   )
r   r   r   r   r   r   r   r   r   r   )r   rf   rg   rg   r:   r:   r:   )   r6         ry      rk   r5         ry   rl   ri   r   
      rO   rP   	   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   )r6   rP   rh   r   rP   rP   rh   ri   rT   rk   r5   rz   r   r   ri   rP   rh   rz   )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"   rM   r   rL   r   r   r&   )rG   r   r   r   refr1   rI   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rtolr5   )r   r*   rV   r+   r2   r   r>   r&   r   r"   rL   rM   r-   r   Z_ecdf_right_censoredr   rA   )	rG   r   r/   r0   r1   r   r   rI   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-logr7   gư>)t4d4r   r-   r.   r   r   r>   r"   rB   rA   rM   rE   r   ZcliprF   )rG   r   r   r1   rI   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   r7   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   rq   )r8   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"   rB   rA   r   rE   rM   rF   )rG   r   r   r1   rI   lowerupperr   r   rE   rF   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_   rc   rd   re   r   g!E?gܙ{k?guOª?gYe?gaEP?r   z9The confidence interval is undefined at some observationsr3   r   g|E؞?gU<?gsC?gEP?g3&J2?ggE؞?gG<?g!E?r   gEP?g3&J2?r   r7   gk?gutz%?g
?gKuπ?g/8g?g(yD?go(q?g9'?)t1d1r   r-   r.   r   r   r>   r?   ZsearchsortedrA   rL   r;   rC   rD   rB   r   rE   rM   rF   r"   )rG   r   r   r1   rI   rZ   floZfupirH   rJ   rE   rF   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*   rV   r+   Z
zeros_likeZargmaxr   r>   r-   r.   r   r"   rL   Z_nZ_dr   Z_sf)rG   r/   r1   r   rI   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 n^ ttfy   t jdsd}tjt|d |j	
  W d    n1 s0    Y  Y n0 d S )Nl   u!u\xD r   r   r   z
2.0.0.dev0z2matplotlib must be installed to use method `plot`.r3   )r   r*   rV   r+   r2   r   r>   Zmatplotlib.pyplotZpyplotr"   ZplotModuleNotFoundErrorImportError__version__
startswithr;   r<   )rG   r/   r0   r1   r#   rI   ZpltrH   r   r   r   test_plot_ivw  s    
zTestSurvival.test_plot_ivN)#__name__
__module____qualname__staticmethodr2   rK   rN   rR   rS   r[   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'   &   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)rh   ri   rj   rk   rl   rm   )rh   rn   ro   rp   )rt   ru   rv   )rw   rw   rx   r\   rw   rx   r]   gK@)g܇~?g%?g ~q?)r{   rO   rP   r(   )ro   r{   r~   rk   )   rl      )rl   rT   r}   r}   rP   g8v\?)g?ghG:?g]?)rO   r|   rl      r\   &   1   2   ?   O   V   b         )   r^   rd   R   r      )r   r   ri   r|   rk   rT   r   r~   r}   ro   ry   ry   rx   ru   r   rt   #   r\   rp   rp   .   rw   L   re   r   [   p      )"   rp   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-sidedlessZgreater)rZ   yalternativer5   g|=r   )r   r-   	enumeratelogrankr   	statisticpvalue)rG   rZ   r   r   r   r   r   rI   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   r5   z`y` must ber3   )rZ   r   z`x` must be)r   r-   r;   r<   r=   r   )rG   r1   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     f