o
    `^hU                     @   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   ]/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/scipy/stats/tests/test_survival.py
<listcomp>   s    z+_kaplan_meier_reference.<locals>.<listcomp>)dtype)r   r   )orderr   T)return_index   )floatintnparrayzipsortlogical_notsizearangecumprodunique)timesr   r   datadiedmnsf_indices	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integersastyper   int32permutedrepeatr   r   CensoredDataright_censored)rngn_uniqueunique_times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method	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NotImplementedErrorr2   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   rF   r   rJ   	quantilesprobabilities)rP   rR   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   rF   r   r   r   r   r   rJ   rU   rV   r#   rP   r8   rR   ref_x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   r<   r   r<   r=   r*   )gUUUUUU?gUUUUUU?gUUUUUU?g?r   r   )r   rF   r   r   r   r   r   rJ   rU   rV   r#   rZ   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   )appendr<   r   )r   r,   default_rngr9   r   rF   rJ   rU   diffr   evaluaterV   infr#   )rP   r4   r8   r$   rR   x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         ?      ?rs   rs   rs   rA   g      ?r   )
                  rt          (   )
r   r   r   r   r   r   r   r   r   r   )	?gK7?皙?r~   gHzG?gQ?HzG?r   r   )
!      )   0   r      rh   r   r   ri   )
r   r   r   r   r   r   r   r   r   r   )r   rr   rs   rs   rB   rB   rB   )   r=         r      rw   r<         r   rx   ru   r   
      rX   rY   	   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   )r=   rY   rt   r   rY   rY   rt   ru   r_   rw   r<   r   r   r   ru   rY   rt   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?atolr   r   )r   r2   r3   r   r   rF   r   r#   rV   r   rU   r   r   r(   )rP   r   r   r    refr8   rR   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+=rtolr<   )r   r,   ra   r-   r9   r   rF   r(   r   r#   rU   rV   r2   r   _ecdf_right_censoredr   rJ   )	rP   r   r4   r5   r8   r   r   rR   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-logr>   gư>)t4d4r   r2   r3   r   r   rF   r#   rK   rJ   rV   rN   r   cliprO   )rP   r   r    r8   rR   ref_allowancesf_cicdf_ci	allowanceref_low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   r>   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   r}   )r?   confidence_level)
g7Aca?g|X?g1?/?r   r   gRＯ?        r   r   )
      ?r   g?8ْ`?r   r   gEy?,˪~O?r   r   )r   )t5d5r   r2   r3   r   r   rF   r   r#   rK   rJ   r   rN   rV   rO   )rP   r   r    r8   rR   lowerupperr   r   rN   rO   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)rh   rj   rk   ro   rp   rq   r   g!E?gܙ{k?guOª?gYe?gaEP?r   z9The confidence interval is undefined at some observationsr:   r   g|E؞?gU<?gsC?gEP?g3&J2?ggE؞?gG<?g!E?r   gEP?g3&J2?r   r>   gk?gutz%?g
?gKuπ?g/8g?g(yD?go(q?g9'?)t1d1r   r2   r3   r   r   rF   rG   searchsortedrJ   rU   rC   rL   rM   rK   r   rN   rV   rO   r#   )rP   r   r    r8   rR   re   flofupirQ   rS   rN   rO   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,   ra   r-   
zeros_likeargmaxr   rF   r2   r3   r   r#   rU   _n_dr   _sf)rP   r4   r8   r   rR   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`.r:   )r   r,   ra   r-   r9   r   rF   matplotlib.pyplotpyplotr#   plotModuleNotFoundErrorImportErrorrC   rD   )rP   r4   r5   r8   r$   rR   pltrQ   r   r   r   test_plot_ivw  s   
&zTestSurvival.test_plot_ivN)#__name__
__module____qualname__staticmethodr9   rT   rW   r]   r^   rg   r   r   r1t2d2r2t3d3r3r   r   r4r   r   r5rC   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)rt   ru   rv   rw   rx   ry   )rt   rz   r{   r|   )r   r   r   )r   r   r   rh   r   r   ri   gK@)g܇~?g%?g ~q?)r   rX   rY   r*   )r{   r   r   rw   )   rx      )rx   r_   r   r   rY   g8v\?)g?ghG:?g]?)rX   r   rx      rh   &   1   2   ?   O   V   b         )   rj   rp   R   r      )r   r   ru   r   rw   r_   r   r   r   r{   r   r   r   r   r   r   #   rh   r|   r|   .   r   L   rq   r   [   p      )"   r|   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lessgreater)re   yalternativer<   g|=r   )r   r2   	enumeratelogrankr   	statisticpvalue)rP   re   r
  r  r  r   r  rR   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   r<   z`y` must ber:   )re   r
  z`x` must be)r   r2   rC   rD   rE   r  )rP   r8   msgr   r   r   test_raises  s   "zTestLogRank.test_raisesN)r   r   r   rC   r   r   r  r  r   r   r   r   r     s4    

4r   )rC   numpyr   numpy.testingr   r   scipyr   scipy.statsr   r(   r)   r   r   r   r   r   <module>   s      b