
    5[gV                     j    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y)
    N)assert_equalassert_allclose)stats)	_survivalc                    dt         fdt        fg}t        j                  t	        | |      D cg c]	  \  }}||f c}}|      }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 c c}}w )Ntimecensored)dtype)r   r	   )orderr   T)return_index   )floatintnparrayzipsortlogical_notsizearangecumprodunique)timesr	   r
   tddatadiedmnsf_indices	ref_timesref_sfs                 Z/var/www/html/bid-api/venv/lib/python3.12/site-packages/scipy/stats/tests/test_survival.py_kaplan_meier_referencer'      s     e_z3/0E88E8(<=(<1aV(<=UKD77434DLE>>$z*+D

A
		!QA	QXN	#B 52;T:JAwwhl#I1Ff >s   C/
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j4                  j7                  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j4                  j7                  dg d      d        Zd Zd Zd Z d Z!d Z"y )!TestSurvivalc                 r   | j                  |      }| j                  dd|      j                  t        j                        }| j                  t        j                  ||            }| j                  |j                        | j                         kD  }t        j                  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5bhh?RYY|W=>::5:::.=##225(Cuh&&    c                    d}t        j                  t        |      5  t        j                  dgg       d d d        t        j                  t        |      5  t        j                  d       d d d        d}t        j                  t        |      5  t        j                  t
        j                  g       d d d        d}t        j                  t        |      5  t        j                  t        j                  j                  dgdg             d d d        d}t        j                  g d	      }t        j                  t        |      5  |j                  j                  d
       d d d        t        j                  t        |      5  |j                  j                  d       d d d        d}t        j                  t        |      5  |j                  j                  d       d d d        t        j                  t        |      5  |j                  j                  ddg       d d d        d}t        j                  t        |      5  |j                  j                         }d d d        d}t        j                  t        |      5  j                  j                          d d d        t        j                  t        |      5  j                   j                          d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ZxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   $xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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NotImplementedErrorr3   left_censoredcdfconfidence_intervalr!   warnsRuntimeWarninglowhigh)selfmessagerescis       r&   test_input_validationz"TestSurvival.test_input_validation3   sM   @]]:W5JJu 6]]:W5JJqM 6 2]]:W5JJx  6 J]].g>JJu))77tf7MN ? .jj#]]:W5GG''{'; 6]]:W5FF&&k&: 6 G]]:W5GG''+ 6]]:W5FF&&Sz2 6 O\\.8,,.B 9 C]].g>FF&&( ?]].g>GG'') ?>C 6555 65 ?>
 6555 6555 98 ?>>>s   K7L%L7LL+L8MMMM+M77LLLL(+L58MMMM(+M47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       y )Nr   )r   rI   r   rM   	quantilesprobabilities)rS   rU   s     r&   test_edge_caseszTestSurvival.test_edge_casesY   sr    jjnSWW&&+SWW**B/jj!oSWW&&,SWW**QC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                  |       y )N)gQ@gRQ@g=
ףp=@gGz@g@r         )r   rI   r   r   r   r   r   rM   rY   rZ   r!   rS   r9   rU   ref_xref_cdfr%   s         r&   test_uniquezTestSurvival.test_uniqueb   s    /jj 		&)*))Aq/A%WSWW&&.SWW**G4SVV%%u-SVV))6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                  |       y )N)r   r?   r   r?   r@   r+   )gUUUUUU?gUUUUUU?gUUUUUU?g?r   r   )r   rI   r   r   r   r   r   rM   rY   rZ   r!   r_   s         r&   test_nonuniquezTestSurvival.test_nonuniquen   s    #jj 		&)*((23WSWW&&.SWW**G4SVV%%u-SVV))62r;   c                    t         j                  j                  d      }| j                  |d      \  }}}t	        j
                  |      }|j                  j                  }|t        j                  ||d   dz         dz  z   }t        |j                  j                  |      |j                  j                         t        |j                  j                  |      |j                  j                         t        |j                  j                  |d   dz
        d       t        |j                  j                  t         j                   t         j                  g      ddg       t        |j                  j                  |      |j                  j                         t        |j                  j                  |      |j                  j                         t        |j                  j                  |d   dz
        d       t        |j                  j                  t         j                   t         j                  g      ddg       y )Nl   I)_    r   r   )appendr?   r   )r   r-   default_rngr:   r   rI   rM   rY   diffr   evaluaterZ   infr!   )rS   r5   r9   r"   rU   xxrs          r&   test_evaluate_methodsz"TestSurvival.test_evaluate_methodsz   s   ii##$78--c261jj GG1R57+A--SWW%%a(#''*?*?@SWW%%b)377+@+@ASWW%%ad1f-q1SWW%%w&781a&ASVV__Q')=)=>SVV__R(#&&*>*>?SVV__QqT!V,a0SVV__rvvgrvv%67!Q@r;   )
%   +   /   8   <   >   G   M   P   Q   )
r   r   r   r   r   r   r   r   r   r   )
r   r         ?      ?rz   rz   rz   rD   g      ?r   )
                  r{          (   )
r   r   r   r   r   r   r   r   r   r   )	?gK7?皙?r   gHzG?gQ?HzG?r   r   )
!      )   0   r      ro   r   r   rp   )
r   r   r   r   r   r   r   r   r   r   )r   ry   rz   rz   rE   rE   rE   )   r@         r      r~   r?         r   r   r|   r   
      r]   r^   	   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@   r^   r{   r   r^   r^   r{   r|   rf   r~   r?   r   r   r   r|   r^   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                  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       y )NMbP?atolr   r   )r   r3   r4   r   r   rI   r   r!   rZ   r   rY   r   r   r'   )rS   r   r   r   refr9   rU   s          r&   $test_right_censored_against_examplesz1TestSurvival.test_right_censored_against_examples   s      tS##225"..:NOjj ,,c=SVV%%rwwryy/?'@A &eR^^D-ABSVRWWRYYu%567A$/r;   seed)l   -j|Il   #}|4IQl   >5Gn?l   e5"c                    t         j                  j                  |      }|j                  dd      }| j	                  ||      \  }}}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       y )	Nr   d   r   r   )
uncensored+=rtolr?   )r   r-   rh   r.   r:   r   rI   r'   r   r!   rY   rZ   r3   r   _ecdf_right_censoredr   rM   )	rS   r   r5   r6   r9   r   r	   rU   r   s	            r&   4test_right_censored_against_reference_implementationzATestSurvival.test_right_censored_against_reference_implementation   s    ii##D)<<C("&"8"8h"Gxjj %eX6((#a&1,,c!f5 ##u5,,V4jjSVSVV--.A 5 5EBA 4 45Ar;   c                    | j                   | j                  }}t        j                  j	                  |t        j                  |            }t        j                  |      }g d}|j                  j                         }|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                  j                  d	      }t        |j                  j                  |	d
       t        |j                  j                  |
d
       y )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-logrA   gư>)t4d4r   r3   r4   r   r   rI   r!   rN   rM   rZ   rQ   r   cliprR   )rS   r   r   r9   rU   ref_allowancesf_cicdf_ci	allowanceref_lowref_highs              r&   test_right_censored_ciz#TestSurvival.test_right_censored_ci   s   ggtwwt##225"..:NOjj . **,,,.FF((599+B+BB		=t<		// 4 4y @!QG	I

00 4 4y @!QG	I

00 5 5	 A1aH	J11 5 5	 A1aH	JEF **)*<		//tD

00(Fr;   c                 >   | j                   | j                  }}t        j                  j	                  |t        j                  |            }t        j                  |      }t        j                  g d      }t        j                  g d      }|j                  j                  d      }|j                  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                  j                  dd
      }t        |j                  j                  |	       t        |j                  j                  |
       g d}	g d}
|j                  j                  d
      }t        |j                  j                  |	       t        |j                  j                  |
       y )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   rA   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   )rB   confidence_level)
g7Aca?g|X?g1?/?r   r   gRＯ?        r   r   )
      ?r   g?8ْ`?r   r   gEy?,˪~O?r   r   )r   )t5d5r   r3   r4   r   r   rI   r   r!   rN   rM   r   rQ   rZ   rR   )rS   r   r   r9   rU   lowerupperr   r   rQ   rR   s              r&    test_right_censored_ci_example_5z-TestSurvival.test_right_censored_ci_example_5   s   ggtwwt##225"..:NOjj  L M L M **)*<,,I,>		//TB

00%dC

00!E'E111U7F$$ **)<? + A		//5

00$7/L **C*@		//5

00$7r;   c           
         | j                   | j                  }}t        j                  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                  j                         }
d d d        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(                  j                         }
d d d        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(                  j                  d      }
d d d        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$                  |       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)!N)ro   rq   rr   rv   rw   rx   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   rA   gk?gutz%?g
?gKuπ?g/8g?g(yD?go(q?g9'?)t1d1r   r3   r4   r   r   rI   rJ   searchsortedrM   rY   rF   rO   rP   rN   r   rQ   rZ   rR   r!   )rS   r   r   r9   rU   rl   flofupirT   rV   rQ   rR   s                r&   test_right_censored_ci_nansz(TestSurvival.test_right_censored_ci_nans%  s   ggtwwt##225"..:NOjj  %vvq!.0A266Jvv}lL#rvvNOOCGG--q1M\\.8,,.B 9 	,,Q/3SW=--a04c!"g> vv}nmQOvvsC!24ErvvNOOCGG--q1\\.8++-B 9 	,,Q/3SW=--a04c!"g> 2*,?"$79L"B0 BBB,>"BFF,,,c2--t4 \\.8++9+=B 9vvrvv24G"$79L"$7A  24F"$68J"$6@ 	,,c2--t4e 98 984 98s$   4O6O:O&OO#&O/c                    t         j                  j                  d      }|j                  ddd      }t        j                  |      }d|t        j
                  |      <   t        j                  |      }t        j                  t        j                  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	       y )
Nl   m"%< r   r   i  r,   Tr   r   r   )r   r-   rh   r.   
zeros_likeargmaxr   rI   r3   r4   r   r!   rY   _n_dr   _sf)rS   r5   r9   r	   rU   r   s         r&   &test_right_censored_against_uncensoredz3TestSurvival.test_right_censored_against_uncensoredk  s   ii##$78b#D1==(&*6"#jj jj++::68LMSVV%%svv'7'78SVVYY		*SVVYYs^SVVYYs^4

3BCRuEr;   c                    t         j                  j                  d      }|j                  dd      }| j	                  ||      \  }}}t        j                  |      }	 dd lm} |j                  j                          y # t        t        f$ rq t         j                  j                  d      sOd}t        j                   t        |      5  |j                  j                          d d d        Y y # 1 sw Y   Y y xY wY y w xY w)Nl   u!u\xD r   r   r   z
2.0.0.dev0z2matplotlib must be installed to use method `plot`.r=   )r   r-   rh   r.   r:   r   rI   matplotlib.pyplotpyplotr!   plotModuleNotFoundErrorImportError__version__
startswithrF   rG   )rS   r5   r6   r9   r"   rU   pltrT   s           r&   test_plot_ivzTestSurvival.test_plot_ivw  s    ii##$78<<C(--c8<1jj 
	"+FFKKM#[1 	" >>,,\:O]]#6gFFFKKM GFF ;		"s1    A? ?AC?
C/%C?/C9	4C?9C?>C?N)#__name__
__module____qualname__staticmethodr:   rW   r[   rb   rd   rn   r   r   r1t2d2r2t3d3r3r   r   r4r   r   r5rF   markparametrizer   r   r   r   r   r   r    r;   r&   r)   r)   &   s(   ' '$*L1
3
3A& 
2B	'B	<B 
0B	'B	BB	1B	'B	.B
.B	EB
AB 
HB	?B	OB[[Vr2rlRRL2r2,')2rlRRL&B C0C0 [[V &N OBOB&(GT08dD5L
F"r;   r)   c            
           e Zd Zej                  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y)TestLogRankzx, y, statistic, pvalue)r{   r|   r}   r~   r   r   )r{   r   r   r   )r   r   r   )r   r   r   ro   r   r   rp   gK@)g܇~?g%?g ~q?)r   r]   r^   r+   )r   r   r   r~   )   r      )r   rf   r   r   r^   g8v\?)g?ghG:?g]?)r]   r   r      ro   &   1   2   ?   O   V   b         )   rq   rw   R   r     )r   r   r|   r   r~   rf   r  r   r   r   r   r   r   r   r  r   #   ro   r   r   .   r   L   rx   r  [   p      )"   r   F   g.@)gJVQy?g8j^Qi?g%?c                 >   t        j                  |d   |d         }t        j                  |d   |d         }t        g d      D ]S  \  }}t        j                  |||      }t	        |j
                  dz  |d       t	        |j                  ||   d       U y )	Nr   r   )r   right)z	two-sidedlessgreater)rl   yalternativer?   g|=r   )r   r3   	enumeratelogrankr   	statisticpvalue)rS   rl   r  r!  r"  r   r  rU   s           r&   test_log_rankzTestLogRank.test_log_rank  s    j !A$ad;!A$ad;'(HINA{--!qkBC
 CMM1,ieDCJJq	> Jr;   c                 b   t        j                  ddg      }d}t        j                  t        |      5  t        j
                  |ddgg       d d d        d}t        j                  t        |      5  t        j
                  ddgg|       d d d        y # 1 sw Y   JxY w# 1 sw Y   y xY w)Nr   r?   z`y` must ber=   )rl   r  z`x` must be)r   r3   rF   rG   rH   r   )rS   r9   msgs      r&   test_raiseszTestLogRank.test_raises  s    ##QF+]]:S1MMF1vh/ 2 ]]:S1MMaVH/ 21	 21 21s   B5B%B"%B.N)r   r   r   rF   r   r   r#  r&  r   r;   r&   r  r    s    [[!4 '89:H
 .//0D
 I(*F H

!	13h?i3h?	0r;   r  )rF   numpyr   numpy.testingr   r   scipyr   scipy.statsr   r'   r)   r  r   r;   r&   <module>r+     s2      7  !<a" a"HL0 L0r;   