o
    Ö­jÆU  ã                   @   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/CropPilot/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 s¤w   Y  t jt|d�� |jjdd� W d   ƒ n1 sÂw   Y  d}t jt|d�� |j
 d¡ W d   ƒ n1 sáw   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)gìQ¸…ë@gR¸…ëQ@g=
×£p=@g®Gáz®@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   )	çÍÌÌÌÌÌì?gžï§ÆK7é?çš™™™™™å?r~   gHáz®Gá?gìQ¸…ëÙ?çHáz®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ì?g´Èv¾Ÿç?çòÒMbXá?r’   r’   g´Èv¾Ÿ×?ç^º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 )Nçü©ñÒMbP?©Ú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   #}|4ÌIÝQl   ˆ>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)çú~j¼t“¸?r¢   gHáz®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•·#œ¼Ý?çvß1<ö³×?r¨   r¨   r¨   ç</OçŠÄ?r©   )ç–è,³Åï?rª   gXÇñC%ï?çd–=	lNî?r«   r«   r«   r«   r«   r«   gGÿËµhí?çyÊjºžhë?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)
gÂ4Så?g n À;ùã?g–Î‡g	2Ý?çœoD÷¬kÒ?r¹   r¹   g½§rÚSrÀ?ç?T1³Ÿ?rº   rº   )
gÕæ!S¾ï?gn‹2dï?g Ã|yöë?çU¯²¶©ç?r»   r»   gƒmÄ“ÝLã?ç^ô¤‹Û?r¼   r¼   r®   r>   gñhãˆµøä>r–   r   )
g”‹eÀÌç?gûõÔÀCòå?g’W�ä0à?çJµ’É|Õ?r½   r½   g c£a—vÄ?ç#êè£	§?r¾   r¾   )
g—–x‰ ¦ï?g]Õ^L"Øî?gD%V
§dë?ç×Ô’ˆÑæ?r¿   r¿   g[œ<\é+â?ç¾7Ô§xáØ?rÀ   rÀ   r}   )r?   Úconfidence_level)
g7A�˜caë?g|X›þ§‹è?gí1�ç�á?çä£/”Ö?rÂ   rÂ   gRï¼¯ŒÂ?ç        rÃ   rÃ   )
ç      ð?rÄ   g¡±¨Œüªì?ç8Ù’`§ç?rÅ   rÅ   gñ©à×Eyâ?ç,ËªÞ~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 s©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|	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ÂªÖ?gY®ešá?ga§çEPî?rÄ   z9The confidence interval is undefined at some observationsr:   r   g|EØžªä?g¡U<ÏÝËÜ?gs‘C±¯ûª?gå­ëEPî?g3Â&J2å?gÀgEØžªä?gG<ÏÝËÜ?g !E±¯ûª?rÃ   gæ­ëEPî?g3Â&J2å?r®   r>   gökô´›ÄØ?gutz¼Ì%Ô?g€¼
àš´?gKuËÏ€…?gò/Ÿ8’gï?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®ìÊÓ×?g‰hG:ê?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ð….ƒü@)gžJVáÚQy?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