U
    Be7                     @   s   d dl Z d dlZd dlmZmZmZmZmZmZ d dl	m
Z
 dd ZG dd deZG dd	 d	ed
ZG dd ded
ZG dd ded
ZG dd ded
ZG dd ded
ZG dd ded
ZG dd ded
ZG dd dZdS )    N)
VocabularyMLELidstoneLaplaceWittenBellInterpolatedKneserNeyInterpolatedpadded_everygramsc                    s8   t dddddddgdd	 fd
dtdtdfD fS )Nabcdz<s></s>   )Z
unk_cutoffc                    s   g | ]}t  |qS  r   ).0sentZngram_orderr   y/var/www/nmhs-web.org.in/public_html/infoladakh/backend/venv/lib/python3.8/site-packages/nltk/test/unit/lm/test_models.py
<listcomp>   s   z&_prepare_test_data.<locals>.<listcomp>abcdZegadbe)r   listr   r   r   r   _prepare_test_data   s
    
r   c                	       sX   e Zd ZdZdddddddd	d
g	Z fddZejdedd Z	e
dd Z  ZS )ParametrizedTestsz,Metaclass for generating parametrized tests.r
   r   r   )r   <UNK>r   )e)r)wc           	         sN   | dg }t|D ]&\}\}}}| ||||d|< qt | |||S )Nscore_testsztest_score_{})get	enumerateadd_score_testformatsuper__new__)	clsnamebasesdctZscoresiwordcontextexpected_score	__class__r   r   r+   /   s      zParametrizedTests.__new__r2   c                    sB   d  }t fddjjD }t|ddks>t|d S )NzThe context is {}c                 3   s   | ]}j | V  qd S N)modelscore)r   r$   r2   selfr   r   	<genexpr>:   s     z2ParametrizedTests.test_sum_to_1.<locals>.<genexpr>gHz>g      ?)r)   sumr7   vocabpytestapproxAssertionError)r:   r2   messagesr   r9   r   test_sum_to_17   s    
zParametrizedTests.test_sum_to_1c                    s"   d   fdd}|S )Nzword='{}', context={}c                    s*   | j  }t|dks&td S )N-C6?)r7   r8   r>   r?   r@   )r:   r8   r2   r3   rA   r1   r   r   test_methodA   s    z5ParametrizedTests.add_score_test.<locals>.test_method)r)   )r:   r1   r2   r3   rF   r   rE   r   r(   =   s    z ParametrizedTests.add_score_test)__name__
__module____qualname____doc__Zcontextsr+   r>   markZparametrizerC   classmethodr(   __classcell__r   r   r4   r   r   !   s    
r   c                   @   sZ   e Zd ZdZddgdfddgdfddd	gZed
d Zdd Zdd Zdd Z	dd Z
dS )TestMleBigramzUnit tests for MLE ngram model.r   r   r   r"   r   r   Nr   )r
   Ng$I$I?)yNg۶m۶m?c                 C   s*   t d\}}td|d| _| j| d S N   Z
vocabularyr   r   r7   fitr:   r=   Ztraining_textr   r   r   setup_methodX   s    zTestMleBigram.setup_methodc                 C   s"   | j ddg}t|std S )Nr   r"   )r7   logscoremathisinfr@   )r:   rX   r   r   r   test_logscore_zero_score^   s    z&TestMleBigram.test_logscore_zero_scorec                 C   sT   ddddddg}d}d}t | j|d	|ks4tt | j|d	|ksPtd S )
Nr   r
   )r
   r   )r   r    )r    r
   )r
   r   r   r   g(\?g_vO@rD   r>   r?   r7   entropyr@   
perplexity)r:   ZtrainedHr`   r   r   r   test_entropy_perplexity_seenc   s    z*TestMleBigram.test_entropy_perplexity_seenc                 C   s<   ddddg}t | j|s"tt | j|s8td S )Nr\   r
   r   )r   r   r]   )rY   rZ   r7   r_   r@   r`   )r:   Z	untrainedr   r   r   test_entropy_perplexity_unseen{   s    z,TestMleBigram.test_entropy_perplexity_unseenc                 C   sV   d}d}dddddddg}t | j|d	|ks6tt | j|d	|ksRtd S )
Ng~jt@gs @r   r   r   )-r!   )r   rD   r^   )r:   ra   r`   textr   r   r    test_entropy_perplexity_unigrams   s
    z.TestMleBigram.test_entropy_perplexity_unigramsN)rG   rH   rI   rJ   r%   rL   rW   r[   rb   rd   rg   r   r   r   r   rN   H   s   


rN   )	metaclassc                   @   s2   e Zd ZdZdddgdfdddgZed	d
 ZdS )TestMleTrigramzMLE trigram model tests)r   )r   r   r   r   r   r   )r
   Ngqq?rO   rP   NgUUUUUU?c                 C   s*   t d\}}td|d| _| j| d S N   rS   rT   rV   r   r   r   rW      s    zTestMleTrigram.setup_methodN)rG   rH   rI   rJ   r%   rL   rW   r   r   r   r   ri      s   
ri   c                   @   s@   e Zd ZdZddgdfdddgZedd	 Zd
d Zdd ZdS )TestLidstoneBigramzUnit tests for Lidstone classr   r   88?)r
   Ng"u)?)r   Ngк{?)rP   NgL?c                 C   s,   t d\}}tdd|d| _| j| d S )NrR   皙?rS   r   r   r7   rU   rV   r   r   r   rW      s    zTestLidstoneBigram.setup_methodc                 C   s   d| j jkstd S )Nro   r7   gammar@   r:   r   r   r   
test_gamma   s    zTestLidstoneBigram.test_gammac                 C   sT   ddddddg}d}d}t | j|d	|ks4tt | j|d	|ksPtd S )
Nr\   rc   r   r    r    r   r   r   r   r   g=,Ԛ]@g鷯1@rD   r^   r:   rf   ra   r`   r   r   r   test_entropy_perplexity   s    z*TestLidstoneBigram.test_entropy_perplexityN	rG   rH   rI   rJ   r%   rL   rW   rt   rz   r   r   r   r   rm      s   

rm   c                   @   sH   e Zd ZddgdfddgdfdddgdfdddgdfgZedd Zd	S )
TestLidstoneTrigramr   r   rn   r"   gqq?r   c                 C   s,   t d\}}tdd|d| _| j| d S )Nrl   ro   rS   rp   rV   r   r   r   rW      s    z TestLidstoneTrigram.setup_methodN)rG   rH   rI   r%   rL   rW   r   r   r   r   r|      s   


r|   c                   @   s@   e Zd ZdZddgdfdddgZedd	 Zd
d Zdd ZdS )TestLaplaceBigramzUnit tests for Laplace classr   r   gqq?)r
   NgtE]t?)r   NgF]tE?)rP   NgF]tE?c                 C   s*   t d\}}td|d| _| j| d S rQ   )r   r   r7   rU   rV   r   r   r   rW     s    zTestLaplaceBigram.setup_methodc                 C   s   d| j jkstd S )Nr   rq   rs   r   r   r   rt     s    zTestLaplaceBigram.test_gammac                 C   sT   ddddddg}d}d}t | j|d	|ks4tt | j|d	|ksPtd S )
Nr\   rc   ru   rv   rw   rx   gQ	@gݓz!@rD   r^   ry   r   r   r   rz      s    z)TestLaplaceBigram.test_entropy_perplexityNr{   r   r   r   r   r}      s   

r}   c                   @   sD   e Zd Zedd Zdddddgdfdd	dgd
fdddgdfgZdS )!TestWittenBellInterpolatedTrigramc                 C   s*   t d\}}td|d| _| j| d S rk   )r   r   r7   rU   rV   r   r   r   rW   :  s    z.TestWittenBellInterpolatedTrigram.setup_method)r   Ngqq?)r   Ng        rj   r   r   grq?r
   gqq?r   NrG   rH   rI   rL   rW   r%   r   r   r   r   r~   9  s   


r~   c                   @   sD   e Zd Zedd Zdddddgdfdd	dgd
fdddgdfgZdS ) TestKneserNeyInterpolatedTrigramc                 C   s*   t d\}}td|d| _| j| d S rk   )r   r   r7   rU   rV   r   r   r   rW   ^  s    z-TestKneserNeyInterpolatedTrigram.setup_method)r   N      ?)r   Nr   )rP   Nr   r   r   g?r
   gHzG?r   Nr   r   r   r   r   r   ]  s   
	
r   c                   @   sT   e Zd ZdZe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 )TestNgramModelTextGenerationz$Using MLE model, generate some text.c                 C   s*   t d\}}td|d| _| j| d S rk   rT   rV   r   r   r   rW     s    z)TestNgramModelTextGeneration.setup_methodc                 C   s   | j jdddkstd S )Nrl   random_seedr    r7   generater@   rs   r   r   r   test_generate_one_no_context  s    z9TestNgramModelTextGeneration.test_generate_one_no_contextc                 C   sP   | j jdgddkst| j jddgddks2t| j jddgddksLtd S )Nr   	text_seedr   r   r
   r   rs   r   r   r   "test_generate_one_limiting_context  s    z?TestNgramModelTextGeneration.test_generate_one_limiting_contextc                 C   s   | j jddddkstd S )N)r
   r   rR   r   r   r
   r   rs   r   r   r    test_generate_one_varied_context  s    z=TestNgramModelTextGeneration.test_generate_one_varied_contextc                 C   sL   t | jjtdg}| j| | jjdddddddddddgksHtd S )	NZbdbdbd   )r   r      r   r   r   r   )r	   r7   orderr   rU   r   r@   )r:   Zmore_training_textr   r   r   test_generate_cycle  s    z0TestNgramModelTextGeneration.test_generate_cyclec                 C   s(   | j jdddddddddgks$td S )	Nr   )r   r"   rl   r   r    r
   r   r   r   rs   r   r   r   test_generate_with_text_seed  s    z9TestNgramModelTextGeneration.test_generate_with_text_seedc                 C   s(   | j jddd| j jdddks$td S )N)Zaliensrl   r   r   r   rs   r   r   r   test_generate_oov_text_seed  s    z8TestNgramModelTextGeneration.test_generate_oov_text_seedc              	   C   sJ   t t | jjdd W 5 Q R X | jjd dd| jjddksFtd S )Nr6   r   rl   r   r   )r>   Zraises	TypeErrorr7   r   r@   rs   r   r   r   test_generate_None_text_seed  s    z9TestNgramModelTextGeneration.test_generate_None_text_seedN)rG   rH   rI   rJ   rL   rW   r   r   r   r   r   r   r   r   r   r   r   r   }  s   
r   )rY   r>   Znltk.lmr   r   r   r   r   r   Znltk.lm.preprocessingr	   r   typer   rN   ri   rm   r|   r}   r~   r   r   r   r   r   r   <module>   s    
'N;=$ 