Ë
    çÍ:jK!  ã                   óp   — d Z ddlmZ d„ Zd„ Z G d„ d«      Z G d„ d«      Z G d	„ d
«      Z G d„ d«      Zy)z6
Test Aline algorithm for aligning phonetic sequences
é    )Úalinec                  ó  — t        j                  dd«      } g d¢g}| |k(  sJ ‚t        j                  dd«      } ddgg}| |k(  sJ ‚t        j                  dd	«      } g d
¢g}| |k(  sJ ‚t        j                  dd«      } g d¢g}| |k(  sJ ‚y )Nu   Î¸inÚtenwis))õ   Î¸Út©ÚiÚe©Únr   Újou   Ê’É™)Úju   Ê’)Úou   É™ÚpematesiweniÚpematesewen)©Úpr   ©r
   r
   )Úmr   ©Úar   ©r   r   r   )Úsr   r   )Úwr   r   r   u   tuwÎ¸Údentis)r   )Úur	   )r   ú-)r   r   ©r   Úalign)ÚresultÚexpecteds     ún/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/nltk/test/unit/test_aline.pyÚ
test_aliner#      s¥   € Ü�[‰[˜ Ó*€FÚ5Ð6€Hà�XÒÐÐä�[‰[˜˜vÓ&€FØ˜kÐ*Ð+€Hà�XÒÐÐä�[‰[˜¨Ó7€Fò	
ð€Hð  �XÒÐÐä�[‰[˜ (Ó+€FÚAÐB€Hà�XÒÐÑó    c                  óp   — t        j                  dd«      dk(  sJ ‚t        j                  dd«      dk(  sJ ‚y)zF
    Test aline for computing the difference between two segments
    r   Úqg      4@r   ÚAç        N©r   Údelta© r$   r"   Útest_aline_deltar,   ,   s6   € ô �;‰;�s˜CÓ  DÒ(Ð(Ð(Ü�;‰;�s˜CÓ  CÒ'Ð'Ñ'r$   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestAlineEdgeCasesc                 óD   — t        j                  dd«      }|g d¢gk(  sJ ‚y)zAAligning identical strings should produce perfect 1-to-1 mapping.Úpat)r   r   r   Nr   ©Úselfr    s     r"   Útest_identical_stringsz)TestAlineEdgeCases.test_identical_strings5   s$   € ä—‘˜U EÓ*ˆØÒ>Ð?Ò?Ð?Ñ?r$   c                 ó¶   — 	 t        j                  dd«       J d«       ‚# t        $ r Y nw xY w	 t        j                  dd«       J d«       ‚# t        $ r Y yw xY w)z7Unknown segments should raise ValueError, not KeyError.r   ú!zExpected ValueErroru   â˜ºr   N)r   r   Ú
ValueError©r2   s    r"   Útest_invalid_segment_raisesz.TestAlineEdgeCases.test_invalid_segment_raises:   sb   € ð	Ü�K‰K˜˜SÔ!Ø/Ð/Ó/�5øÜò 	Ùð	úð	Ü�K‰K˜˜sÔ#Ø/Ð/Ó/�5øÜò 	Ùð	ús   ‚ Ÿ	+ª+¯A Á	AÁAc                 óB   — t        j                  dd«      }|dggk(  sJ ‚y)zSingle characters should align.r   r   Nr   r1   s     r"   Útest_single_charz#TestAlineEdgeCases.test_single_charG   ó$   € ä—‘˜S #Ó&ˆØ˜:˜,˜Ò'Ð'Ñ'r$   c                 óB   — t        j                  dd«      }|dggk(  sJ ‚y)z/Different single consonants should still align.r   r   )r   r   Nr   r1   s     r"   Útest_single_char_differentz-TestAlineEdgeCases.test_single_char_differentL   r;   r$   c                 óB   — t        j                  dd«      }|dggk(  sJ ‚y)zSingle vowels should align.r   r
   )r   r
   Nr   r1   s     r"   Útest_single_vowelz$TestAlineEdgeCases.test_single_vowelQ   r;   r$   N)Ú__name__Ú
__module__Ú__qualname__r3   r8   r:   r=   r?   r+   r$   r"   r.   r.   4   s   „ ò@ò
ò(ò
(ó
(r$   r.   c                   óL   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)ÚTestFeatureMatrixz:Verify IPA feature assignments match phonetic definitions.c                 óh   — t         j                  D ]  }|t         j                  v rŒJ d|›d�«       ‚ y)zCEvery consonant in the consonants list should be in feature_matrix.ú
Consonant ú missing from feature_matrixN©r   Ú
consonantsÚfeature_matrix©r2   Úcs     r"   Ú%test_all_consonants_in_feature_matrixz7TestFeatureMatrix.test_all_consonants_in_feature_matrix_   s?   € ä×!Ñ!ò 	>ˆAà”U×)Ñ)Ò)ð>à˜A˜5Ð <Ð=ó>Ø)ñ	>r$   c                 óh   — t         j                  D ]  }|t         j                  v rŒJ d|›d�«       ‚ y)z8Every vowel (place='vowel' entry) should be a valid key.úVowel rG   N©r   ÚvowelsrJ   ©r2   Úvs     r"   Ú!test_all_vowels_in_feature_matrixz3TestFeatureMatrix.test_all_vowels_in_feature_matrixf   s:   € ä—‘ò 	YˆAØœ×,Ñ,Ò,ÐX°°q°eÐ;WÐ.XÓXÐ,ñ	Yr$   c                 ój   — t         j                  D ]   }||j                  «       k(  rŒJ d|›d�«       ‚ y)z3No consonant entry should have trailing whitespace.rF   ú has trailing whitespaceN)r   rI   ÚstriprK   s     r"   Ú%test_no_trailing_spaces_in_consonantsz7TestFeatureMatrix.test_no_trailing_spaces_in_consonantsk   s:   € ä×!Ñ!ò 	NˆAØ˜Ÿ™›	“>ÐM Z°¨uÐ4LÐ#MÓM�>ñ	Nr$   c                 ój   — t         j                  D ]   }||j                  «       k(  rŒJ d|›d�«       ‚ y)z/No vowel entry should have trailing whitespace.rO   rV   N)r   rQ   rW   rR   s     r"   Ú!test_no_trailing_spaces_in_vowelsz3TestFeatureMatrix.test_no_trailing_spaces_in_vowelsp   s8   € ä—‘ò 	JˆAØ˜Ÿ™›	“>ÐI V¨A¨5Ð0HÐ#IÓI�>ñ	Jr$   c                 ój   — t         j                  D ]   }||j                  «       k(  rŒJ d|›d�«       ‚ y)z6No feature_matrix key should have trailing whitespace.zFeature matrix key rV   N)r   rJ   rW   )r2   Úks     r"   Ú.test_no_trailing_spaces_in_feature_matrix_keysz@TestFeatureMatrix.test_no_trailing_spaces_in_feature_matrix_keysu   s;   € ä×%Ñ%ò 	WˆAØ˜Ÿ™›	“>ÐVÐ%8¸¸Ð=UÐ#VÓV�>ñ	Wr$   c                 óv   — t         j                  D ]&  }t         j                  |   d   dk7  rŒJ d|›d�«       ‚ y)z'No consonant should have place='vowel'.ÚplaceÚvowelrF   z has place='vowel'NrH   rK   s     r"   Útest_consonants_not_vowel_placez1TestFeatureMatrix.test_consonants_not_vowel_placez   sI   € ä×!Ñ!ò 	4ˆAä×$Ñ$ QÑ'¨Ñ0°GÓ;ð4à˜A˜5Ð 2Ð3ó4Ø;ñ	4r$   c                 ó¢   — t         j                  D ]<  }t         j                  |   d   dk(  rŒJ d|›dt         j                  |   d   ›�«       ‚ y)z7All vowels in feature_matrix should have place='vowel'.r_   r`   rO   z has place=NrP   rR   s     r"   Útest_vowels_have_vowel_placez.TestFeatureMatrix.test_vowels_have_vowel_place�   s_   € ä—‘ò 	MˆAä×$Ñ$ QÑ'¨Ñ0°GÓ;ðMà˜�u˜K¬×(<Ñ(<¸QÑ(?ÀÑ(HÐ'KÐLóMØ;ñ	Mr$   c                 ó´   — g d¢}|D ]O  }|t         j                  v sŒt         j                  |   d   dk(  rŒ0J d|›dt         j                  |   d   ›�«       ‚ y)z;Vowels that are unrounded in IPA should have round='minus'.)r	   r
   u   É›r   u   É¯õ   É˜u   Éœu   É�u   É‘u   ÊŒu   É¤ÚroundÚminuszIPA unrounded vowel ú has round=N©r   rJ   )r2   Ú	unroundedrS   s      r"   Útest_unrounded_vowelsz'TestFeatureMatrix.test_unrounded_vowels‰   so   € âSˆ	Øò 	_ˆAØ”E×(Ñ(Ò(ä×(Ñ(¨Ñ+¨GÑ4¸Ó?ð_à)¨!¨¨k¼%×:NÑ:NÈqÑ:QÐRYÑ:ZÐ9]Ð^ó_Ø?ñ	_r$   c                 ó´   — g d¢}|D ]O  }|t         j                  v sŒt         j                  |   d   dk(  rŒ0J d|›dt         j                  |   d   ›�«       ‚ y)z8Vowels that are rounded in IPA should have round='plus'.)r   r   Úyu   É’õ   Éµu   Ê�u   ÊŠrf   ÚpluszIPA rounded vowel rh   Nri   )r2   ÚroundedrS   s      r"   Útest_rounded_vowelsz%TestFeatureMatrix.test_rounded_vowels’   so   € â9ˆØò 	]ˆAØ”E×(Ñ(Ò(ä×(Ñ(¨Ñ+¨GÑ4¸Ó>ð]à'¨ u¨K¼×8LÑ8LÈQÑ8OÐPWÑ8XÐ7[Ð\ó]Ø>ñ	]r$   c                 ó´   — ddg}|D ]O  }|t         j                  v sŒt         j                  |   d   dk(  rŒ0J d|›dt         j                  |   d   ›�«       ‚ y)z4Close-mid vowels should have high='mid', not 'high'.re   rn   ÚhighÚmidzClose-mid vowel z
 has high=Nri   )r2   Ú	close_midrS   s      r"   Útest_close_mid_vowelsz'TestFeatureMatrix.test_close_mid_vowelsœ   sr   € à˜4�Lˆ	Øò 	YˆAØ”E×(Ñ(Ò(ä×(Ñ(¨Ñ+¨FÑ3°uÓ<ðYà% a U¨*´U×5IÑ5IÈ!Ñ5LÈVÑ5TÐ4WÐXóYØ<ñ	Yr$   N)r@   rA   rB   Ú__doc__rM   rT   rX   rZ   r]   ra   rc   rk   rq   rv   r+   r$   r"   rD   rD   \   s?   „ ÙDò>òYò
Nò
Jò
Wò
4òMò_ò]óYr$   rD   c                   óB   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚTestScoringFunctionsc                 ó¦   — t        j                  dd«      dk(  sJ ‚t        j                  dd«      dk(  sJ ‚t        j                  dd«      dk(  sJ ‚y)z+Identical consonants should have delta = 0.r   r(   r   r   Nr)   r7   s    r"   Útest_delta_identical_consonantsz4TestScoringFunctions.test_delta_identical_consonants§   sM   € ä�{‰{˜3 Ó$¨Ò+Ð+Ð+Ü�{‰{˜3 Ó$¨Ò+Ð+Ð+Ü�{‰{˜3 Ó$¨Ò+Ð+Ñ+r$   c                 óp   — t        j                  dd«      dk(  sJ ‚t        j                  dd«      dk(  sJ ‚y)z'Identical vowels should have delta = 0.r   r(   r	   Nr)   r7   s    r"   Útest_delta_identical_vowelsz0TestScoringFunctions.test_delta_identical_vowels­   s4   € ä�{‰{˜3 Ó$¨Ò+Ð+Ð+Ü�{‰{˜3 Ó$¨Ò+Ð+Ñ+r$   c                 ój   — t        j                  dd«      }t        j                  dd«      }||k  sJ ‚y)z8Similar consonants (same place) should have small delta.r   Úbr\   Nr)   )r2   Úd_pbÚd_pks      r"   Útest_delta_similar_consonantsz2TestScoringFunctions.test_delta_similar_consonants²   s0   € ô �{‰{˜3 Ó$ˆä�{‰{˜3 Ó$ˆØ�dŠ{Ð‰{r$   c                 ó  — t        j                  dd«      t        j                  dd«      k(  sJ ‚t        j                  dd«      t        j                  dd«      k(  sJ ‚t        j                  dd«      t        j                  dd«      k(  sJ ‚y)z4Delta should be symmetric: delta(a,b) == delta(b,a).r   r   r   r   r   u   ÊƒNr)   r7   s    r"   Útest_delta_symmetricz)TestScoringFunctions.test_delta_symmetricº   sn   € ä�{‰{˜3 Ó$¬¯©°C¸Ó(=Ò=Ð=Ð=Ü�{‰{˜3 Ó$¬¯©°C¸Ó(=Ò=Ð=Ð=Ü�{‰{˜3 Ó%¬¯©°T¸3Ó)?Ò?Ð?Ñ?r$   c                 ól   — t        j                  d«      dk  sJ ‚t        j                  d«      dk  sJ ‚y)z4sigma_skip should return a negative value (penalty).r   r   r   N)r   Ú
sigma_skipr7   s    r"   Útest_sigma_skip_negativez-TestScoringFunctions.test_sigma_skip_negativeÀ   s4   € ä×Ñ Ó$ qÒ(Ð(Ð(Ü×Ñ Ó$ qÒ(Ð(Ñ(r$   c                 ój   — t        j                  dd«      }t        j                  dd«      }||kD  sJ ‚y)z6Substituting identical segments should give max score.r   r   N)r   Ú	sigma_sub)r2   Úscore_identicalÚscore_differents      r"   Útest_sigma_sub_identicalz-TestScoringFunctions.test_sigma_sub_identicalÅ   s0   € äŸ/™/¨#¨sÓ3ˆÜŸ/™/¨#¨sÓ3ˆØ Ò0Ð0Ñ0r$   c                 ó`   — t        j                  dd«      }t        |t        t        f«      sJ ‚y)z6sigma_exp should return a numeric value without error.r   )r   r   N)r   Ú	sigma_expÚ
isinstanceÚintÚfloatr1   s     r"   Útest_sigma_exp_returns_valuez1TestScoringFunctions.test_sigma_exp_returns_valueË   s&   € ä—‘  jÓ1ˆÜ˜&¤3¬ ,Ô/Ð/Ñ/r$   c                 óf   — t        j                  d«      }t        j                  d«      }||k\  sJ ‚y)z1V() for a vowel should be >= V() for a consonant.r   r   N)r   ÚV)r2   Úv_vowelÚv_consonants      r"   Útest_V_vowel_gt_consonantz.TestScoringFunctions.test_V_vowel_gt_consonantÐ   s,   € ô —'‘'˜#“,ˆÜ—g‘g˜c“lˆØ˜+Ò%Ð%Ñ%r$   c                 óä   — t        j                  dd«      }t        j                  dd«      }t        |t        «      sJ ‚t        |t        «      sJ ‚t	        |«      dkD  sJ ‚t	        |«      dkD  sJ ‚y)z9R() should return relevant features for the segment pair.r   r   r   r
   r   N)r   ÚRr�   ÚlistÚlen)r2   Úr_consonantsÚr_vowelss      r"   Útest_R_returns_listz(TestScoringFunctions.test_R_returns_list×   si   € ô —w‘w˜s CÓ(ˆÜ—7‘7˜3 Ó$ˆÜ˜,¬Ô-Ð-Ð-Ü˜(¤DÔ)Ð)Ð)Ü�<Ó  1Ò$Ð$Ð$Ü�8‹}˜qÒ Ð Ñ r$   N)r@   rA   rB   r{   r}   r‚   r„   r‡   rŒ   r’   r—   rž   r+   r$   r"   ry   ry   ¦   s0   „ ò,ò,ò
ò@ò)ò
1ò0ò
&ó!r$   ry   c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestAlignmentPropertiesc                 óv   — t        j                  dd«      }t        |«      dkD  sJ ‚t        |d   «      dkD  sJ ‚y)z?Alignment of non-empty strings should produce non-empty result.r0   Úkatr   N)r   r   r›   r1   s     r"   Útest_alignment_not_emptyz0TestAlignmentProperties.test_alignment_not_emptyã   s8   € ä—‘˜U EÓ*ˆÜ�6‹{˜QŠÐˆÜ�6˜!‘9‹~ Ò!Ð!Ñ!r$   c                 ó®   — t        j                  dd«      }t        |t        «      sJ ‚t        |d   t        «      sJ ‚t        |d   d   t        «      sJ ‚y)z0align() should return a list of alignment lists.ÚpaÚtar   N)r   r   r�   rš   Útupler1   s     r"   Ú$test_alignment_returns_list_of_listsz<TestAlignmentProperties.test_alignment_returns_list_of_listsé   sN   € ä—‘˜T 4Ó(ˆÜ˜&¤$Ô'Ð'Ð'Ü˜& ™)¤TÔ*Ð*Ð*Ü˜& ™) A™,¬Ô.Ð.Ñ.r$   N)r@   rA   rB   r£   r¨   r+   r$   r"   r    r    â   s   „ ò"ó/r$   r    N)	rw   Únltk.metricsr   r#   r,   r.   rD   ry   r    r+   r$   r"   ú<module>rª      sI   ðñõ ò!òH(÷ (ñ  (÷PGYñ GY÷T9!ñ 9!÷x/ò /r$   