U
    c                     @   sF  e e d ddZddlZedej Zd7e e e e ddd	ZddlmZ	 d
d e
ddD Ze	jedd eD ddd e	jedd eD ddd e	jedd eD ddd e	jedd eD ddd e	  e	d e	   e	  e	  d8e e e e dddZdd e
ddD Ze	jedd eD ddd e	jed d eD ddd e	jed!d eD ddd e	jed"d eD ddd e	jd#d$ e	d% e	  e	   e	  d9e e e e e d'd(d)ZddlZe ed*d+d,Zee ed-d.d/Zdd0lmZ e eedd1d2d3Zd4d5 Zed6krBe  dS ):xreturnc                 C   s    | dk rdS | dk r| S dS dS )z>Returns the probability that a uniform random variable is <= x       N r   r   r   F/home/cheung/ML/DS-from-scratch/07-hypo-testing/scratch/probability.pyuniform_cdf   s
      r	   r   N   r   )r   musigmar   c                 C   s(   t | | d  d |d  t|  S )Nr
   )mathexpSQRT_TWO_PIr   r   r   r   r   r   
normal_pdf
   s    r   c                 C   s   g | ]}|d  qS       $@r   .0r   r   r   r   
<listcomp>   s     r   i2   c                 C   s   g | ]}t |d dqS r   r   r   r   r   r   r   r      s     -zmu=0,sigma=1)Zlabelc                 C   s   g | ]}t |d dqS r
   r   r   r   r   r   r   r      s     z--zmu=0,sigma=2c                 C   s   g | ]}t |d dqS       ?r   r   r   r   r   r   r      s     :zmu=0,sigma=0.5c                 C   s   g | ]}t |d dqS )r   r   r   r   r   r   r      s     z-.zmu=-1,sigma=1zVarious Normal pdfsc                 C   s$   dt | | t d |  d S )Nr   r
   )r   erfsqrtr   r   r   r   
normal_cdf   s    r$   c                 C   s   g | ]}|d  qS r   r   r   r   r   r   r       s     c                 C   s   g | ]}t |d dqS r   r$   r   r   r   r   r   !   s     c                 C   s   g | ]}t |d dqS r   r%   r   r   r   r   r   "   s     c                 C   s   g | ]}t |d dqS r   r%   r   r   r   r   r   #   s     c                 C   s   g | ]}t |d dqS r    r%   r   r   r   r   r   $   s        )ZloczVarious Normal cdfsh㈵>)pr   r   	tolerancer   c                 C   sd   |dks|dkr$||t | |d  S d}d}|| |kr`|| d }t|}|| k rZ|}q,|}q,|S )z,Find approximate inverse using binary searchr   r   )r)   g      $r   r
   )inverse_normal_cdfr$   )r(   r   r   r)   Zlow_zZhi_zZmid_zZmid_pr   r   r   r*   .   s    r*   )r(   r   c                 C   s   t   | k rdS dS )z7Returns 1 with probability p and 0 with probability 1-pr   r   )randomr(   r   r   r   bernoulli_trialG   s    r-   )nr(   r   c                    s   t  fddt| D S )z(Returns the sum of n bernoulli(p) trialsc                 3   s   | ]}t  V  qd S N)r-   r   _r,   r   r   	<genexpr>M   s     zbinomial.<locals>.<genexpr>)sumranger.   r(   r   r,   r   binomialK   s    r6   )Counter)r(   r.   
num_pointsr   c                    s   fddt D }t|}tjdd | D fdd| D ddd   t d  t t|t	|d } fd	d|D }t
|| td
 dS )z<Picks points from a Binomial(n, p) and plots their histogramc                    s   g | ]}t  qS r   )r6   r0   r5   r   r   r   S   s     z&binomial_histogram.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )g?r   r   r   r   r   r   W   s     c                    s   g | ]}|  qS r   r   )r   v)r8   r   r   r   X   s     g?z0.75)Zcolorr   c                    s,   g | ]$}t |d   t |d    qS )r   r%   )r   i)r   r   r   r   r   a   s   z.Binomial Distribution vs. Normal ApproximationN)r4   r7   pltZbarkeysvaluesr   r#   minmaxplottitle)r(   r.   r8   dataZ	histogramxsZysr   )r   r.   r8   r(   r   r   binomial_histogramQ   s    rD   c            	         s   dd l } dd lG dd d| j  d fdd}d}d}d}d tdD ]Z}| }| }| jkrv|d7 }| jkr| jkr|d7 }| jks| jkrT|d7 }qTtd	||  td
||  d||   k rdk sn td||   k rdk sn tttddd}d S )Nr   c                   @   s   e Zd ZdZdZdS )zmain.<locals>.Kidr   r   N)__name__
__module____qualname__BOYGIRLr   r   r   r   Kidl   s   rJ   )r   c                      s     j jgS r/   )choicerH   rI   r   rJ   r+   r   r   
random_kidp   s    zmain.<locals>.random_kidi'  r   zP(both | older):zP(both | either): gQ?gp=
ף?g333333?gffffff?r   c                 S   s    d|   krdk rn ndS dS )Nr   r   r   r   r   r   r   uniform_pdf   s    zmain.<locals>.uniform_pdf)	enumr+   ZEnumseedr4   rI   printAssertionErrorfloat)	rO   rM   Z
both_girlsZ
older_girlZeither_girlr1   ZyoungerZolderrN   r   rL   r   maing   s*    


"rT   __main__)r   r   )r   r   )r   r   r'   )rS   r	   r   r#   pir   r   Zmatplotlib.pyplotZpyplotr;   r4   rC   r@   ZlegendrA   ZgcaclearcloseZclfr$   r*   r+   intr-   r6   collectionsr7   rD   rT   rE   r   r   r   r   <module>   sT   

    '
 