
    _MhU                     x    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 Z
 G d d          Z G d d	          ZdS )
    N)assert_equalassert_allclose)stats)	_survivalc                    dt           fdt          fg}t          j        d t	          | |          D             |          }t          j        |d          }|d         } t          j        |d                   }| j        }t          j        |dd          }t          j	        ||z
  |z            }t          j
        | d d d         d	
          \  }}	| |	 dz
           }
||	 dz
           }|
|fS )Ntimecensoredc                     g | ]	\  }}||f
S  r   ).0tds      _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/stats/tests/test_survival.py
<listcomp>z+_kaplan_meier_reference.<locals>.<listcomp>   s     ===1aV===    )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_sfs               r   _kaplan_meier_referencer,      s     e_z3/0E8==E8(<(<===UKKKD743444DLE>$z*++D
A
	!QA	QXN	#	#B 52;T:::JAwwhl#I1Ffr   c            
          e Zd Zed             Zd Zd Zd Zd Z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             Zej                            dg d          d             Zd Zd Zd Z d Z!d Z"d S )!TestSurvivalc                    |                      |          }|                     dd|                              t          j                  }|                     t          j        ||                    }|                      |j                  |                                  k    }t          j	        
                    ||          }|||fS )Nr      r   )randomintegersastyper   int32permutedrepeatr   r   CensoredDataright_censored)rngn_uniqueunique_timesrepeatsr"   r	   samples          r   get_random_samplezTestSurvival.get_random_sample(   s     zz(++,,q!X..55bh??RY|W==>>::5::..=#225(CCuh&&r   c                    d}t          j        t          |          5  t          j        dgg           d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        t
          j        g           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        t          j        	                    dgdg                     d d d            n# 1 swxY w Y   d}t          j        g d	          }t          j        t          |          5  |j
                            d
           d d d            n# 1 swxY w Y   t          j        t          |          5  |j                            d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  |j
                            d           d d d            n# 1 swxY w Y   t          j        t          |          5  |j                            ddg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  |j
                                        }d d d            n# 1 swxY w Y   d}t          j        t          |          5  |j                                         d d d            n# 1 swxY w Y   t          j        t          |          5  |j                                         d d d            d S # 1 swxY 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NotImplementedErrorr8   left_censoredcdfconfidence_intervalr'   warnsRuntimeWarninglowhigh)selfmessagerescis       r   test_input_validationz"TestSurvival.test_input_validation3   s   @]:W555 	 	Ju	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:W555 	 	JqMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 2]:W555 	! 	!Jx   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! J].g>>> 	O 	OJu)77tf7MMNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O .j##]:W555 	< 	<G''{';;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<]:W555 	; 	;F&&k&:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; G]:W555 	, 	,G''+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,]:W555 	3 	3F&&Sz222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 O\.888 	/ 	/,,..B	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ C].g>>> 	) 	)F&&(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)].g>>> 	* 	*G'')))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   AAA'BBB0 CC #C 6EE
E
F,,F03F0G::G>G>"I		II/JJJ K&&K*-K*L44L8;L8NNNc                 ,   t          j        g           }t          |j        j        g            t          |j        j        g            t          j        dg          }t          |j        j        dg           t          |j        j        dg           d S )Nr   )r   rM   r   rQ   	quantilesprobabilities)rW   rY   s     r   test_edge_caseszTestSurvival.test_edge_casesY   s|    jnnSW&+++SW*B///j!ooSW&,,,SW*QC00000r   c                    g d}t          j        |          }t          j        t          j        |                    }t          j        dd          dz  }d|z
  }t          |j        j        |           t          |j        j	        |           t          |j
        j        |           t          |j
        j	        |           d S )N)gQ@gRQ@g=
ףp=@gGz@g@r         )r   rM   r   r   r!   r   r   rQ   r]   r^   r'   rW   r>   rY   ref_xref_cdfr+   s         r   test_uniquezTestSurvival.test_uniqueb   s    ///j  	&))**)Aq//A%WSW&...SW*G444SV%u---SV)622222r   c                    g d}t          j        |          }t          j        t          j        |                    }t          j        g d          }d|z
  }t          |j        j        |           t          |j        j	        |           t          |j
        j        |           t          |j
        j	        |           d S )N)r   rC   r   rC   rD   r0   )gUUUUUU?gUUUUUU?gUUUUUU?g?r   r   )r   rM   r   r   r!   r   r   rQ   r]   r^   r'   rc   s         r   test_nonuniquezTestSurvival.test_nonuniquen   s    ###j  	&))**(22233WSW&...SW*G444SV%u---SV)622222r   c                 Z   t           j                            d          }|                     |d          \  }}}t	          j        |          }|j        j        }|t          j        ||d         dz             dz  z   }t          |j        
                    |          |j        j                   t          |j        
                    |          |j        j                   t          |j        
                    |d         dz
            d           t          |j        
                    t           j         t           j        g          ddg           t          |j        
                    |          |j        j                   t          |j        
                    |          |j        j                   t          |j        
                    |d         dz
            d           t          |j        
                    t           j         t           j        g          ddg           d S )Nl   I)_    r   r   )appendrC   r   )r   r2   default_rngr?   r   rM   rQ   r]   diffr   evaluater^   infr'   )rW   r:   r>   r(   rY   xxrs          r   test_evaluate_methodsz"TestSurvival.test_evaluate_methodsz   s   i##$788--c2661j  G1R57+++A--SW%%a((#'*?@@@SW%%b))37+@AAASW%%ad1f--q111SW%%w&7881a&AAASV__Q'')=>>>SV__R((#&*>???SV__QqT!V,,a000SV__rvgrv%677!Q@@@@@r   )
%   +   /   8   <   >   G   M   P   Q   )
r   r   r   r   r   r   r   r   r   r   )
r   r         ?      ?r~   r~   r~   rH   g      ?r   )
                  r          (   )
r   r   r   r   r   r   r   r   r   r   )	?gK7?皙?r   gHzG?gQ?HzG?r   r   )
!      )   0   r      rs   r   r   rt   )
r   r   r   r   r   r   r   r   r   r   )r   r}   r~   r~   rI   rI   rI   )   rD         r      r   rC         r   r   r   r   
      ra   rb   	   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   )rD   rb   r   r   rb   rb   r   r   rj   r   rC   r   r   r   r   rb   r   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                 :   |\  }}}t           j                            |t          j        |                    }t          j        |          }t          |j        j        |d           t          |j        j
        t          j        t          j        |                               t          |t          j        |                    }t          |d         t          j        t          j        |                               t          |d         |d           d S )NMbP?atolr   r   )r   r8   r9   r   r   rM   r   r'   r^   r   r]   r   r!   r,   )rW   r   r"   r$   refr>   rY   s          r   $test_right_censored_against_examplesz1TestSurvival.test_right_censored_against_examples   s      tS#225".:N:NOOj  ,c====SV%rwry/?/?'@'@AAA &eR^D-A-ABBSVRWRYu%5%566777A$//////r   seed)l   -j|Il   #}|4IQl   >5Gn?l   e5"c                    t           j                            |          }|                    dd          }|                     ||          \  }}}t          j        |          }t          ||          }t          |j	        j
        |d                    t          |j	        j        |d                    t          j        |          }t          j        |          }t          j        |          }t          |d         |j	        j
                   t          |d         |j        j        d           t          |d         |j	        j        d           d S )	Nr   d   r   r   )
uncensored+=rtolrC   )r   r2   rl   r3   r?   r   rM   r,   r   r'   r]   r^   r8   r   _ecdf_right_censoredr   rQ   )	rW   r   r:   r;   r>   r"   r	   rY   r   s	            r   4test_right_censored_against_reference_implementationzATestSurvival.test_right_censored_against_reference_implementation   s'    i##D))<<C(("&"8"8h"G"Gxj  %eX66(#a&111,c!f555 #u555,V44jSVSV-...A 5EBBBBA 45AAAAAAr   c                    | j         | j        }}t          j                            |t          j        |                    }t          j        |          }g d}|j        	                                }|j
        	                                }|j        j        |j        j        z
  }t          ||d           t          |j        j        t          j        |j        j        |z
  dd                     t          |j        j        t          j        |j        j        |z   dd                     t          |j        j        t          j        |j
        j        |z
  dd                     t          |j        j        t          j        |j
        j        |z   dd                     g d}	g d}
|j        	                    d	          }t          |j        j        |	d
           t          |j        j        |
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-logrE   gư>)t4d4r   r8   r9   r   r   rM   r'   rR   rQ   r^   rU   r   cliprV   )rW   r"   r$   r>   rY   ref_allowancesf_cicdf_ci	allowanceref_lowref_highs              r   test_right_censored_ciz#TestSurvival.test_right_censored_ci   s   gtwt#225".:N:NOOj  . . . **,,,,..F(59+BB		=t<<<<	/ 4y @!QGG	I 	I 	I
0 4y @!QGG	I 	I 	I
0 5	 A1aHH	J 	J 	J1 5	 A1aHH	J 	J 	JE E EF F F **)*<<	/tDDDD
0(FFFFFFr   c                    | j         | j        }}t          j                            |t          j        |                    }t          j        |          }t          j        g d          }t          j        g d          }|j	        
                    d          }|j        
                    d          }t          |j        j        |d           t          |j        j        |d           t          |j        j        d|z
  d           t          |j        j        d|z
  d           g d}	g d	}
|j	        
                    dd
          }t          |j        j        |	           t          |j        j        |
           g d}	g d}
|j	        
                    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   rE   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   )rF   confidence_level)
g7Aca?g|X?g1?/?r   r   gRＯ?        r   r   )
      ?r   g?8ْ`?r   r   gEy?,˪~O?r   r   )r   )t5d5r   r8   r9   r   r   rM   r   r'   rR   rQ   r   rU   r^   rV   )rW   r"   r$   r>   rY   lowerupperr   r   rU   rV   s              r    test_right_censored_ci_example_5z-TestSurvival.test_right_censored_ci_example_5   s   gtwt#225".:N:NOOj   L L L M M L L L M M **)*<<,,I,>>	/TBBBB
0%dCCCC
0!E'EEEE11U7FFFF$ $ $$ $ $ **)<? + A A	/555
0$777/ / /L L L **C*@@	/555
0$77777r   c           
      2   | j         | j        }}t          j                            |t          j        |                    }t          j        |          }g d}t
          j        ddddt
          j        g}t
          j        ddddt
          j        g}t          j	        |j
        j        |          }d	}	t          j        t          |	
          5  |j
                                        }
d d d            n# 1 swxY w 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
        j        |          }t          j        t          |	
          5  |j                                        }
d d d            n# 1 swxY w 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          |	
          5  |j                            d          }
d d d            n# 1 swxY 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)rs   ru   rv   rz   r{   r|   r   g!E?gܙ{k?guOª?gYe?gaEP?r   z9The confidence interval is undefined at some observationsrA   r   g|E؞?gU<?gsC?gEP?g3&J2?ggE؞?gG<?g!E?r   gEP?g3&J2?r   rE   gk?gutz%?g
?gKuπ?g/8g?g(yD?go(q?g9'?)t1d1r   r8   r9   r   r   rM   rN   searchsortedrQ   r]   rJ   rS   rT   rR   r   rU   r^   rV   r'   )rW   r"   r$   r>   rY   rp   flofupirX   rZ   rU   rV   s                r   test_right_censored_ci_nansz(TestSurvival.test_right_censored_ci_nans%  s   gtwt#225".:N:NOOj   %$$vq!.0A26Jv}lL#rvNOCG-q11M\.888 	/ 	/,,..B	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	,Q/3SW===-a04c!""g>>> v}nmQOvsC!24ErvNOCG-q11\.888 	. 	.++--B	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	,Q/3SW===-a04c!""g>>> 2*,?"$79L"B0 BBB,>"BF,,c222-t444 \.888 	> 	>++9+==B	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>vrv24G"$79L"$7A  24F"$68J"$6@ 	,c222-t44444s6   C33C7:C7G66G:=G:LLLc                    t           j                            d          }|                    ddd          }t          j        |          }d|t          j        |          <   t          j        |          }t          j        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 S )
Nl   m"%< r   r   i  r1   Tr   r   r   )r   r2   rl   r3   
zeros_likeargmaxr   rM   r8   r9   r   r'   r]   _n_dr   _sf)rW   r:   r>   r	   rY   r   s         r   &test_right_censored_against_uncensoredz3TestSurvival.test_right_censored_against_uncensoredk  s   i##$788b#D11=((&*6""#j  j+::68LLMMSV%sv'7888SVY	***SVYss^SVYss^444
3B3CRCuEEEEEEr   c                    t           j                            d          }|                    dd          }|                     ||          \  }}}t          j        |          }	 dd lm} |j	        
                                 d S # t          t          f$ rT d}t          j        t          |          5  |j	        
                                 d d d            Y d S # 1 swxY w Y   Y d S w xY w)Nl   u!u\xD r   r   r   z2matplotlib must be installed to use method `plot`.rA   )r   r2   rl   r3   r?   r   rM   matplotlib.pyplotpyplotr'   plotModuleNotFoundErrorImportErrorrJ   rK   )rW   r:   r;   r>   r(   rY   pltrX   s           r   test_plot_ivzTestSurvival.test_plot_ivw  s7   i##$788<<C((--c8<<1j  	++++++FKKMMMMM#[1 	 	 	KG2'BBB                     	s6   %B .C+4CC+C 	 C+#C 	$C+*C+N)#__name__
__module____qualname__staticmethodr?   r[   r_   rf   rh   rr   r   r   r1t2d2r2t3d3r3r   r   r4r   r   r5rJ   markparametrizer   r   r   r   r   r   r   r   r   r   r.   r.   &   s<       ' ' \'$* $* $*L1 1 1
3 
3 
3
3 
3 
3A A A& 
2	1	1B	'	'	'B	<	<	<B 
0	/	/B	'	'	'B	B	B	BB	1	1	1B	'	'	'B	.	.	.B
. 
. 
.B	E	E	EB
A 
A 
AB 
H	G	GB	?	?	?B	O	O	OB[Vr2rlRRL2r2,')2rlRRL&B C C0 0C C0 [V &N &N &N O OB BO OB&(G (G (GT08 08 08dD5 D5 D5L
F 
F 
F    r   r.   c            
           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             Zd ZdS )TestLogRankzx, y, statistic, pvalue)r   r   r   r   r   r   )r   r   r   r   )r   r   r   )r   r   r   rs   r   r   rt   gK@)g܇~?g%?g ~q?)r   ra   rb   r0   )r   r   r   r   )   r      )r   rj   r   r   rb   g8v\?)g?ghG:?g]?)ra   r   r      rs   &   1   2   ?   O   V   b         )   ru   r{   R   r     )r   r   r   r   r   rj   r  r   r   r   r   r   r   r   r  r   #   rs   r   r   .   r   L   r|   r  [   p      )"   r   F   g.@)gJVQy?g8j^Qi?g%?c                 X   t          j        |d         |d                   }t          j        |d         |d                   }t          g d          D ]S\  }}t          j        |||          }t	          |j        dz  |d           t	          |j        ||         d           Td S )	Nr   r   )r   right)z	two-sidedlessgreater)rp   yalternativerC   g|=r   )r   r8   	enumeratelogrankr   	statisticpvalue)rW   rp   r  r"  r#  r   r  rY   s           r   test_log_rankzTestLogRank.test_log_rank  s    j !A$ad;;;!A$ad;;;'(H(H(HII 	? 	?NA{-!qkBBBC
 CM1,ieDDDDCJq	>>>>>	? 	?r   c                 l   t          j        ddg          }d}t          j        t          |          5  t          j        |ddgg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        ddgg|           d d d            d S # 1 swxY w Y   d S )Nr   rC   z`y` must berA   )rp   r  z`x` must be)r   r8   rJ   rK   rL   r!  )rW   r>   msgs      r   test_raiseszTestLogRank.test_raises  s;   #QF++]:S111 	0 	0MF1vh////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 ]:S111 	0 	0MaVH////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s#   AA!AB))B-0B-N)r   r   r   rJ   r   r   r$  r'  r   r   r   r  r    s       [!4 '&&8||999:HHH
 }}.../{{///0DDD
 IHH(((*F F F|| HHH

!	13 3h? ?i3 3h?	0 	0 	0 	0 	0r   r  )rJ   numpyr   numpy.testingr   r   scipyr   scipy.statsr   r,   r.   r  r   r   r   <module>r,     s         7 7 7 7 7 7 7 7       ! ! ! ! ! !  <] ] ] ] ] ] ] ]@L0 L0 L0 L0 L0 L0 L0 L0 L0 L0r   