U
    øÕ/e\  ã                   @   sÌ   d dl Z d dlZd dlZd dlmZ d dlmZ dd„ Zdd„ Zdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ ZdS ))é    N)Úrandomc                     sZ   t dƒ‰ tjˆ dd} ttj| dd ¡ ƒ}t|ƒdks<t‚t	‡ fdd„|D ƒƒsVt‚d S )Né   é   ©Znpartitionsé   ©Úkc                 3   s   | ]}|ˆ kV  qd S ©N© ©Ú.0Úi©Úseqr
   ú>/tmp/pip-unpacked-wheel-dbjnr7gq/dask/bag/tests/test_random.pyÚ	<genexpr>   s     z.test_choices_size_exactly_k.<locals>.<genexpr>©
ÚrangeÚdbÚfrom_sequenceÚlistr   ÚchoicesÚcomputeÚlenÚAssertionErrorÚall©ÚsutÚlir
   r   r   Útest_choices_size_exactly_k
   s
    r   c                     sZ   t dƒ‰ tjˆ dd} ttj| dd ¡ ƒ}t|ƒdks<t‚t	‡ fdd„|D ƒƒsVt‚d S )Nr   r   é   r   c                 3   s   | ]}|ˆ kV  qd S r	   r
   r   r   r
   r   r      s     z6test_choices_k_bigger_than_bag_size.<locals>.<genexpr>r   r   r
   r   r   Ú#test_choices_k_bigger_than_bag_size   s
    r!   c                     sz   t dƒ‰ tjˆ dd} |  d¡} ttj| dd ¡ ƒ}|  t	¡ ¡ dksLt
‚t	|ƒdks\t
‚t‡ fdd	„|D ƒƒsvt
‚d S )
Né
   é	   ©Zpartition_sizer   r   r   ©r#   r   é   c                 3   s   | ]}|ˆ kV  qd S r	   r
   r   r   r
   r   r   !   s     z/test_choices_empty_partition.<locals>.<genexpr>)r   r   r   Úrepartitionr   r   r   r   Úmap_partitionsr   r   r   r   r
   r   r   Útest_choices_empty_partition   s    
r)   c                     sp   t dƒ‰ tjˆ dd} ttj| dd ¡ ƒ}|  t¡ ¡ dksBt	‚t|ƒdksRt	‚t
‡ fdd„|D ƒƒslt	‚d S )	Nr"   r#   r$   r   r   ©r#   r&   c                 3   s   | ]}|ˆ kV  qd S r	   r
   r   r   r
   r   r   *   s     zEtest_choices_k_bigger_than_smallest_partition_size.<locals>.<genexpr>©r   r   r   r   r   r   r   r(   r   r   r   r   r
   r   r   Ú2test_choices_k_bigger_than_smallest_partition_size$   s    r,   c                     sp   t dƒ‰ tjˆ dd} ttj| dd ¡ ƒ}|  t¡ ¡ dksBt	‚t|ƒdksRt	‚t
‡ fdd„|D ƒƒslt	‚d S )Nr"   r#   r$   r   r*   c                 3   s   | ]}|ˆ kV  qd S r	   r
   r   r   r
   r   r   3   s     zKtest_choices_k_equal_bag_size_with_unbalanced_partitions.<locals>.<genexpr>r+   r   r
   r   r   Ú8test_choices_k_equal_bag_size_with_unbalanced_partitions-   s    r-   c                     sr   t dƒ‰ tjˆ dd} ttj| ddd ¡ ƒ}|  t¡ ¡ dksDt	‚t|ƒdksTt	‚t
‡ fdd„|D ƒƒsnt	‚d S )	Néd   r"   r   é   ©r   Zsplit_every©
r"   r"   r"   r"   r"   r"   r"   r"   r"   r"   c                 3   s   | ]}|ˆ kV  qd S r	   r
   r   r   r
   r   r   =   s     z7test_choices_with_more_bag_partitons.<locals>.<genexpr>r+   r   r
   r   r   Ú$test_choices_with_more_bag_partitons6   s    r2   c                     sŠ   t dƒ‰ tjˆ dd} ttj| ddd ¡ ƒ}|  t¡ ¡ dksDt	‚t|ƒdksTt	‚t
‡ fdd„|D ƒƒsnt	‚tt|ƒƒt|ƒks†t	‚d S )	Nr.   r"   r   r/   r0   r1   c                 3   s   | ]}|ˆ kV  qd S r	   r
   r   r   r
   r   r   G   s     z6test_sample_with_more_bag_partitons.<locals>.<genexpr>©r   r   r   r   r   Úsampler   r(   r   r   r   Úsetr   r
   r   r   Ú#test_sample_with_more_bag_partitons@   s    r6   c                     sˆ   t dƒ‰ tjˆ dd} ttj| dd ¡ ƒ}|  t¡ ¡ dksBt	‚t|ƒdksRt	‚t
‡ fdd„|D ƒƒslt	‚tt|ƒƒt|ƒks„t	‚d S )	Nr   r   r   r   r   )é   r7   é   c                 3   s   | ]}|ˆ kV  qd S r	   r
   r   r   r
   r   r   Q   s     z-test_sample_size_exactly_k.<locals>.<genexpr>r3   r   r
   r   r   Útest_sample_size_exactly_kK   s    r9   c               	   C   sF   t dƒ} tj| dd}tjtdd tj|dd ¡  W 5 Q R X d S )Nr   r   zSample larger than population)Úmatchr    r   )	r   r   r   ÚpytestZraisesÚ
ValueErrorr   r4   r   ©r   r   r
   r
   r   Ú"test_sample_k_bigger_than_bag_sizeU   s    r>   c                     s’   t dƒ‰ tjˆ dd} |  d¡} ttj| dd ¡ ƒ}|  t	¡ ¡ dksLt
‚t	|ƒdks\t
‚t‡ fdd	„|D ƒƒsvt
‚t	t|ƒƒt	|ƒksŽt
‚d S )
Nr"   r#   r$   r   r   r   r%   c                 3   s   | ]}|ˆ kV  qd S r	   r
   r   r   r
   r   r   d   s     z.test_sample_empty_partition.<locals>.<genexpr>)r   r   r   r'   r   r   r4   r   r(   r   r   r   r5   r   r
   r   r   Útest_sample_empty_partition]   s    
r?   c                     sˆ   t dƒ‰ tjˆ dd} ttj| dd ¡ ƒ}|  t¡ ¡ dksBt	‚t|ƒdksRt	‚t
‡ fdd„|D ƒƒslt	‚tt|ƒƒt|ƒks„t	‚d S )	Nr"   r#   r$   r   r   r*   c                 3   s   | ]}|ˆ kV  qd S r	   r
   r   r   r
   r   r   n   s     zItest_sample_size_k_bigger_than_smallest_partition_size.<locals>.<genexpr>r3   r   r
   r   r   Ú6test_sample_size_k_bigger_than_smallest_partition_sizeh   s    r@   c                     sˆ   t dƒ‰ tjˆ dd} ttj| dd ¡ ƒ}|  t¡ ¡ dksBt	‚t|ƒdksRt	‚t
‡ fdd„|D ƒƒslt	‚tt|ƒƒt|ƒks„t	‚d S )Nr"   r#   r$   r   r*   c                 3   s   | ]}|ˆ kV  qd S r	   r
   r   r   r
   r   r   x   s     zJtest_sample_k_equal_bag_size_with_unbalanced_partitions.<locals>.<genexpr>r3   r   r
   r   r   Ú7test_sample_k_equal_bag_size_with_unbalanced_partitionsr   s    rA   c                  C   s>   t jtdƒdd} tj| ddd}| ¡ }t|ƒdks:t‚d S )Nr"   r   r$   r/   r   r0   )r   r   r   r   r4   r   r   r   )ÚbagZbag2r   r
   r
   r   Ú$test_sample_k_larger_than_partitions|   s    rC   c                  C   s@   t dƒ} ddddg}d}tj| ||d}tt|ƒƒ|ks<t‚d S )Nr    ç{®Gáz„?g…ëQ¸Õ?r   )Ú
populationÚweightsr   )r   r   Z&_weighted_sampling_without_replacementr   r5   r   )rE   Úpr   Zsampledr
   r
   r   Ú*test_weighted_sampling_without_replacementƒ   s      ÿrH   c                  C   s4   t dƒ} tj| dd}ttj|ddtjƒs0t‚d S )Nr   r   r   r   r   )r   r   r   Ú
isinstancer   r4   ZBagr   r=   r
   r
   r   Útest_sample_return_bag   s    rJ   c                  C   sv   t  ddgdddgdgdgg¡} t  dd	d
dg¡}tj|  ¡ | ¡  ¡ d d¡}t  ||¡ ¡ }t	|ƒdksrt
‚d S )Nr&   r   r   r    é   r8   r7   ÚaÚbÚcÚdr   )r   r   r   r   ÚflattenÚcountr   r'   Úzipr   r   )ÚAÚBrL   ÚCr
   r
   r   Ú$test_partitions_are_coerced_to_lists“   s
      rV   c                     sÞ   d\} ‰ t t| ƒƒ}dd„ t| ƒD ƒ}dd„ t| ƒD ƒ}d‰tˆƒD ]R}t |ˆ ¡\}}|D ]}||  d7  < q\tj|ˆ dD ]}||  d7  < q€qD‡ ‡fdd„|D ƒ}‡ ‡fd	d„|D ƒ}tjd
t||ƒddsÚt	‚d S )N©r   r"   c                 S   s   g | ]}d ‘qS ©r   r
   ©r   Ú_r
   r
   r   Ú
<listcomp>¡   s     zDtest_reservoir_sample_map_partitions_correctness.<locals>.<listcomp>c                 S   s   g | ]}d ‘qS rX   r
   rY   r
   r
   r   r[   ¢   s     éÐ  r&   r   c                    s   g | ]}|ˆˆ   ‘qS r
   r
   ©r   rN   ©r   Zrepsr
   r   r[   ¬   s     c                    s   g | ]}|ˆˆ   ‘qS r
   r
   r]   r^   r
   r   r[   ­   s     ç        rD   ©Zabs_tol)
r   r   r   Z_sample_map_partitionsÚrndr4   ÚmathÚiscloseÚbhattacharyyar   ©ÚNr   ÚdistributionZexpected_distributionrZ   ZpicksZpickr
   r^   r   Ú0test_reservoir_sample_map_partitions_correctnessž   s$      ÿrh   c                     sÞ   d\} ‰ t t| ƒƒ}dd„ t| ƒD ƒ}dd„ t| ƒD ƒ}d‰tˆƒD ]R}t |ˆ ¡\}}|D ]}||  d7  < q\tj|ˆ dD ]}||  d7  < q€qD‡ ‡fdd„|D ƒ}‡ ‡fd	d„|D ƒ}tjd
t||ƒddsÚt	‚d S )NrW   c                 S   s   g | ]}d ‘qS rX   r
   rY   r
   r
   r   r[   ¸   s     zUtest_reservoir_sample_with_replacement_map_partitions_correctness.<locals>.<listcomp>c                 S   s   g | ]}d ‘qS rX   r
   rY   r
   r
   r   r[   ¹   s     r\   r&   r   c                    s   g | ]}|ˆˆ   ‘qS r
   r
   r]   r^   r
   r   r[   Ã   s     c                    s   g | ]}|ˆˆ   ‘qS r
   r
   r]   r^   r
   r   r[   Ä   s     r_   rD   r`   )
r   r   r   Z'_sample_with_replacement_map_partitionsra   r   rb   rc   rd   r   re   r
   r^   r   ÚAtest_reservoir_sample_with_replacement_map_partitions_correctnessµ   s$      ÿri   c                 C   s   dt dd„ t| |ƒD ƒƒ S )Nr&   c                 s   s    | ]\}}t  || ¡V  qd S r	   )rb   Úsqrt)r   ÚhiZhjr
   r
   r   r   Í   s     z bhattacharyya.<locals>.<genexpr>)ÚsumrR   )Úh1Úh2r
   r
   r   rd   Ì   s    rd   )rb   r   ra   r;   Zdask.bagrB   r   r   r!   r)   r,   r-   r2   r6   r9   r>   r?   r@   rA   rC   rH   rJ   rV   rh   ri   rd   r
   r
   r
   r   Ú<module>   s.   
		




