a
    ߙfbj                     @   sx   d dl Z d dlZd dlmZ d dlmZmZ dddZdddZ	ddd	Z
d
d Zdd Zdd Zdd ZdddZdS )    N)assert_allclose)bayesian_blocksRegularEventsc                 C   sX   t j| }t |dd|d g}t|}t|dksBJ t|d ddd d S )Nd            gY?{Gz?Zrtol)nprandomdefault_rngconcatenater   lenr   )rseedrngxbins r   Glib/python3.9/site-packages/astropy/stats/tests/test_bayesian_blocks.pytest_single_change_point
   s    r   c                 C   s~   t j| }|d}|d d |dd < t j|jtd}|d d  d7  < t|}t|d d |d d }t|| d S )Nr      P   )Zdtyper   )r   r   r   Zonesshapeintr   r   )r   r   tr   bins1bins2r   r   r   test_duplicate_events   s    
r   c                 C   sp   t j| }t ddd}t d|d d  d }d}|||t|  }t|||d	d
}t|g d d S )Nr   r                  ?   -C6?皙?measuresfitnessr   g?g?r   )	r   r   r   linspaceexpstandard_normalr   r   r   )r   r   r   r   sigmar   r   r   r   #test_measures_fitness_homoscedastic$   s    r-   c                  C   s   t jd} t ddd}t d|d d  d }dd| t|  }||| t|  }t|||d	d
}t|g d d S )Nr   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   %test_measures_fitness_heteroscedastic0   s    r.   c               
   C   s   t jd} d}t t | dddt | dddg}|| }t|d|d	}t|d
ksdJ t|d ddd t|t	|d	}t|| t|t	|dd}t|| d S )Ni  {Gz?r   i  r     r   regular_eventsr'   dtr   r      r$   r
   )r3   r&   )
r   r   r   r   uniqueintegersr   r   r   r   )r   r3   Zstepsr   r   r   Zbins3r   r   r   test_regular_events<   s    
r7   c                  C   s  t jd} | d}tt t|d|d W d    n1 sD0    Y  tt$ t|dd| dd W d    n1 s0    Y  tt t|d	d
 W d    n1 s0    Y  tt t|ddd W d    n1 s0    Y  tt& t|d	|d d d W d    n1 s20    Y  | }|d |d< tt t|d	|d W d    n1 s0    Y  tt( t|d	||d d d W d    n1 s0    Y  d S )Nr   r   events)r'   r   r1   
   r   )r'   r   r3   r%   r&   r!   )r'   r,   )r'   r   r,   )r   r   r   pytestZraises
ValueErrorr   copy)r   r   t2r   r   r   test_errorsQ   s$    
,2*,6.r?   c                  C   s  t jd} | d}t|dd}t|g d |dd |dd< t|dd	d
}t|g d d	}|t d }t t|}t|d }d|| 	dt||< d|| 	dt|d |< t||d|d}t|g d d| d }t 
d|d d  }d}||| t|  }t|||dd}g d}t|| d}	t|||d|	d
}t|| dt d|	 t|d   }
t|||d|
d}t|| t 
|
 }t|||d|d}t|| dS )z*Test results for several fitness functions*   r   r8   r&   )Rp7g?-?Lg
?t#"@Nr   r   r/   )r'   Zp0)rA   gbg.b?rB   r0   r9   r   r   r"   r1   r2   )r   g(\u@g{G@g{G#@r    2   g?r%   )g^ML?gms6p'F@guH@gi/K@g{{f0W@r$      gRaR@gd;O޿)r'   Z	ncp_prior)r'   Zgamma)r   r   r   r+   r   r   ZarangeZzerosr   r6   r*   log)r   r   Zedgesr3   r   Nr,   Zx_obsZexpectedZp0_selZncp_prior_selZ	gamma_selr   r   r   test_fitness_function_resultst   sF    





rG   c                 C   sN   t j|  t g d}t|}| |d ks6J | |d ksJJ dS )zS
    Ensure that edges contains both endpoints when there are no change points
    )	r   r   r   r   r   r   r   r   r"   r   r:   N)r   r   ZseedZarrayr   minmax)r   valuesr   r   r   r   test_zero_change_points   s
    rK   )r   )r   )r   )r   )r;   Znumpyr   Znumpy.testingr   Zastropy.statsr   r   r   r   r-   r.   r7   r?   rG   rK   r   r   r   r   <module>   s   


#3