Ë
    ²²jdt  ã                   óä   — d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ ddiZ	de
defd	„Zd
„ Zdefd„Z	 	 	 	 d!de
de
dedededede
de
de
defd„ZdZdZde
fd„Z	 	 	 	 	 d"dededededede
fd „Zy)#é    N)Údefaultdict)ÚSequenceMatcher)Úbatch_error_rateÚhiÚhindiÚmanifestÚlanguage_namec           	      ó  — ddl m} dx}x}}d}| D ]È  }|j                  d«      }|€„|d   }	t        |	t        «      r5|	j                  «       j                  d«      r	 t        j                  |	«      }	t        |	t        «      r|	}n't	        |	«      j                  «       D �
cg c]  }
|
g‘Œ }}
 ||d   ||¬«      \  }}}}\  }}}}}}||z  }||z  }||z  }||z  }ŒÊ |r||z   |z   |z  nd}||||fS # t        j                  $ r Y Œ•w xY wc c}
w )	u¢  Score a manifest with voi_oiwer (lattice-based, orthography-aware WER).

    Each manifest entry must have "pred_text" and a reference in one of:
      - "reference_lists": the lattice â€” list of slots, each a list of
        accepted variants (a variant may span multiple words);
      - "text" as a JSON-encoded lattice (list of lists of str);
      - "text" as a plain string, converted to a trivial single-variant
        lattice (one slot per word).

    voi_oiwer applies its own indicnlp-based normalization internally, so no
    external normalizer should be applied beforehand.

    Returns (err_rate, total_ins, total_del, total_sub) with err_rate in [0, 1].
    r   )ÚoiwerÚreference_listsÚtextz[[Ú	pred_text)Ú
hypothesisr   Úinput_languageg        )Ú	voi_oiwerr   ÚgetÚ
isinstanceÚstrÚlstripÚ
startswithÚjsonÚloadsÚJSONDecodeErrorÚlistÚsplit)r   r	   r   Ú	total_insÚ	total_delÚ	total_subÚtotal_ref_wordsÚdatumr   r   ÚwordÚ_scoreÚ_hÚ_rÚ_opsÚinsÚdeleÚsubÚ	ref_wordsÚ_metaÚ_stdÚerr_rates                         ú/app/normalizer/eval_utils.pyÚscore_oiwerr.      sQ  € õ  à()Ð)€IÐ)�	˜IØ€OØò %ˆØŸ)™)Ð$5Ó6ˆØÐ"Ø˜‘=ˆDÜ˜$¤Ô$¨¯©«×)AÑ)AÀ$Ô)GðÜŸ:™: dÓ+�Dô ˜$¤Ô%Ø"&‘ô 7:¸$³i·o±oÓ6GÖ"H¨d D¢6Ð"H�Ð"HáINØ˜[Ñ)Ø+Ø(ôJ
ÑFˆ��B˜Ñ.˜s D¨#°	¸5À$ð
 	�SÑˆ	Ø�TÑˆ	Ø�SÑˆ	Ø˜9Ñ$‰ð/%ñ2 IX�	˜IÑ%¨	Ñ1°_ÒDÐ]`€HØ�Y 	¨9Ð4Ð4øô' ×+Ñ+ò Ùðüò #Is   ÁC1Â
D
Ã1DÄDc                 ó¢  — g g }}t        | |«      D �]8  \  }}|j                  «       }|j                  «       }t        d||«      }g g }
}	|j                  «       D ]®  \  }}}}}|dk(  r)|	j	                  ||| «       |
j	                  ||| «       Œ7dj                  ||| «      }dj                  ||| «      }||k(  r#|	j                  |«       |
j                  |«       Œ‡|	j	                  ||| «       |
j	                  ||| «       Œ° |j                  dj                  |	«      «       |j                  dj                  |
«      «       �Œ; ||fS )z²Align compound word boundaries between ref/pred pairs.

    When a mismatch region has identical characters ignoring whitespace,
    normalize both sides to the joined form.
    NÚequalÚ ú )Úzipr   r   Úget_opcodesÚextendÚjoinÚappend)ÚrefsÚpredsÚnew_refsÚ	new_predsÚref_textr   r)   Ú
pred_wordsÚsmÚnew_rwÚnew_pwÚtagÚi1Úi2Új1Új2ÚrcÚpcs                     r-   Únormalize_compound_pairsrH   A   sO  € ð ˜bˆi€HÜ" 4¨Ó/ó +Ñˆ�)Ø—N‘NÓ$ˆ	Ø—_‘_Ó&ˆ
ä˜T 9¨jÓ9ˆØ˜R�ˆà#%§>¡>Ó#3ò 	5ÑˆC��R˜˜RØ�gŠ~Ø—‘˜i¨¨2Ð.Ô/Ø—‘˜j¨¨BÐ/Õ0à—W‘W˜Y r¨"Ð-Ó.�Ø—W‘W˜Z¨¨2Ð.Ó/�Ø˜’8Ø—M‘M "Ô%Ø—M‘M "Õ%à—M‘M )¨B¨rÐ"2Ô3Ø—M‘M *¨R°Ð"3Õ4ð	5ð 	�‰˜Ÿ™ Ó(Ô)Ø×Ñ˜Ÿ™ &Ó)Ö*ð-+ð. �YÐÐó    Úmanifest_pathc                 óÌ   — g }t        | dd¬«      5 }|D ]7  }t        |«      dkD  sŒt        j                  |«      }|j	                  |«       Œ9 	 ddd«       |S # 1 sw Y   |S xY w)ze
    Reads a manifest file (jsonl format) and returns a list of dictionaries containing samples.
    Úrúutf-8©Úencodingr   N)ÚopenÚlenr   r   r7   )rJ   ÚdataÚfÚliner    s        r-   Úread_manifestrU   b   si   € ð €DÜ	ˆm˜S¨7Ô	3ð #°qØò 	#ˆDÜ�4‹y˜1‹}ÜŸ
™
 4Ó(�Ø—‘˜EÕ"ñ	#÷#ð
 €K÷#ð
 €Kús   ‘A¦(AÁA#Ú
referencesÚtranscriptionsÚmodel_idÚdataset_pathÚdataset_namer   Úaudio_lengthÚtranscription_timeÚaudio_filepathsÚextra_fieldsc
                 ó¦  — |j                  dd«      }|j                  dd«      }|j                  dd«      }t        | «      t        |«      k7  r$t        dt        | «      › dt        |«      › d�«      ‚|�;t        |«      t        | «      k7  r$t        dt        |«      › dt        | «      › d�«      ‚|�;t        |«      t        | «      k7  r$t        d	t        |«      › dt        | «      › d�«      ‚|�;t        |«      t        | «      k7  r$t        d
t        |«      › dt        | «      › d�«      ‚|	xs i }	|	j                  «       D ]C  \  }
}t        |«      t        | «      k7  sŒt        d|
› dt        |«      › dt        | «      › d�«      ‚ |�|nt        | «      dgz  }|�|nt        | «      dgz  }|�|nt        | «      dgz  }d}t        j
                  j                  |«      st	        j                  |«       t        j
                  j                  |d|› d|› d|› d|› d�	«      }t        |dd¬«      5 }t        t        | ||||«      «      D ]j  \  }\  }}}}}|r|nd|› �||||dœ|	j                  «       D ��ci c]  \  }}|||   “Œ c}}¥}|j                  t        j                  |d¬«      › d�«       Œl 	 ddd«       |S c c}}w # 1 sw Y   |S xY w)aì  
    Writes a manifest file (jsonl format) and returns the path to the file.

    Args:
        references: Ground truth reference texts.
        transcriptions: Model predicted transcriptions.
        model_id: String identifier for the model.
        dataset_path: Path to the dataset.
        dataset_name: Name of the dataset.
        split: Dataset split name.
        audio_length: Length of each audio sample in seconds.
        transcription_time: Transcription time of each sample in seconds.
        audio_filepaths: List of file paths for each audio sample.
        extra_fields: Optional mapping of column name to a per-sample list, written
            alongside the standard fields.
    Returns:
        Path to the manifest file.
    ú/ú-z'The number of samples in `references` (z) must match `transcriptions` (z).Nz)The number of samples in `audio_length` (z) must match `references` (z/The number of samples in `transcription_time` (z,The number of samples in `audio_filepaths` (zThe number of samples in `z` (z
./results/ÚMODEL_Ú	_DATASET_Ú_ú.jsonlÚwrM   rN   Úsample_©Úaudio_filepathÚdurationÚtimer   r   F)Úensure_asciiú
)ÚreplacerQ   Ú
ValueErrorÚitemsÚosÚpathÚexistsÚmakedirsr6   rP   Ú	enumerater3   Úwriter   Údumps)rV   rW   rX   rY   rZ   r   r[   r\   r]   r^   Ú
field_nameÚvaluesÚbasedirrJ   rS   Úidxr   Ú
transcriptri   Únamer    s                        r-   Úwrite_manifestr~   o   sj  € ð< ×Ñ  SÓ)€HØ×'Ñ'¨¨SÓ1€LØ×'Ñ'¨¨SÓ1€Lä
ˆ:ƒœ#˜nÓ-Ò-ÜØ5´c¸*³oÐ5Fð G,Ü,/°Ó,?Ð+@ÀðDó
ð 	
ð
 Ð¤C¨Ó$5¼¸Z»Ò$HÜØ7¼¸LÓ8IÐ7Jð K(Ü(+¨J«Ð'8¸ð<ó
ð 	
ð Ð%¬#Ð.@Ó*AÄSÈÃ_Ò*TÜØ=¼cÐBTÓ>UÐ=Vð W(Ü(+¨J«Ð'8¸ð<ó
ð 	
ð Ð"¤s¨?Ó';¼sÀ:»Ò'NÜØ:¼3¸Ó;OÐ:Pð Q(Ü(+¨J«Ð'8¸ð<ó
ð 	
ð  Ò% 2€LØ*×0Ñ0Ó2ò Ñˆ
�FÜˆv‹;œ#˜j›/Ó)ÜØ,¨Z¨L¸¼CÀ»K¸=ð I,Ü,/°
«OÐ+<¸Bð@óð ðð %Ð0‰´c¸*³oÈÈÑ6Nð ð
 Ð)ñ 	ä�‹_ ˜vÑ%ð ð +Ð6‰¼CÀ
»OÈtÈfÑ<Tð ð €GÜ�7‰7�>‰>˜'Ô"Ü
�‰�GÔä—G‘G—L‘LØ�6˜(˜ 9¨\¨N¸!¸L¸>ÈÈ5È'ÐQWÐXó€Mô 
ˆm˜S¨7Ô	3ð B°qô ÜØØØØ"Øóó
ò	Bñ 
ˆCñ 
ØØØØØñ 5C¡.È'ÐRUÐQVÈØ(Ø*ØØ'ñð :F×9KÑ9KÓ9M×N©¨¨v�4˜ ™Ñ$ÓNðˆEð �G‰G”t—z‘z %°eÔ<Ð=¸RÐ@ÕAñ/	B÷Bð2 Ðùó O÷-Bð2 Ðús   È/AKÉ5K Ê0KË KËKÚ	parent_idÚchunk_indexc                 óH  ‡	— | rt         | d   vr| S t        t        «      }| D ]  }||t               j                  |«       Œ d„ }g }t	        |«      D ]¾  }t	        ||   d„ ¬«      }|D �cg c]  }|t
           ‘Œ }}|t        t        t        |«      «      «      k7  rt        d|› d|› d�«       |j                  | ||D �cg c]  }|d   ‘Œ	 c}«       ||D �cg c]  }|d	   ‘Œ	 c}«      |d   d
   dj                  ˆ	fd„|D «       «      dœ«       ŒÀ |S c c}w c c}w c c}w )ac  Collapse per-chunk result rows into one row per parent session.

    Chunks are non-overlapping and cover the session in order, so predictions are
    concatenated by `chunk_index` and scored against the session reference.
    Durations and times are summed, leaving RTFx unaffected.

    Manifests without a `parent_id` field are returned unchanged.
    r   c                 ó@   — t        d„ | D «       «      rt        | «      S d S )Nc              3   ó$   K  — | ]  }|d u–— Œ
 y ­w©N© )Ú.0Úvs     r-   ú	<genexpr>z?merge_chunked_manifest.<locals>._sum_or_none.<locals>.<genexpr>ó   s   è ø€ Ò!@°A !¨4¤-Ñ!@ùs   ‚)ÚallÚsum)ry   s    r-   Ú_sum_or_nonez,merge_chunked_manifest.<locals>._sum_or_noneò   s   € Ü!Ñ!@¸Ô!@Ô@Œs�6‹{ÐJÀdÐJrI   c                 ó   — | t            S r„   )ÚCHUNK_INDEX_KEY)Úds    r-   ú<lambda>z(merge_chunked_manifest.<locals>.<lambda>÷   s   € ¸1¼_Ñ;M€ rI   )Úkeyz#WARNING: chunk indices for session z are not contiguous from 0 (zE); some chunks may be missing, which will inflate the deletion count.rj   rk   r   r2   c              3   óT   •K  — | ]  }|d    xs dj                  «       xŠr‰–— Œ! y­w)r   r1   N)Ústrip)r†   ÚchunkÚpreds     €r-   rˆ   z)merge_chunked_manifest.<locals>.<genexpr>  s7   øè ø€ ò &àØ!& {Ñ!3Ò!9°r× @Ñ @Ó BÐB˜ÐBô ñ&ùs   ƒ%(rh   )
ÚCHUNK_PARENT_KEYr   r   r7   Úsortedr�   ÚrangerQ   Úprintr6   )
r   Úsessionsr    r‹   Úmergedr   Úchunksr“   Úindicesr”   s
            @r-   Úmerge_chunked_manifestr�   â   sO  ø€ ñ Ô'¨x¸©{Ñ:Øˆäœ4Ó €HØò 8ˆØ�Ô'Ñ(Ñ)×0Ñ0°Õ7ð8òKð €FÜ˜HÓ%ò 
ˆ	Ü˜ Ñ+Ñ1MÔNˆà7=Ö>¨e�5œÓ)Ð>ˆÐ>Ø”dœ5¤ W£Ó.Ó/Ò/ÜØ5°i°[ð A&Ø&- Yð /9ð9ôð 	�‰à"+Ù(ÈÖ)PÀ¨%°
Ó*;Ò)PÓQÙ$ÀÖ%H¸ e¨F£mÒ%HÓIØ˜q™	 &Ñ)Ø ŸX™Xó &à!'ô&ó ñ
õ	
ð
ð0 €Mùò+ ?ùò *QùÚ%Hs   Á*DÃ DÃDÚ	directoryÚmultilingualÚcsv_onlyÚlanguageÚfamiliesc                 ó  ‡‡‡5‡6‡7‡8‡9‡:‡;‡<‡=— | j                  t        j                  «      r| dd } t        t	        j                  | › d�d¬«      «      }t        t        |«      «      }|Š;|�B|dk7  r=t        d|«       |j                  dd	«      }|D �cg c]  }d|› d�|v sd
|› d�|v r|‘Œ }}t        |«      dk(  rt        d| › �«      ‚dt        fd„Š<dddddddddddœfddddddddœfd d!d"d#d$ifd%d&d'd(d)ifd*dd+d,d-d-d.d/d0d1d2d3d4œ	fd5d6d7d8d9d:d;d<œfg}d=d>gg d?¢g d?¢g d?¢d=d@gg d?¢dAgdBœ}	dCdDdEdAdFœŠ5|	j                  «       D ]\  \  }
}|D �ci c]  }|› dG|
› dH�‰5|   › dI�df“Œ }}dJdKj                  ˆ5fdL„|D «       «      z   }|j                  dM|
› �dG|
› dH�||f«       Œ^ |�Šg }|D ]?  \  }}}}||v sŒ|�|j                  |«       Œ!|j                  |j                  «       «       ŒA |D �‡cg c]  Št!        ˆˆ<fdN„|D «       «      r‰‘Œ }}t        |«      dk(  rt        d| › dO|› �«      ‚ddPlmŠ8 i Š=|D �]®  }t'        t)        |«      «      } ‰<|«      \  }}|D �cg c]  }|dQ   ‘Œ	 }}|D �cg c]  }|dR   ‘Œ	 }}t+        |«      xr t+        |«      }‰t,        v rt/        |t,        ‰   «      \  }}}}nÇ‰dSk(  r‰8j"                  }nˆ8ˆfdT„}|D �cg c]  } ||dU   «      ‘Œ } }|D �cg c]  } ||dV   «      ‘Œ }!}|rt1        | |!«      \  } }!| D �"cg c]  }"t3        |"j5                  «       «      ‘Œ }#}"|!D �$cg c]  }$t3        |$j5                  «       «      ‘Œ }%}$t7        |#|%d¬W«      }"|"dX   |"dY   |"dZ   }}}|"d[   }|||d\œ}&t9        d]|z  d^«      }|r8t;        |«      }'t;        |«      }(t9        t;        |«      t;        |«      z  d_«      })ndx}'x}(})|› d`|› �}*||'|(|)daœ|&¥‰=|*<   �Œ± |sat        db«       t        dc«       t        db«       ‰=j                  «       D ]-  \  }+},|+› dd|,de   df›dg�}-|,dh   �|-di|,dh   df›�z  }-t        |-«       Œ/ t=        t>        «      Š7t=        t>        «      }.t=        t>        «      }/t=        t@        «      }0‰=j                  «       D ]t  \  }+},|+j5                  dj«      d   jC                  «       }1‰7|1xx   |,de   z  cc<   |,dh   �!|.|1xx   |,dk   z  cc<   |/|1xx   |,dl   z  cc<   n
dx|.|1<   |/|1<   |0|1xx   dmz  cc<   Œv |s‘t        «        t        db«       t        dn«       t        db«       ‰7j                  «       D ]  \  }+},|,|0|+   z  }t        |+› dd|df›dg�«       Œ! |.D ]$  }+|.|+   €Œ	|.|+   |/|+   z  })t        |+› do|)df›�«       Œ& t        db«       dpj                  ‰=j                  «       «      Š6dvˆ=fdq„	Š9ˆ9fdr„Š:	 dwˆ7ˆ9ˆ:ˆ;ˆ=fds„	}2|D ]u  \  }}}}|�||vrŒ|jE                  dM«      r|t        dM«      d }3n|jG                  «       }3|€%t!        ˆ6fdt„|D «       «      }4|4sŒX |2||||3d¬u«       Œf|‰6v sŒk |2||||3«       Œw ‰7‰=fS c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}"w c c}$w )xa  
    Scores all result files in a directory and returns a composite score over all evaluated datasets.

    Args:
        directory: Path to the result directory, containing one or more jsonl files.
        model_id: Optional, model name to filter out result files based on model name.
        multilingual: If True, apply compound word boundary normalization before
                      WER computation. Should only be enabled for non-English benchmarks.
        csv_only: If True, suppress all output except the CSV summary block.
        language: Language code used for normalization (e.g. 'en', 'de', 'fr').
                  When not 'en', ml_normalizer is used instead of the English normalizer.
                  Languages in OIWER_LANGUAGES (e.g. 'hi') are scored with
                  voi_oiwer over a reference lattice instead of plain WER.
        families: Optional list of family keys ("appen", "dataocean", "voicearena_private",
                  "voicearena_private_hi", "public", "extra", "ml_de", "ml_fr", "ml_it", "ml_es",
                  "ml_pt", "ml_nl") restricting which CSV summary blocks are printed.
                  None prints all detected families.

    Returns:
        Composite score over all evaluated datasets and a dictionary of all results.
    Néÿÿÿÿz/**/*.jsonlT)Ú	recursiver1   zFiltering models by id:r`   ra   rb   rc   r   zNo result files found in Úfpc                 ó0  — | j                  d«      }| |d  } | j                  d«      }| d | j                  dd«      j                  d«      }|j                  d«      }|d | dz   ||dz   d  z   }| |d  }|j                  dd«      j                  d«      }||fS )	Nrb   ÚDATASET_r1   rd   ra   r`   é   re   )Úfindrn   ÚrstripÚremovesuffix)r¦   Úmodel_indexÚds_indexrX   Úauthor_indexÚds_fpÚ
dataset_ids          r-   Úparse_filepathz%score_results.<locals>.parse_filepathG  s¯   € Ø—g‘g˜hÓ'ˆØ��ÐˆØ—7‘7˜:Ó&ˆØ�i�x�=×(Ñ(¨°2Ó6×=Ñ=¸cÓBˆØ—}‘} SÓ)ˆØ˜M˜\Ð*¨SÑ0°8¸LÈ1Ñ<LÐ<NÐ3OÑOˆà�8�9�ˆØ—]‘] :¨rÓ2×?Ñ?ÀÓIˆ
Ø˜Ð#Ð#rI   ÚappenzŸmodel,Avg Appen WER,Avg Scripted,Avg Conversational,Scripted-US,Scripted-AU,Scripted-CA,Scripted-IN,Conversational-US003,Conversational-US004,Conversational-IN)zScripted-USÚscripted)zScripted-AUr´   )zScripted-CAr´   )zScripted-INr´   )zConversational-US003Úconversational)zConversational-US004rµ   )zConversational-INrµ   )Ú!appen_scripted_filtered__americanÚ#appen_scripted_filtered__australianÚ!appen_scripted_filtered__canadianÚappen_scripted_filtered__indianÚ5appen_conversational_segmented_filtered__american_003Ú5appen_conversational_segmented_filtered__american_004Ú/appen_conversational_segmented_filtered__indianÚ	dataoceanzsmodel,Avg DataOcean WER,Avg Scripted,Avg Conversational,Scripted-US,Scripted-GB,Conversational-US,Conversational-GB)zScripted-GBr´   )zConversational-USrµ   )zConversational-GBrµ   )Ú"dataocean_scripted_filtered__en_USÚ"dataocean_scripted_filtered__en_GBÚ2dataocean_conversational_segmented_filtered__en_USÚ2dataocean_conversational_segmented_filtered__en_GBÚvoicearena_privateÚ
HF_Englishzmodel,English Private WERÚHF_English_Private_Set__test)zEnglish Private WERNÚvoicearena_private_hiÚHF_Hindi_Private_Setzmodel,Hindi WERÚHF_Hindi_Private_Set__test)z	Hindi WERNÚpubliczÛmodel,RTFx,License,Size (B),# Languages,Encoder,Decoder,AMI-Cleaned WER,Earnings22-Cleaned-AA-chunked WER,Gigaspeech-Cleaned WER,LS Clean WER,LS Other WER,SPGISpeech WER,Voice-Arena-Moonsoon WER,Voxpopuli-Cleaned-AA WER)zAMI-Cleaned WERN)z!Earnings22-Cleaned-AA-chunked WERN)zGigaspeech-Cleaned WERN)zLS Clean WERN)zLS Other WERN)zSPGISpeech WERN)zVoice-Arena-Moonsoon WERN)zVoxpopuli-Cleaned-AA WERN)	Úami_cleaned_testz#Earnings22-Cleaned-AA-chunked__testÚ"earnings22_cleaned_aa_chunked_testÚgigaspeech_cleaned_testzlibrispeech_test.cleanzlibrispeech_test.otherÚspgispeech_testÚMonsoon_en_IN_test__testÚvoxpopuli_cleaned_aa_testÚextraÚ_cleanedz9model,AMI WER,Earnings22 WER,Gigaspeech WER,Voxpopuli WER)zAMI WERN)zEarnings22 WERN)zGigaspeech WERN)zVoxpopuli WERN)Úami_testÚearnings22_testÚgigaspeech_testÚvoxpopuli_testÚfleursÚmcv)rÕ   rÖ   Úmlsr×   ÚMonsoon)ÚdeÚfrÚitÚesÚptÚnlr   ÚFLEURSÚMCVÚMLS)rÕ   rÖ   r×   rØ   rd   Ú_testú WERzmodel,RTFx,ú,c              3   ó.   •K  — | ]  }‰|   › d �–— Œ y­w)rã   Nr…   )r†   ÚdatasetÚML_DATASET_LABELSs     €r-   rˆ   z score_results.<locals>.<genexpr>Ë  s$   øè ø€ ò *
Ø4;Ð  Ñ)Ð*¨$Ô/ñ*
ùs   ƒÚml_c              3   ó8   •K  — | ]  }| ‰‰«      d    v –— Œ y­w)r©   Nr…   )r†   Úsubstrr¦   r²   s     €€r-   rˆ   z score_results.<locals>.<genexpr>à  s    øè ø€ ÒQ°v�6™^¨BÓ/°Ñ2Ô2ÑQùs   ƒz matching families )Ú
data_utilsrk   rj   Úenc                 ó*   •— ‰j                  | ‰¬«      S )N)Úlang)Úml_normalizer)Útrë   r¡   s    €€r-   r�   zscore_results.<locals>.<lambda>þ  s   ø€  j×&>Ñ&>¸qÀxÐ&>Ó&P€ rI   r   r   )Úmerge_compoundsr&   Údelr(   r,   )r&   rò   r(   éd   é   é   z | )Úwerr[   Úinference_timeÚrtfxúP********************************************************************************zResults per dataset:z: WER = rö   z0.2fz %rø   z	, RTFx = ú|r[   r÷   r©   zComposite Results:z	: RTFx = r2   c                 ó¸   •— |j                  «       D ]F  \  }\  }}||k(  sŒ‰	j                  «       D ]%  \  }}| j                  «       |v sŒ||v sŒ||   c c S  ŒH y r„   )rp   r«   )
Ú	model_keyÚ	col_labelÚcol_mapÚmetricÚ	ds_substrÚlabelÚ_groupÚ
result_keyÚ
result_valÚresultss
            €r-   Úfind_metric_inz%score_results.<locals>.find_metric_inN  sk   ø€ Ø*1¯-©-«/ò 	2Ñ&ˆI‘˜˜vØ˜	Ó!Ø.5¯m©m«oò 2Ñ*�J 
Ø ×'Ñ'Ó)¨ZÒ7¸IÈÒ<SØ)¨&Ñ1Ô1ñ2ð	2ð
 rI   c                 ó   •—  ‰| ||d«      S )Nrö   r…   )rü   rý   rþ   r  s      €r-   Úfind_wer_inz"score_results.<locals>.find_wer_inV  s   ø€ Ù˜i¨°G¸UÓCÐCrI   c                 ó~  •‡"— |j                  «       D ��cg c]  \  }}|‘Œ	 }}}t        «       }|D �	cg c]  }	|	|v rŒ|j                  |	«      rŒ|	‘Œ }}	t        | j	                  d«      «      dz
  t        |«      z
  }
g }|r6|D �	cg c]  }	|	j                  dd«      ‘Œ }}	| dz   dj                  |«      z   } |rd|› d�nd}t        «        t        d«       t        |«       t        d«       t        ‰#«      dk(  ry‰#D ]t  Š"|D �cg c]  } ‰%‰"||«      ‘Œ }}|D �cg c]  }|€Œ|‘Œ	 }}|sŒ/t        t        |«      t        |«      z  d	«      }‰&�‰&n‰"j                  «       }t        d
|› d|› �«       Œv t        | «       ‰#D �]m  Š"‰&�‰&n‰"}|D �ci c]  }| ‰%‰"||«      “Œ }}|D �cg c]  }||   �t        ||   «      nd‘Œ }}|r8|D �cg c]  } ‰$‰"||d«      ‘Œ }}||D �cg c]  }|�t        |«      nd‘Œ c}z  }t        d„ |j                  «       D «       «      }|�r8|j                  «       D ���cg c]"  \  }\  }}|dk(  r|j                  |«      x}�|‘Œ$ }}}}|j                  «       D ���cg c]"  \  }\  }}|dk(  r|j                  |«      x}�|‘Œ$ }}}}|j                  «       D �cg c]  }|€Œ|‘Œ	 }}|r!t        t        |«      t        |«      z  d	«      nd}|r!t        t        |«      t        |«      z  d	«      nd}|r!t        t        |«      t        |«      z  d	«      nd}t        |› d|› d|› d|› d�dj                  |«      z   «       �ŒÙ|dk(  s|xs dj                  d«      rTt        ˆ"ˆ'fd„|D «       «      }t        ˆ"ˆ'fd„|D «       «      }|rt        ||z  d	«      nd} t        | «      gdg|
dz
  z  z   }!ndg|
z  }!t        dj                  |g|!z   |z   «      «       �Œp t        d«       y c c}}w c c}	w c c}	w c c}w c c}w c c}w c c}w c c}w c c}w c c}}}w c c}}}w c c}w )Nrä   r©   rã   z RTFxzCSV Summary (z):zCSV Summary:rù   rô   z	avg WER (z) = r1   rø   c              3   ó*   K  — | ]  \  }}|d u–— Œ y ­wr„   r…   )r†   Ú_lblÚgrps      r-   rˆ   z9score_results.<locals>.print_csv_block.<locals>.<genexpr>’  s   è ø€ ÒO±°°s˜S¨œ_ÑOùs   ‚r´   rµ   rÈ   rè   c              3   óx   •K  — | ]1  }‰D ]*  }‰j                  «       |v r||v r‰|   d    �
‰|   d    –— Œ, Œ3 y­w)r[   N©r«   ©r†   r   Úrkrü   r  s      €€r-   rˆ   z9score_results.<locals>.print_csv_block.<locals>.<genexpr>²  s^   øè ø€ ò 'à%Ø")ò'ð Ø$×+Ñ+Ó-°Ñ3Ø%¨™OØ# B™K¨Ñ7ÐCð   ™ NÕ3ð'Ø3ñ'ùó   ƒ7:c              3   óx   •K  — | ]1  }‰D ]*  }‰j                  «       |v r||v r‰|   d    �
‰|   d    –— Œ, Œ3 y­w)r÷   Nr  r  s      €€r-   rˆ   z9score_results.<locals>.print_csv_block.<locals>.<genexpr>º  s`   øè ø€ ò &à%Ø")ò&ð Ø$×+Ñ+Ó-°Ñ3Ø%¨™OØ# B™KÐ(8Ñ9ÐEð   ™Ð$4Õ5ð&Ø5ñ&ùr  )ry   ÚsetÚaddrQ   r   rn   r6   r˜   ÚroundrŠ   r’   r   Úanyrp   r   r   )(Úheaderrþ   Ú
family_keyÚfamily_nameÚper_dataset_rtfxÚlblÚ_grpÚcsv_columnsÚseenÚcÚn_prefixÚrtfx_columnsÚtitleÚcolÚwer_valsr‡   Úavgr  Úcsv_model_labelÚwer_colsÚ	rtfx_valsÚ
is_privateÚ_dsr  Úscripted_wersÚconversational_wersÚall_wersÚavg_overallÚavg_scriptedÚavg_convÚfamily_audioÚfamily_timeÚrtfx_valÚprefix_colsrü   Úcomposite_werr  r  Úoriginal_model_idr  s(                                     @€€€€€r-   Úprint_csv_blockz&score_results.<locals>.print_csv_blockY  s×  ù€ ð -4¯N©NÓ,<×=™y˜s D’sÐ=ˆÑ=ä‹uˆØ"-ÖP˜Q°a¸4²iÀ4Ç8Á8ÈAÅ;’qÐPˆÐPô �v—|‘| CÓ(Ó)¨AÑ-´°KÓ0@Ñ@ˆØˆÙð ALÖL¸1˜AŸI™I f¨gÕ6ÐLˆLÐLØ˜c‘\ C§H¡H¨\Ó$:Ñ:ˆFá3>�- ˜}¨BÑ/ÀNˆÜŒÜˆhŒÜˆeŒÜˆhŒäˆ}Ó Ò"Ø*ò 
8�	ØLWÖXÀS™K¨	°3¸Õ@ÐX�ÐXØ'/ÖA !°1±=šAÐA�ÐAÚÜ¤ H£´°H³Ñ =¸qÓA�Cð -Ð8ñ *à&Ÿ_™_Ó.ð ô
 ˜I e W¨D°°Ð6Õ7ð
8ô 	ˆfŒà&ó H	LˆIà%6Ð%BÑ!È	ð ð FQöØ>A�‘[ ¨C°Ó9Ñ9ðˆHð ð
 'öàð '/¨s¡mÐ&?”�H˜S‘MÔ"ÀRÑGðˆHð ñ ð  +öàñ # 9¨c°7¸FÕCð�	ð ð ÀiÖPÀ q }œS œV¸"Ñ<ÒPÑP�äÑO¸g¿n¹nÓ>NÔOÓOˆJÚð ,3¯=©=«?÷!ð !á'˜™Z˜c 3Ø˜jÒ(°8·<±<ÀÓ3DÐ.D¨aÐ-Qò ð!�ò !ð ,3¯=©=«?÷'ð 'á'˜™Z˜c 3ØÐ.Ò.¸¿¹ÀcÓ9JÐ4J°AÐ3Wò ð'Ð#ò 'ð
 (0§¡Ó'8ÖJ !¸A¹MšAÐJ�ÐJá?G”Eœ#˜h›-¬#¨h«-Ñ7¸Ô;ÈRð ñ
 %ô œ#˜mÓ,¬s°=Ó/AÑAÀ1ÔEàð ñ +ô œ#Ð1Ó2´SÐ9LÓ5MÑMÈqÔQàð ô
 Ø&Ð' q¨¨°Q°|°nÀAÀhÀZÈqÐQØ—h‘h˜xÓ(ñ)öð
  Ò)¨jÒ.>¸B×-JÑ-JÈ5Ô-QÜ#&ô 'à)0ô'ó $�Lô #&ô &à)0ô&ó #�Kñ ALœ˜l¨[Ñ8¸!Ô<ÐQSð ô $' x£= /°R°D¸HÀq¹LÑ4IÑ"I‘Kà#% $¨¡/�KÜ�c—h‘h Ð0°;Ñ>ÀÑIÓJÖKðQH	LôT 	ˆh�ùó] >ùò Qùò Mùò YùÚAùò ùòùò
ùò Qùô!ùô
'ùò
 Ks]   –O>³	P½PÁPÂP	ÄPÄPÄ#PÆPÆ'PÇP"Ç$P'È6'P,
É5'P3
Ê2P:Ê:P:c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr„   r…   )r†   r   Úall_dataset_idss     €r-   rˆ   z score_results.<locals>.<genexpr>Ø  s   øè ø€ ÒS¸i˜Y¨/Ô9ÑSùs   ƒ)r  )rö   )NNF)$Úendswithrq   Úpathsepr   Úglobr–   r˜   rn   rQ   ro   r   rp   r6   r7   r5   Úkeysr  Ú
normalizerrë   r�   rU   r‰   ÚOIWER_LANGUAGESr.   rH   Útupler   r   r  rŠ   r   ÚfloatÚintr’   r   Ú
capitalize)>rž   rX   rŸ   r    r¡   r¢   Úresult_filesr¦   ÚFAMILY_CONFIGSÚML_LANG_DATASETSrî   Údatasetsræ   rþ   r  Úallowed_substrsr  Úpresence_substrÚ_headerÚresult_filer   Úmodel_id_of_filer±   r    rk   rj   Úcompute_rtfxrö   r   r   r   Ú	normalizerV   ÚpredictionsrL   Ú
refs_splitÚpÚpreds_splitrÏ   r[   r÷   rø   r  Úkr‡   ÚmetricsÚcomposite_audio_lengthÚcomposite_inference_timeÚcount_entriesr�   r7  r  Ú
has_publicrç   r9  r5  rë   r  r  r6  r²   r  s>       `  `                                             @@@@@@@@@r-   Úscore_resultsrY    s–  ÿú€ ð> ×Ñœ"Ÿ*™*Ô%Ø˜c˜r�Nˆ	ô œŸ	™	 Y K¨{Ð";ÀtÔLÓM€LÜœ˜|Ó,Ó-€Lð !ÐØÐ ¨B¢ÜÐ'¨Ô2Ø×#Ñ# C¨Ó-ˆð #ö
àØ�8�*˜Aˆ "Ñ$¨&°°
¸)Ð(DÈÑ(Jò ð
ˆð 
ô ˆ<Ó˜AÒÜÐ4°Y°KÐ@ÓAÐAð
$œ3ó 
$ð" ØðJð 6QØ7RØ5PØ3NðJðJðDñð	
ð4 ØðJð 7RØ6QðGðGñð	
ð& !ØØ'à.Ð0Mðð		
ð $Ø"Øà,Ð.Aðð		
ð Øðrð %>ð8ð7ð ,LØ*@Ø*@Ø#;Ø,NØ-Oñ%ð	
ð6 ØØGà-Ø#;Ø#;Ø"9ñ	ð	
	
ðma€NðL ˜ÐÚ&Ú&Ú&Ø˜ÐÚ&àˆkñ	Ðð $,°EÀ%ÐT]Ñ^ÐØ*×0Ñ0Ó2ò P‰ˆˆhð $ö
àð ˆi�q˜˜˜eÐ$Ð*;¸GÑ*DÐ)EÀTÐ'JÈDÐ&QÑQð
ˆð 
ð  §¡ó *
Ø?Gô*
ó "
ñ 
ˆð 	×Ñ  T F˜|¨q°°°e¨_¸fÀgÐNÕOðPð ÐØˆØ=Kò 	;Ñ9ˆJ˜¨°'Ø˜XÒ%Ø"Ð.Ø#×*Ñ*¨?Õ;à#×*Ñ*¨7¯<©<«>Õ:ð	;ð #÷
àÜÔQÀÔQÔQò ð
ˆð 
ô
 ˆ|Ó Ò!ÜØ+¨I¨;Ð6IÈ(ÈÐTóð õ
 &à€Gà#ó 5
ˆÜ)¬-¸Ó*DÓEˆÙ'5°kÓ'BÑ$Ð˜*à+3Ö4 %��f“Ð4ˆÐ4Ø3;Ö<¨%�E˜*Ó%Ð<ˆÐ<Ü˜4“yÒ2¤S¨£]ˆà”Ñ&ô 4?Øœ/¨(Ñ3ó4Ñ0ˆC�˜I¡yð ˜4ÒØ&×1Ñ1‘	äP�	Ø@HÖI°u™) E¨&¡MÕ2ÐIˆJÐIØFNÖO¸U™9 U¨;Ñ%7Õ8ÐOˆKÐOáô +CÀ:È{Ó*[Ñ'�
˜Kð
 6@Ö@°œ5 §¡£Õ+Ð@ˆJÐ@Ø5@ÖA°œ5 §¡£Õ+ÐAˆKÐAÜ  ¨[È$ÔOˆAØ./°©h¸¸%¹À!ÀEÁ( )�yˆIØ�J‘-ˆCà!¨)¸IÑFˆÜ�C˜#‘I˜qÓ!ˆáÜ˜x›=ˆLÜ  ›YˆNÜœ˜X›¬¨T«Ñ2°AÓ6‰Dà37Ð7ˆLÐ7˜>¨Dà(Ð)¨¨Z¨LÐ9ˆ
àØ(Ø,Øñ	
ð
 ð
ˆ�
Óð_5
ñn ÜˆhŒÜÐ$Ô%ÜˆhŒà—M‘M“Oò 	‰DˆAˆqØ˜˜8 A e¡H¨T ?°"Ð5ˆGØ�‰yÐ$Ø˜Y q¨¡y°Ð&6Ð7Ñ7�Ü�'�Nð		ô  ¤Ó&€MÜ(¬Ó/ÐÜ*¬5Ó1ÐÜ¤Ó$€MØ—‘“ò  ‰ˆˆ1Ø�g‰g�c‹l˜1‰o×#Ñ#Ó%ˆØ�cÓ˜a ™hÑ&ÓØˆV‰9Ð Ø" 3Ó'¨1¨^Ñ+<Ñ<Ó'Ø$ SÓ)¨QÐ/?Ñ-@Ñ@Ô)àJNÐNÐ" 3Ñ'Ð*BÀ3Ñ*GØ�cÓ˜aÑÔð ñ ÜŒÜˆhŒÜÐ"Ô#ÜˆhŒØ!×'Ñ'Ó)ò 	.‰DˆAˆqØ�m AÑ&Ñ&ˆCÜ�Q�C�x  D˜z¨Ð,Õ-ð	.ð (ò 	2ˆAØ% aÑ(Ñ4Ø-¨aÑ0Ð3KÈAÑ3NÑN�Ü˜˜˜9 T¨$ KÐ0Õ1ð	2ô 	ˆhŒà—h‘h˜wŸ|™|›~Ó.€OõôDð NS÷qñ qðh 9Gò JÑ4ˆ
�O V¨WØÐ J°hÑ$>ØØ× Ñ  Ô'Ø$¤S¨£Z \Ð2‰Kð ×%Ñ%Ó'ð ð Ð"ÜÓSÈ7ÔSÓSˆJÚÙØ˜G Z°Ètöð  /Ò1Ù ¨°¸[ÕIð%Jð( ˜'Ð!Ð!ùòK
ùòV
ùò,
ùò& 5ùÚ<ùò JùÚOùò AùÚAs6   ÂYÅYÇ-YÉY#É/Y(ËY-Ë*Y2Ì Y7Ì9 Y<)NNNN)NFFrì   N)r<  r   rq   Úcollectionsr   Údifflibr   Ú
kaldialignr   r?  r   r   r.   rH   rU   Údictr~   r•   r�   r�   ÚboolrY  r…   rI   r-   ú<module>r_     s9  ðÛ Û Û 	Ý #Ý #å 'ð 	ˆ'ð€ð
-5˜$ð -5¨só -5ò`ðB
 ó 
ð( Ø#Ø ØñlØðlàðlð ðlð ð	lð
 ðlð ðlð ðlð ðlð ðlð ólð^ Ð Ø€ð, Tó ,ðb ØØØØñP"ØðP"àðP"ð ðP"ð ð	P"ð
 ðP"ð ôP"rI   